我们先用一个简单例子说明定时器中断应用技巧,电路采用第3章中的图3-9,利用定时器T0中断产生秒信号,然后让单片机的P0接口驱动一只数码管显示秒计数。
如果单片机的晶振频率为12MHz,则内部机器周期为1μs,即内部脉冲频率为1MHz。假如定时器对内部脉冲计5000个(5ms)就引发中断,定时器T0为工作方式1,则初值应为60536,T0发生200次中断就能累计1s。
T0中断的应用首先要对T0定时器进行初始化设定,可通过一个初始化函数完成,包括设定T0工作方式、设定初值、设定中断允许和优先级,最后启动T0。设定所涉及的特殊功能寄存器有TMOD、TCON、IP、IE。T0初始化程序设计流程如图4-8所示。
T0中断的执行由中断服务函数完成。由于T0工作在方式1时不能自动装初值,所以中断执行过程中需要先对T0装初值,然后通过一个记录中断次数变量得到秒数据。程序流程如图4-9所示。
图4-8 T0初始化流程
图4-9 程序流程
1.程序设计
程序包含主函数、定时器T0初始化函数、T0中断服务函数。显示程序放在中断服务函数内,具体程序如下:(www.xing528.com)
2.程序说明
如果单片机的振荡频率为f,振荡周期为t=1/f,则机器周期为T=12/f。如f=12MHz,
则T=1μF。
利用定时器/计数器定时中断时,在程序中首先设置工作模式,并计算它的初装值,若初装值不容易计算,可利用计算机中的计算器工具辅助。timer0工作在模式1可以最大65535μs中断1次;如工作在模式2,最大256μs中断1次。对T0初值设定也可以采用下列方式,如:
从本项目的程序中可以看出,数码管显示语句放在了timer0中断服务函数里面,由于5ms中断1次,因此数码管显示的数据会每5ms更新1次。1s内更新200次,更新过程是把原来的数据覆盖,但显示数据1s内变化1次。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。