mdsk.net
当前位置:首页 >> 单片机汇编延时50ms >>

单片机汇编延时50ms

你好!DELAY50MS: ;@12.000MHz PUSH 30H PUSH 31H MOV 30H,#98 MOV 31H,#62 NEXT: DJNZ 31H,NEXT DJNZ 30H,NEXT POP 31H POP 30H RET 仅代表个人观点,不喜勿喷,谢谢.

1、C51写的://延时1ms子程序 void DelayMs(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<120;j++); }//调用 void main(void) {DelayMs(50) //想多少ms就填多少 }2、汇编写的:;;;;;;;;;;延时50ms子程序;;;;;;;;;;;;;; DELAY: MOV R7,#98 D1: MOV R6,#255 NOP NOP DJNZ R6,$ ;执行一次2微妙 DJNZ R7,D1 RET

查询方式: ORG 00H START: MOV R0,#20 MOV R4,#60 LP0: MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV DPTR,#TABLE SETB TR0 LP1: JBC TF0,LP2 ACALL DISP AJMP LP1 LP2: DJNZ R0,LP0 CLR TR0 MOV R0,#20 MOV A

程序采用了查询的方法,基本正确.也可以改用中断的方法.1.缺少对TMOD的的设定,如果按照复位后的方式0来定时,定时一次,确实达不到50ms.2.3CB0H是在方式1条件下,定时50ms的初始值.但是再加上其它的语句,循环一次的时间就会超过50ms.所以,应该加大3CB0H的数值.

;按12M晶振普通51;TOTAL=200000t,1t=1us,T=0.2sDELAY: ;LCALL 调用 2 MOV R3,#4 ;1DELAY1: MOV R4,#101 ;1*4DELAY2: MOV R5,#246 ;1*101*4 DJNZ R5,$ ;2*246*101*4 DJNZ R4,DELAY2 ;2*101*4 DJNZ R3,DELAY1 ;2*4 NOP ;1 NOP ;1 NOP ;1 RET ;2

用定时中断来实现50ms定时中断一次,20次就是1 秒.你会1 秒了,20分钟就会了.再长的时间也能解决.

delay30s: MOV R4,#250 D1:MOV R5,#20 D2:MOV R6,#20 D3:MOV R7,#248 DJNZ R7,$ DJNZ R6,D3 DJNZ R5,D2 DJNZ R4,D1 RET

; org 0000h sjmp start org 000bh cpl p1.0 reti start: mov tmod, #02h mov th0, #206 mov tl0, #206 mov ie, #82h setb tr0 sjmp $ end 就这些,就可以了.

/*程序经调试,正确*///================== unsigned int pp1 //定义全局变量 unsigned int count=50000; //计数值,50MS#define TH_M1 (65536-count)/256;//赋值#define TL_M1 (65536-count)%256;//=============== mian() { EA=1; //开

很简单的,假设晶振频率为12M Hz ,则每一个机器周期为1us,T0工作于方式1,非门控,16位定时器.汇编程序为如下:MOV TMOD,00000001B 即MOV TMOD,01H 工作于方式11MOV TH0,3CH MOV TL0,0B0H 初始值STEB TR0 T0开始工作初始值计算: (65536-X)*1us=50ms=50000us 则X=15536 即3CB0H 1个机器周期=6个时钟周期=12个振荡周期而单片机是以机器周期为时间单位的,所以要为1*12/12M=1us

网站首页 | 网站地图
All rights reserved Powered by www.mdsk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com