找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为什么51定时器中断标志用手动清除失败?

[复制链接]
跳转到指定楼层
楼主
ID:184267 发表于 2018-3-30 13:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10黑币
本帖最后由 MHNMHN 于 2018-3-30 23:14 编辑
  1. 失败的代码
复制代码
  1. 成功的代码
复制代码
上面那个是手动清除标志位,后面那个用中断函数清除标志位搞不懂为什么下面的代码能运行成功,上面那个不行
失败的代码貌似跑不出来.....




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

使用道具 举报

沙发
ID:299825 发表于 2018-3-31 11:15 | 只看该作者
应该是到你响应中断或者软件清中断标志位为止吧。
外部中断等不大清楚。内部的计时器等应该可以读到相应的标志位的。
回复

使用道具 举报

板凳
ID:299858 发表于 2018-3-31 12:58 | 只看该作者
看不到代码
回复

使用道具 举报

地板
ID:251236 发表于 2018-3-31 15:15 | 只看该作者
先把引起中断的条件去除,如果是中断发生的频率很高,而你却是用仿真的方法来观察中断标志位,或许会出现你说的情况
回复

使用道具 举报

5#
ID:251236 发表于 2018-3-31 15:16 | 只看该作者
有的单片机,标志位的清除的指令:写1清除,不是直接写0
回复

使用道具 举报

6#
ID:184267 发表于 2018-3-31 16:06 | 只看该作者
代码我再发上来
  1. 失败代码
  2. void delay()
  3. {
  4.         TR0=1;
  5.         TH0=0x1f;
  6.         TL0=0xfb;
  7.         while(TF0==0);
  8.         TF0=0;       
  9. }
复制代码

  1. 成功代码
  2. void delay()
  3. {
  4.         TR0=1;
  5.         TH0=0x1f;
  6.         TL0=0xfb;
  7.         while(TF0==0);       
  8. }

  9. void Timer0Interrupt(void) interrupt 1
  10. {
  11.     TH0 = 0x1F;
  12.     TL0 = 0xFB;
  13. }
复制代码
回复

使用道具 举报

7#
ID:184267 发表于 2018-4-1 12:22 | 只看该作者
回复

使用道具 举报

8#
ID:295783 发表于 2018-4-1 17:40 | 只看该作者
一步一步来 一小部分一小部分的排除 这样能准确的找到问题的所在
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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