#include <AT89X51.H>
void init_t0(void);
void t0_int(void) interrupt 1;
int i = 8; //循环次数为8
void main()
{
P1 = 0xff; //初始化LED,8个LED全灭,(假设低电平点亮)
init_t0() ;
while(1); //循环等待定时中断
}
void init_t0() //定时器0初始化程序
{
TMOD = 0x01;
TH0 =0x3c; //
晶振6MHz,每个
机器周期2us,所需计数时间为100ms=100000us
TL0 =0xb0; //定时器T0工作于方式1,最大定时时间为65536*2=131072us
ET0 =1; //所需计数值=(131072-100000)/2=15536,转换为
16进制即为0x3cb0
EA =1;
TR0 =1;
}
void t0_int() interrupt 1 //定时器0的中断处理函数
{
TH0 =0x3c;
TL0 =0xb0;
i = i-1;
if (i!=0)
{
P1 >>= 1;
}
else
{
ET0 =0; //8个灯已点亮,关中断,关定时器
EA =0;
TR0 =0;
}
}