51單片機(jī)定時(shí)器中斷程序
程序運(yùn)行開(kāi)始,A燈先亮5秒,然后滅了到B燈亮5秒,B再滅再到C燈亮5秒,C滅,程序結(jié)束,不再運(yùn)行。這程序該怎么寫?用定時(shí)器精確定時(shí)……晶振11.092MHZ。
#include"REG52.H"
/*
*
*/
sbitLED_A=P1^0;
sbitLED_B=P1^1;
sbitLED_C=P1^2;
unsignedcharTIME_BASE;
unsignedcharMACT_ENDB;
unsignedcharRece_Errp;
/*
*定時(shí)器初始化
*/
voidSystemInit(void)
{
TMOD=0x01;
TH0=(65536-45872)/256;//定時(shí)50ms//晶振:11.0592MHZ
TL0=(65536-45872)%256;
ET0=1;
TR0=1;
EA=1;
}
intmain(void)
{
SystemInit();
while(1)
{
/*程序一開(kāi)始上電Rece_Errp=0定時(shí)器5秒加一次*/
if(Rece_Errp==0)
{
LED_A=0;//A亮5秒
LED_B=1;//B是滅
LED_C=1;//C是滅
}
/*判斷是否5秒時(shí)間到*/
elseif(Rece_Errp==1)
{
LED_A=1;//A是滅
LED_B=0;//B亮5秒
LED_C=1;//C是滅
}
elseif(Rece_Errp==2)
{
LED_A=1;//A是滅
LED_B=1;//B是滅
LED_C=0;//C亮5秒
}
else
{
LED_A=1;//A是滅
LED_B=1;//B是滅
LED_C=1;//C是滅
while(1);//程序運(yùn)行到這里停止
}
}
}
voidTimer0_IRQ(void)interrupt1
{
TH0=(655365-45872)/256;
TL0=(655365-45872)%256;
/*進(jìn)入中斷50ms+1次*/
TIME_BASE++;
if(TIME_BASE==20)//20ms*50ms=剛好等于1000ms也就是1秒
{
TIME_BASE=0;
MACT_ENDB++;//一秒加一次
if(MACT_ENDB==5)//等于剛好5秒時(shí)間到
{
MACT_ENDB=0;
Rece_Errp++;//用來(lái)切換LEDA、B、C5秒滅
}
}
}