序的主函数中启动了定时器0,并实现了一个简单的功能:每隔0.1秒翻转一下LED的状态。使用定时器实现这个功能,不需要在程序中使用繁琐的延时函数,而是在定时器中断处理函数中实现LED的翻转,可以大大提高程序的效率和精度。
需要注意的是,定时器的初值需要通过计算后设置,以达到所需的定时效果。在本例中,定时器的初值为221,即定时器的计数频率为11.0592MHz / 12 / 221 = 4.17
序的主函数中启动了定时器0,并实现了一个简单的功能:每隔0.1秒翻转一下LED的状态。使用定时器实现这个功能,不需要在程序中使用繁琐的延时函数,而是在定时器中断处理函数中实现LED的翻转,可以大大提高程序的效率和精度。
需要注意的是,定时器的初值需要通过计算后设置,以达到所需的定时效果。在本例中,定时器的初值为221,即定时器的计数频率为11.0592MHz / 12 / 221 = 4.17kHz,计算如下:
$$
221 = \frac{65536 - T}{256} \\
T = 65536 - 221 * 256 = 0xdd
$$
除了做LED翻转,可以将中断处理函数中的代码修改为其他所需的任务的处理,例如控制电机转动、采集传感器数据等,以实现更多的功能。
#include <reg52.h>
#define LED P2 // 一个8位单独驱动的LED灯
/* 延时函数 */
void Delay(unsigned int t)
{
while(t--);
}
<