作为定时器应用的第一个案例,先来一个简单的,具体要求是:系统上电后,让L07的LED以50毫秒的时间间隔闪烁。使用定时器T0实现50毫秒定时,利用定时中断完成L07灯的闪烁。程序设计的思路是把系统的控制任务分为两个模块,一是主程序,主要完成50毫秒定时的寄存器初始化和定时中断的初始化设置,另一个是定时中断服务程序设计,主要完成每次50毫秒定时时间到达后,输出控制L07取反,以及重设定时初始值的操作。请看本节的视频讲解,然后做些整理和总结。
显然,启用定时中断来实现LED的闪烁,其设计思路与之前我们所做的完全不同!简单梳理一下,无非是这样的一个套路:首先根据定时需要选择定时容量,从而完成TMOD的设置。接着根据定时的时间长度把定时初始值计算出来,把TH0和TL0寄存器的初值填装好,然后就是启动定时器TR0=1,这样定时器就开始工作了,每一个过微秒TL0会自动加1。经过50毫秒以后,计数器就会溢出,我们要让它对CPU产生中断,所以接下来我们得设置定时中断的机制:也就是设置两级中断允许EA和ET0。做了这样的设置后,一旦定时时间到,系统就自动转去执行定时中断服务程序,那么我们在定时中断服务程序里做L07的取反输出就可以了,考虑到定时器还得为下一次50毫秒定时做准备,所以每次定时到达后我们需要对定时器做一次初始数值的重装。由此看来,这个程序就像上面所说的分为两大部分。大家要逐步熟悉这种采用中断方式进行程序任务管理的程序设计方法。也请大家学完后抛开我的程序,自己重新完成设计,以加深对这部分知识的理解和应用。
在上例的调试中,大家能感觉到LED闪烁间隔太短,以至于闪烁太快,下面我们继续设计程序让它闪烁变慢一点。

