计算机反复执行一段程序以达到延时的目的称为软件延时,单片机程序中经常需要短时间的延时,但是相当一部分人对延时程序很模糊,对延时程序的算法不够了解,在这里我以12MHz晶振和两个经典延时子程序为例,详细分析单片机汇编延时程序。
何为时钟周期、机器周期、和指令周期?
时钟周期:也就是振荡周期,以12MHz的时钟脉冲为例,那时钟周期就为(1/12000000)s=(1/12)us;
机器周期:1个机器周期=6个状态周期=12个时钟周期=1us;
指令周期:CPU执行一条指令所需要的时间称为指令周期,指令周期是以机器周期为单位的,不同的指令所需的机器周期不一定相同,可参考51单片机指令速查表。
由上可得:CPU执行一条单周期指令,需要1us;执行一条双周期指令需要2us。
下面是具体的延时子程序分析:
0.1s延时子程序(12MHz晶振):
MOV R7,#200 ;单周期指令(1us)
D1: MOV R6,#250 ;单周期指令(1us)
DJNZ R6,$ ;双周期指令(2us)//该指令自身执行R6次
DJNZ R7,D1 ;双周期指令(2us)//D1执行R7次
RET ;双周期指令(2us)
T=1+(1+2*R6+2)*R7+2
=100603us
≈0.1s
0.5s延时子程序(12MHz晶振):
MOV R7,#5 ;单周期指令(1us)
D1: MOV R6,#200 ;单周期指令(1us)
D2: MOV R5,#250 ;单周期指令(1us
DJNZ R5,$ ;双周期指令(2us)//该指令自身执行R5次
DJNZ R6,D2 ;双周期指令(2us)//D2执行R6次
DJNZ R7,D1 ;双周期指令(2us)//D1执行R7次
RET ;双周期指令(2us)
T=1+[1+(1+2*R5+2)*R6+2]*R7+2
=503018us
≈0.5s
原创文章如转载,请注明:转载自萬用電路板 [ http://www.jiangx.net/ ]