|
程序如下
#include
unsigned int count=0;
unsigned int count1=0;
sbit P15=P1^5 ;//蜂鸣器
main()
{
TMOD=0X01;//选择定时器0方式1
TH0=(65536-50000)/256;//定时器置初值,定时50ms
TL0=(65536-50000)%256;
TR0=1;//启动定时器T0
ET0=1;//开定时器TO中断
TH1=(65536-50000)/256;//定时器置初值,定时50ms
TL1=(65536-50000)%256;
TR1=1;//启动定时器T1
ET1=1;//开定时器T1中断
EA=1;//开CPU中断
while(1)
{
if(count%40>5){
P0=0xff;//LED灯关
}else{
P0=0x00;//LED灯开
}
}
}
void t0(void)interrupt 1 using 0
{
count++; //次数加一
TH0=(65536-50000)/256;//定时器初值重载
TL0=(65536-50000)%256;
if(count==200)//10秒到否
{
count=0; //中断一直进行,屏蔽后COUNT将不再会回到200,所以P15一直为高
P15 = 0xff;//蜂鸣器开
}
}
void t1(void)interrupt 3 using 2
{
count1++; //次数加一
TH1=(65536-50000)/256;//定时器初值重载
TL1=(65536-50000)%256;
if(count1==600)//30秒到否
{
count1=0; //中断一直进行,屏蔽后COUNT1将不再会回到600,所以P15第一次为底后一直为高
P15 = 0x00;//蜂鸣器关
}
}
我写了两个中断.发现蜂鸣器一开始是开着的,响10秒后就被关闭,然后5秒响一次,持续3秒钟左右又被关闭,然后5秒响再响持续时间还是3秒左右,一直循环下去.由此觉得一开始的10秒是定时器没有到触发时间.然后关闭了,是因为T1启动关闭了,然后5秒后又响是T0启动.我不明白的是,是否中断程序就是这样不停循环的.如果我想关闭中断让T0再执行别的任务如何处理?另外,我屏蔽 T0和T1里面的TH1=(65536-50000)/256;//定时器初值重载
TL1=(65536-50000)%256;似乎没有什么影响,我开很多人写中断都写这句,但是我认为MAIN里面写了是不是在T0和T1里可以不用写?
|
|