单片机软件延时程序的设计
三、50ms延时程序的设计
50ms延时程序的设计(设晶振频率f=12MHz,则机器周
期为1μs)(见下表)。
表 源程序
DELAY:MOV R6,100 I1:MOV R7,#250 I2:DJNZ R7,I2
DJNZ R6,I1 RET
序号 ① ② ③ ④ ⑤
指令周期 1 1 2 2 2
指令执行次数 1
另一个地方。如:MOV R7,#80H,执行这条指令的功能是 将立即数80H送到寄存器R7。就单这条指令而言并没有任何 实际意义,而执行该指令则需要一个机器周期。
2.空操作指令NOP 空操作指令功能只是让单片机执行没有意义的操作, 消耗一个机器周期。 3.减1条件转移指令DJNZ 减1条件转移指令功能是将第一个操作数的内容减1, 判断所得结果是否为0,不为0则转移到指定地点,为0则顺 序往下执行。 利用以上三条指令的组合就可以比较精确地用软件的 方法设计出所需要的延时程序。
二、延时指令
在MCS-51单片机指令中并没有真正的延时指令,从以 上的概念我们知道单片机每执行一条指令都需要一定的时 间。所以可以让单片机不断地执行没有具体实际意义的指 令(通常把这些指令称为哑指令),就可以达到软件延时 的效果。
1.数据传送指令MOV 数据传送指令功能是将数据从一个地方复制、拷贝到
100 250×100
100 1
①MOV R6,#100在整个程序中只被执行一次,且为单
周期指令,所以耗时1×1μs。
②MOV R7,#250从②看到④只要R6-1不为0,就会返回
到这句,共执行了R6次,共耗时1×100μs。
③DJNZ R7,I2只要R7-1不为0,就反复执行此句(内循
环R7次),又受外循环R6控制,所以共执行R7*R6次,因是
期=50303μs=50.3ms
最后说明一点,编写程序时,一般将延时程序编写成
独立的子程序,而所谓子程序也就是一个实现某个功能的
小模块。这样在主程序中就可以方便地反复调用编写好的
延时子程序。
(作者单位:江苏省常州技师学院)
OCCUPATION 2012 07
91
案例 CASES
单片机软件延时程序的设计
文/吕 宁
在单片机的控制应用中,控制过程常有延时的需要, 例如交通灯的控制程序,控制红灯亮的时间持续30秒,就 可以通过延时功能来实现。延时功能除了可以使用定时器 /计数器之外,还可以使用软件程序来完成。软件延时程 序是典型的循环程序,它是通过执行一个具有固定延时时 间的循环体来实现延时的。本文从机器周期和指令周期的 区别和联系、编写软件延时程序所需相关指令的用法等方 面,介绍软件延时程序的设计。
一、机器周期和指令周期
1.机器周期 机器周期是指单片机完成一个基本操作所花费的时 间,一般使用μs来计量单片机的运行速度。MCS-51单片 机的一个机器周期包括12个振荡脉冲周期,因此,一个机 器周期就是振荡脉冲的十二分频。如果MCS-51单片机的振 荡脉冲频率为12MHz时,那么执行一个机器周期就只需要 1μs;如果采用的是6MHz的晶振,那么执行一个机器周期就 需要2μs。 2.指令周期 指令周期是指单片机执行一条指令所需要的时间,一般 以单片机的机器周期来计量指令周期。MCS-51单片机的指令 周期根据指令的不同,分成单周期指令(执行这条指令只需 一个机器周期)、双周期指令和四周期指令。除了乘、除两 条指令是四周期指令之外,其余MCS-51单片机指令均为单周 期或双周期指令。如果MCS-51单片机采用的是12MHz晶振, 那么它执行一条指令一般只需1~2μs的时间;如果采用的是 6MHz晶振,执行一条指令一般就需2~4μs的时间。 现在的单片机有很多种型号,但每个型号的单片机器 件手册中都会详细说明执行各种指令所需的机器周期。我 们可以依据单片机器件手册中的指令执行周期和单片机所 使用晶振频率,来完成需要用软件的方法进行的延时的程 序设计。
双周期指令,所以耗时2×R7×R6=2×250×100μs。
④DJNZ R6,I1从④看到②只要R6-1不为0,就会R6次
执行这句,因是双周期指令,所以耗时2×100μs。
⑤RET是一条子程序返回指令。在整个程序中只被执行
一次,且为双周期指令,所以耗时2×1μs。
所以总延时时间计算为:
t=(1×1+1×100+2×250×100+2×100+2×1)×机器周