中断实验原理
如图所示,P0.0-7与发光二极管相连,TMR0作为定时器使用。
系统时钟频率为12MHz,设置T0采用方式1定时,16位计数,非自动重载,
则最大定时时间为65.536ms,参看课本P105例4-4。为了使LED的周期为1秒
(0.5秒亮,0.5秒灭),可以把T0设定为50ms溢出申请中断,系统晶振为12MHz,
则其计数初值为3CB0H。这样累计10次50ms的中断即为0.5秒。
代码如下:
#include<reg52.h>
sbit LED=P0^4;
unsigned char i;
void Init_Timer0(void) //T0初始化函数
{
TMOD = 0x01; //设置定时器为工作方式1
TH0 = 0x3C; //设定T0计数器初始值
TL0 = 0xB0; //设置初值
EA=1; //开总中断
ET0=1; //开T0中断
TR0 = 1; //打开定时器开关,开始定时
}
main ()
{
P0=0xFF; //初始化P0
i=0;
Init_Timer0();
while(1); //空操作,等待中断
}
void Timer0_isr(void)interrupt 1 using 1
{
TH0=0x3C; //重载初始值
TL0=0xB0;
//单次计时完成后,TH0 与TL0 的值均为11111111,所以需要对他们重新赋初值
i++;
if(i==10)
{
i=0;
LED=~LED; //每0.5s,指示灯反相
}
}
编译: