找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机定时中断,不能正常运行,请大师帮助看看,问题出在哪儿?

[复制链接]
跳转到指定楼层
楼主
做了一个定时中断,不能正常运行,请高人帮助指点!
  1. #include <STC15F104E.H>                                        //12MHz
  2. #define uchar unsigned char //宏定义字符型变量
  3. #define uint  unsigned int        //宏定义整型变量
  4. #define  MAIN_Fosc 12000000L
  5. sbit jiance=P3^0;  
  6. sbit in=P3^1;
  7. sbit out=P3^3;
  8. uchar oldjiance=0;
  9. uchar flag=0;
  10. long        jishu=0;
  11. /************************************/
  12. /**********延时函数******************/
  13. /************************************/
  14. void  delay(unsigned char ms)
  15. {
  16.      unsigned int i;
  17.          do{
  18.               i = MAIN_Fosc/13000;
  19.                   while(--i)        ;   //14T per loop
  20.      }while(--ms);
  21. }
  22. /************************************/
  23. /**********定时器初始化******************/
  24. /************************************/
  25. void InitTimer(void)
  26. {   EA = 1;
  27.            AUXR |= 0x40;                //定时器1时钟1T模式,30us进行一次休眠检测
  28.         TMOD &= 0x0F;                //设置定时器模式
  29.         TL1 = 0x98;                //设置定时初值
  30.         TH1 = 0xFE;                //设置定时初值
  31.         TF1 = 0;                //清除TF1标志
  32.         TR1 = 1;                //定时器1开始计时

  33. }
  34. /************************************/
  35. /**********定时器1,休眠检测*********/
  36. /************************************/
  37. void tm1_isr() interrupt 3 using 1
  38. {
  39.     TR1=0;                 //关闭定时器T1
  40.          jishu++;
  41.    if(jiance==~oldjiance)         {jishu=0;}
  42.          
  43.    if(jishu>=5000000){flag=1;}        //2.5分钟,降温
  44.    if(jishu>=10000000){flag=2;} //5分钟,更低降温
  45.    if(jishu>=20000000){flag=3;jishu=20000000;}        //10分钟,停止加热         
  46.          oldjiance=jiance;
  47.     TR1=1;                  //启动定时器T1
  48. }
  49. /************************************/
  50. /************主函数******************/
  51. /************************************/
  52. main()
  53. {
  54. InitTimer();
  55. while(1)
  56. {
  57. switch (flag)
  58.             {
  59.                 case 0:  out=in;break;
  60.                 case 1: out=0;delay(100);out=in; break;
  61.                 case 2: out=0;delay(500);out=in; break;
  62.                 case 3: out=0; break;
  63.                 default: break;
  64.             }

  65.         
  66. }
  67. }
复制代码

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

使用道具 举报

沙发
ID:67356 发表于 2018-6-3 11:06 | 只看该作者
找到了原因了,还是基础不牢,低级错误
回复

使用道具 举报

板凳
ID:213173 发表于 2018-6-3 11:21 | 只看该作者
貌似定时器1中断ET1没有开.

评分

参与人数 3黑币 +41 收起 理由
angmall + 11 回帖助人的奖励!
jmkl128 + 10 是的。找了一天,没找到。发完求助帖,灵光.
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:155507 发表于 2018-6-3 22:06 | 只看该作者
STC15F100系列单片机只有定时器0和定时器2,无定时器1
回复

使用道具 举报

5#
ID:213173 发表于 2018-6-4 08:11 | 只看该作者
angmall 发表于 2018-6-3 22:06
STC15F100系列单片机只有定时器0和定时器2,无定时器1


回复

使用道具 举报

6#
ID:67356 发表于 2018-6-4 21:42 | 只看该作者
谢谢各位!是的,同时错了两个地方。没有定时器1和缺少ET1=1;
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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