延时方式
单片机控制应用中,延时必不可少。CPU过段时间再做某事,称为延时。延时有两种方法,即硬件延时和软件延时。
硬件延时是通过定时器/计数器实现的,软件延时一般通过执行循环程序实现。
硬件延时中,常用汇编指令及占用时间如下:
指令 | 占用机器时间 |
---|---|
MOV Rn,#Data | 1 |
DJNZ Rn,rel | 2 |
RET | 2 |
NOP | 1 |
以12MHz晶振为例,机器周期为1us,则执行一个MOV指令所用时间为1us;6MHz晶振机器周期为2us,执行一句DJNZ指令所用时间为4us。
硬件延时程序中又分为单重循环延时程序、双重循环延时程序及多重循环延时程序。晶振及延时程序的不同决定了延时时间范围。
单循环延时程序
D2: MOV R0 , #X ;将立即数X存到寄存器R0中,耗时1机器周期
D1: DJNZ R0 , D1 ;寄存器R0减1,不为零即跳转到D1,耗时2机器周期
RET ;耗时2机器周期
设机器周期为T,*延时时间=2XT+1T+2T=(3+2*X)T
R0为8位寄存器,X取值为0—256。
频率为6MHz晶振延时时间范围为10~1030us;频率为12MHz晶振延时时间范围为 50—515us。
双重循环延时程序*
D3: MOV R1,#Y ;1周期
D2: MOV R0,#X ;1周期
D1: DJNZ R0,D1 ;2周期
DJNZ R1,D2 ;2周期
RET ;2周期
延时时间=(2X+1+2)YT+T+2T=(2XY+3Y+3)*T