|
这是一个温度报警的程序,想实现一个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;
- }
- }
复制代码
问题出在哪儿了?
|
|