#include <REGX51.H>
sbit LED1=P2^0;
void delay(unsigned int ten_s)
{
while(ten_s--);
}
void inittime0(void)
{
TMOD=0x01;//选择为定时器0模式,工作方式1
TH0=0xFC;//初值=65536-1000=64536=FC18H,定时1ms
TL0=0x18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void main()
{
inittime0();
while(1)
{
}
}
void time0() interrupt 1//定时器0中断函数
{
static unsigned int i;
TH0=0xFC; //初值=65536-1000=64536=FC18H,定时1ms
TL0=0x18;
i++;
if(i==1000)
{
i=0;
LED1=!LED1;
}
}
使用static关键字将i定义为静态变量:我们希望每次进入中断函数时,i保存的是上次累加值,使用了static关键字,就可以让变量实现这种功能,即不会每次进入中断函数后被初始化为0。假如去掉static,那么变量i就是一个局部变量,每次进入中断时,变量i的初始值都是0,也就是说它的值永远也不会递增到1000,从而实现不了1s的定时。