单片机软件延时程序的设计

更新时间:2023-12-18 作者:用户投稿原创标记本站原创 点赞:18045 浏览:81315

在单片机的控制应用中,控制过程常有延时的需要,例如交通灯的控制程序,控制红灯亮的时间持续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的时间.

现在的单片机有很多种型号,但每个型号的单片机器件手册中都会详细说明执行各种指令所需的机器周期.我们可以依据单片机器件手册中的指令执行周期和单片机所使用晶振频率,来完成需要用软件的方法进行的延时的程序设计.

二、延时指令

在MCS-51单片机指令中并没有真正的延时指令,从以上的概念我们知道单片机每执行一条指令都需要一定的时间.所以可以让单片机不断地执行没有具体实际意义的指令(通常把这些指令称为哑指令),就可以达到软件延时的效果.

1.数据传送指令MOV

数据传送指令功能是将数据从一个地方复制、拷贝到另一个地方.如:MOVR7,#80H,执行这条指令的功能是将立即数80H送到寄存器R7.就单这条指令而言并没有任何实际意义,而执行该指令则需要一个机器周期.

2.空操作指令NOP

空操作指令功能只是让单片机执行没有意义的操作,消耗一个机器周期.


3.减1条件转移指令DJNZ

减1条件转移指令功能是将第一个操作数的内容减1,判断所得结果是否为0,不为0则转移到指定地点,为0则顺序往下执行.

利用以上三条指令的组合就可以比较精确地用软件的方法设计出所需要的延时程序.

三、50ms延时程序的设计

50ms延时程序的设计(设晶振频率f等于12MHz,则机器周期为1μs)(见下表).

①MOVR6,#100在整个程序中只被执行一次,且为单周期指令,所以耗时1×1μs.

②MOVR7,#250从②看到④只要R6-1不为0,就会返回到这句,共执行了R6次,共耗时1×100μs.

③DJNZR7,I2只要R7-1不为0,就反复执行此句(内循环R7次),又受外循环R6控制,所以共执行R7*R6次,因是双周期指令,所以耗时2×R7×R6等于2×250×100μs.

④DJNZR6,I1从④看到②只要R6-1不为0,就会R6次执行这句,因是双周期指令,所以耗时2×100μs.

⑤RET是一条子程序返回指令.在整个程序中只被执行一次,且为双周期指令,所以耗时2×1μs.

所以总延时时间计算为:

t等于(1×1+1×100+2×250×100+2×100+2×1)×机器周期等于50303μs等于50.3ms

最后说明一点,编写程序时,一般将延时程序编写成独立的子程序,而所谓子程序也就是一个实现某个功能的小模块.这样在主程序中就可以方便地反复调用编写好的延时子程序.

(作者单位:江苏省常州技师学院)