找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2147|回复: 0
打印 上一主题 下一主题
收起左侧

请问这个单片机程序定时器中断为什么没有被执行?

[复制链接]
跳转到指定楼层
楼主
ID:728079 发表于 2020-4-13 11:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个温度报警的程序,想实现一个5s的计时器中断,在中断的时候将当前温度temp的值赋给变量T。
T用作温度报警的判断。
在中断里加了一个LED,仿真的时候LED没有亮,LCD输出的T值也一直是0,好像是因为没有进入中断。
请问大佬
单片机源程序如下:
  1. /*********************************************************/
  2. // 报警判断
  3. /*********************************************************/
  4. void AlarmJudge(int dat2)
  5. {

  6.         if((dat2-T)>5)
  7.         {        
  8.                 Led2_P=0;

  9.         }
  10.         else
  11.         {
  12.         Led2_P=1;
  13.         }

  14.         /*蜂鸣器报警判断*/
  15.         if(Led2_P==0)
  16.                 Buzzer_P=0;
  17.         else
  18.                 Buzzer_P=1;
  19. }


  20. void Timer0Init()                                                        //定时器0初始化
  21. {
  22.         TMOD=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
  23.         TH0=0X3C;        //给定时器赋初值,定时1ms
  24.         TL0=0XB0;        
  25.         ET0=1;//打开定时器0中断允许
  26.         EA=1;//打开总中断
  27.         TR0=1;//打开定时器
  28.                         
  29. }


  30. void main(void)
  31. {
  32.         
  33.         uchar i;                                                                // 循环变量
  34.         
  35.         Timer0Init() ;                                                        //定时器0初始化
  36.         LcdInit();                                                            // 液晶功能初始化
  37.         LcdShowInit();                                                        // 液晶显示内容初始化               

  38.                                                                
  39.         

  40.         while(DS18B20_ReadTemp()==85)                                                // 等待传感器初始化完成
  41.         {
  42.                 DelayMs(10);
  43.         }
  44.         
  45.         while(1)
  46.         {

  47.                 temp=DS18B20_ReadTemp();        // 读取温度值
  48.                 LcdGotoXY(1,5);                                                // 液晶光标定位到第1行第5列
  49.             LcdPrintNum2(temp);                                // 显示温度值
  50.                         LcdGotoXY(1,11);                                                // 光标定位
  51.                         LcdPrintNum2(T);                   //显示中间变量T
  52.                 AlarmJudge(temp);                        // 报警判断

  53.                                 for(i=0;i<15;i++)                                        // 执行15次循环(延时0.15秒,并在这个时间段进行按键扫描)
  54.                 {
  55.                         DelayMs(10);                                                // 延时
  56.                 }



  57.         }
  58. }

  59. void Timer0() interrupt 1
  60. {
  61.         static u16 j;
  62.         TH0=0X3C;        //给定时器赋初值,定时50ms
  63.         TL0=0XB0;
  64.         
  65.         j++;
  66.         
  67.         if(j>=500)
  68.         {
  69.                 j=0;
  70.                 T=temp;
  71.                 Led3_P=0;
  72.         }

  73. }
复制代码

问题出在哪儿了?


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表