定时中断和定时器延时差不多,所不同的就是开启了定时器中断功能,当定时器溢出标志TFx(x=0,1,2)置位时触发中断,单片机进入中断服务子程序,执行中断服务子程序功能。
定时器中断的好处就是单片机在定时器计时时可以做其他的事情,可以增强单片机运行效率。如果只在单片机定时中断中完成所有任务,那么单片机可以设置进入休眠模式,以节省功耗。
这里给出的代码是通过定时器中断实现P1口LED隔1秒闪烁一次。具体代码如下:。
#include
#define T0_INTERRUPT 1 //T0中断向量号
#define LED P1
typedef unsigned char uchar;
typedef unsigned int uint;
void Init_T0();
void main()
{
LED = 0xFF; //熄灭所有的LED
Init_T0(); //初始化定时器0
while(1)
{
PCON |= 0x01; //单片机进入休眠模式,节省功耗
}
}
void Init_T0()
{
TMOD &= 0xF0;
TMOD |= 0x01; //16位定时器模式
TH0 = 0xFC;
TL0 = 0x18;
EA = 1; //开全局中断
ET0 = 1; //允许T0中断
TR0 = 1; //启动定时器
}
void T0_Interrupt() interrupt T0_INTERRUPT
{
static uint i = 0;
TH0 = 0xFC;
TL0 = 0x18;
i ++;
TF0 = 0;
if(i == 1000) //1秒取反LED,使之闪烁
{
LED ^= 0xFF;
i = 0;
}
}