通过51单片机控制中间继电器,让一个加热设备每天定时工作一个小时,望大神指点,看看程序哪一块 不对?

2025-05-14 06:00:47
推荐回答(2个)
回答(1):

首先要说的是,你的程序是有错误的,中断中声明的变量,不能用于计数的


因为每次进入中断,都是重新建立此变量,所以此变量的值只会从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;}//如果设备未开启,并且达到开启时间,则打开设备

/***************************************************************************/

回答(2):

timer1 的中断服务子程序中请用TH1和TL1再试试……