打印
[AVR单片机]

请教:AVR mega8 在INT0中断内读取TWI的问题AVR, TWI, 请教

[复制链接]
2706|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
KaiXuan|  楼主 | 2010-12-10 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,请教个问题
我用CH452做显示及按键功能,需要在INT0的中断内频繁读取按键值,在中断内我做了一个试验性的代码
SIGNAL(SIG_INTERRUPT0)
{
uchar Exit=1;
  while(Exit)
   {
   
    if((PIND&0x04)==0)
    {

     if(twi_readBtye()==0x00)
     {
     i++;
      SET_T_dis(i);
     }
     if(twi_readBtye()==0x18)
     {
     i--;
      SET_T_dis(i);
     }
         
     }
   }
}
问题是只能在第一次进入中断时能正确读出twi_readBtye(),接着就什么也读不出了。如果在程序运行中能够离开中断,且再一次进入中断时也可以正常读出twi_readBtye(),难道TWI与INT0之间有冲突?但是这个项目不能在操作按键时频繁离开中断。有望高手给予指教,不胜感激。

相关帖子

沙发
john_lee| | 2010-12-10 13:23 | 只看该作者
SIGNAL(SIG_INTERRUPT0)
改为:
ISR(INT0_vect, ISR_NOBLOCK)

不过在INT0中断里执行这么长时间的操作,是非常不好的。当然,如果你的程序就只干这些事,也可以。

使用特权

评论回复
板凳
KaiXuan|  楼主 | 2010-12-10 15:21 | 只看该作者
本帖最后由 KaiXuan 于 2010-12-10 15:23 编辑

感谢john lee
依照您提供的方法问题还是依然存在。

AVR Studio4.18+WinAVR-20100110

使用特权

评论回复
地板
928315| | 2010-12-12 12:11 | 只看该作者
按键需要消抖的,其实你后面读出的数据,已经外部中断很多次了。
你可以尝试接按键的脚,接IO口,把IO口拉低拉高来测试。IO拉高拉低的次数,就代表你按键的次数。

使用特权

评论回复
5
KaiXuan|  楼主 | 2010-12-22 23:10 | 只看该作者
本帖最后由 KaiXuan 于 2010-12-22 23:13 编辑

可能我之前说的不太清楚,是这样的 CH452是一个I2C芯片且有一个中断输出脚,它同时提供了LED数码管驱动和按键功能。现在问题是在INT0外部中断内读取TWI总线上的CH542不正常,也就是说在中断内读不出键值但显示正常,只要在中断外按键一切正常!452是内部硬件按键消抖,这个项目最好是能在INT0中断搞定按键。难道是mega8不能在外部中断内同时使用TWI功能?具体是怎么回事还望高手指教。

使用特权

评论回复
6
xiaofa| | 2010-12-23 20:58 | 只看该作者
菜鸟有礼啦!怎么样向AVR mage8里头写程序啊?硬件方面出问题的,自己焊的下载电路,没成功,不知是哪个地方的问题!有什么地方要注意吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

14

帖子

0

粉丝