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