首先要说的是,你的程序是有错误的,中断中声明的变量,不能用于计数的
因为每次进入中断,都是重新建立此变量,所以此变量的值只会从0到1,不会增加
另外,你想实现的功能不需要这么复杂,使用一个定时器即可
再有就是你的时分秒溢出处理部分太乱,哈哈
已经帮你修改了,修改后的如下
/***************************************************************************/
#include
#define uint unsigned int
#define uchar unsigned char
uchar miao=0,fen=0,shi=0; uint aa; sbit BUZZ=P2^3;
/***************************************************************************/
void start()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
BUZZ=0;//打开设备,一小时后关闭,23小时自动开
}
/***************************************************************************/
void main()
{
start();
while(1);
}
/***************************************************************************/
void time_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa>=20){aa=0; miao++;}
if(miao>=60){miao=0; fen++;}
if(fen>=60){fen=0; shi++;}
if(shi>=24){shi=0;}
if(shi==1&&BUZZ==0){BUZZ=1;}//如果设备已开启,并且达到加热时间,则关闭设备
if(shi==0&&BUZZ==1){BUZZ=0;}//如果设备未开启,并且达到开启时间,则打开设备
}
/***************************************************************************/
timer1 的中断服务子程序中请用TH1和TL1再试试……