一般采用循环结构,达到多次反复执行某一段指令的目的,来增加延时的时间,可以通过对循环次数的控制,来达到控制延时时间长短的目的。
为了延长延时时间,一般要采用多重循环,即由外循环内部又含有内循环。
延时时间=(内循环时间)×外循环次数。
例如:设计一个延时1ms的延时子程序ys1ms,设单片机8051的时钟频率为12MHZ。
则单片机8051一个机器周期=12T=12/f=12/12MHZ=1微秒
程序和延时时间计算如下:
ys1ms:MOV R7,#4 单周期1uS ( 晶振为12MHz)
DEL1: MOV R6,#123 单周期1uS
DEL2: DJNZ R6,DEL2 双周期2uS*123=246uS
DJNZ R7,DEL1 双周期(2us+246+1)*4=996uS
NOP 单周期1uS
RET 双周期2uS
延时时间t=1uS +(1us+246uS+2uS)×4+1uS+2uS=1000uS=1ms
其中(1us+246uS+2uS)=249uS 为内循环时间 4为外循环次数
第一个1uS 是第一条指令的执行时间
1uS+2uS 是 最后二条指令 NOP RET指令的执行时间。
哈哈 给俺加分吧
Delay: MOVR7,#100 12 MHz 1 uSL1:MOVR6,#250
DJNZ R6,$ 2 uS * 250 = 500 uS 2 uS
DJNZ R7,L1(500 + 2 + 1) * 100 = 50300 uS
RET 延时为 50.3 mS
很简单的,假设晶振频率为12M Hz ,则每一个机器周期为1us,T0工作于方式1,非门控,16位定时器。汇编程序为如下:MOV TMOD,00000001B 即MOV TMOD,01H工作于方式11
MOV TH0,3CH
MOV TL0,0B0H 初始值
STEB TR0 T0开始工作
初始值计算: (65536-X)*1us=50ms=50000us
则X=15536 即3CB0H
1个机器周期=6个时钟周期=12个振荡周期
而单片机是以机器周期为时间单位的,所以要为
1*12/12M=1us
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)