/* 名称:报警与旋转灯
说明:定时器控制报警灯
旋转显示,并发出仿真警报声。
*/
#includereg51.h>
#includeintrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitSPK=P3^7;
ucharFRQ=0x00;
//延时
voidDelayMS(uintms)
{
uchari;
while(ms--)for(i=0;i120;i++);
}
//INT0中断函数
voidEX0_INT()interrupt0
{
TR0=~TR0;//开启或停止两定时器,分别控制报警器的声音和LED旋转
TR1=~TR1;
if(P2==0x00)
else P2=0xe0;//开3个旋转灯
}
//定时器0中断
voidT0_INT()interrupt1
{
TH0=0xfe;
TL0=FRQ;
SPK=~SPK;
}
//定时器1中断
voidT1_INT()interrupt3
{
TH1=-45000/256;
TL1=-45000%256;
P2=_crol_(P2,1);
}
//主程序
voidmain()
{
P2=0x00;
SPK=0x00;
TMOD=0x11;//T0、T1方式1
TH0=0x00;
TL0=0xff;
IT0=1;
IE=0x8b;//开启0,1,3号中断
IP=0x01;//INT0设为最高优先
TR0=0;
TR1=0; //定时器启停由INT0控制,初始关闭
while(1)
{
FRQ++;
DelayMS(1);
}
}
拓展阅读:定时器控制交通指示灯程序