|
這是一個溫度報警的程序,想實現一個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;
- }
- }
復制代碼
問題出在哪兒了?
|
|