标题:
请问这个单片机程序定时器中断为什么没有被执行?
[打印本页]
作者:
Kawhi灬
时间:
2020-4-13 11:38
标题:
请问这个单片机程序定时器中断为什么没有被执行?
这是一个温度报警的程序,想实现一个5s的计时器中断,在中断的时候将当前温度temp的值赋给变量T。
T用作温度报警的判断。
在中断里加了一个LED,仿真的时候LED没有亮,LCD输出的T值也一直是0,好像是因为没有进入中断。
请问大佬
单片机源程序如下:
/*********************************************************/
// 报警判断
/*********************************************************/
void AlarmJudge(int dat2)
{
if((dat2-T)>5)
{
Led2_P=0;
}
else
{
Led2_P=1;
}
/*蜂鸣器报警判断*/
if(Led2_P==0)
Buzzer_P=0;
else
Buzzer_P=1;
}
void Timer0Init() //定时器0初始化
{
TMOD=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0X3C; //给定时器赋初值,定时1ms
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void main(void)
{
uchar i; // 循环变量
Timer0Init() ; //定时器0初始化
LcdInit(); // 液晶功能初始化
LcdShowInit(); // 液晶显示内容初始化
while(DS18B20_ReadTemp()==85) // 等待传感器初始化完成
{
DelayMs(10);
}
while(1)
{
temp=DS18B20_ReadTemp(); // 读取温度值
LcdGotoXY(1,5); // 液晶光标定位到第1行第5列
LcdPrintNum2(temp); // 显示温度值
LcdGotoXY(1,11); // 光标定位
LcdPrintNum2(T); //显示中间变量T
AlarmJudge(temp); // 报警判断
for(i=0;i<15;i++) // 执行15次循环(延时0.15秒,并在这个时间段进行按键扫描)
{
DelayMs(10); // 延时
}
}
}
void Timer0() interrupt 1
{
static u16 j;
TH0=0X3C; //给定时器赋初值,定时50ms
TL0=0XB0;
j++;
if(j>=500)
{
j=0;
T=temp;
Led3_P=0;
}
}
复制代码
问题出在哪儿了?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1