430的一个中断问题

[复制链接]
851|7
 楼主| 迪卡 发表于 2016-1-21 20:28 | 显示全部楼层 |阅读模式
用TIMERA0实现1s中断,在中断函数里做一个3S到达判断,然后对P2端口状态取反(LED显示)
运行结果:当直接在中断函数内对端口对端口状态取反时,运行正常。(注:在主函数内执行了P2OUT = 0XFF;这句时,LED灯亮的时间极短,远不到一秒)当在中断函数内添加了IF判断语句后,端口无反应。找了几天也没有找到原因
lwsn 发表于 2016-1-21 20:59 | 显示全部楼层
当在中断函数内添加了IF判断语句后,端口无反应

那是因为IF语句没有实现吧
nanmoj 发表于 2016-1-22 15:38 | 显示全部楼层
可能是变量定义的问题吧?有些变量在中断中发生改变,跳出中断后又恢复正常,在AVR中遇到过这种问题,定义成volatile类型就好了。
米尔豪斯 发表于 2016-1-23 14:34 | 显示全部楼层
volatile类型变量有什么特点,在什么时候用
Thor9 发表于 2016-1-23 14:59 | 显示全部楼层
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
豆腐块 发表于 2016-1-23 15:39 | 显示全部楼层
正确使用 volatile 变量的条件
  只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
  ● 对变量的写操作不依赖于当前值。
  ● 该变量没有包含在具有其他变量的不变式中。
zhangbo1985 发表于 2016-1-23 16:50 | 显示全部楼层
正确处理好中断相关系的寄存器的默认值的。
auv555 发表于 2016-1-26 13:16 | 显示全部楼层
楼主 解决了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

109

主题

650

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部