打印
[AVR单片机]

外部中断无反应

[复制链接]
736|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zl101lz|  楼主 | 2015-8-2 23:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在ATMega16上写的 外部中断 移植了ucos-II外部中断PD2(INT0)接在一个key上

这样写是有效的
#pragma interrupt_handler ISR_for_int0:iv_INT0
void ISR_for_int0(void)
{
#if OS_CRITICAL_METHOD == 3              
        OS_CPU_SR  cpu_sr;
#endif
        OS_ENTER_CRITICAL();

          wei_lock = ~wei_lock;  ★

        OS_ENTER_CRITICAL();
}
其实就带★的一行是有用的 其他的都是系统自带的
我改了一下就不行了 代码如下


void ISR_for_int0(void)
{
#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
        OS_CPU_SR  cpu_sr;
#endif
        OS_ENTER_CRITICAL();
       
        if (!(PIND&0x04))                                     //key按下去了
        {
         OSTimeDly(OS_TICKS_PER_SEC/200);  //延时5ms
         if (!(PIND&0x04))                                   //key真的按下去了 防止抖动
         {
          wei_lock = ~wei_lock;
          while(PIND&0x04);                              //key抬起来了
         }
         OSTimeDly(OS_TICKS_PER_SEC/200); //延时5ms
         while(PIND&0x04);                                //真的抬起来了
        }

        OS_ENTER_CRITICAL();
}



我试了一下,貌似!(PIND&0x04)这个就走不进去,key按下去不就是线与为0么 为什么不行呢?








         

相关帖子

沙发
john_lee| | 2015-8-2 23:53 | 只看该作者
在 isr 里你还敢 OSTimeDly,不挂掉就没有天理了。

使用特权

评论回复
板凳
zl101lz|  楼主 | 2015-8-3 00:05 | 只看该作者
john_lee 发表于 2015-8-2 23:53
在 isr 里你还敢 OSTimeDly,不挂掉就没有天理了。

还没走到OSTimeDly
我改成这样还是不行,走不到if里面

void ISR_for_int0(void)
{
#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
        OS_CPU_SR  cpu_sr;
#endif
        OS_ENTER_CRITICAL();
        
        if (!(PIND&0x04))                                     //key按下去了
        {
          wei_lock = ~wei_lock;
        }

        OS_ENTER_CRITICAL();
}

使用特权

评论回复
地板
john_lee| | 2015-8-3 10:42 | 只看该作者
本帖最后由 john_lee 于 2015-8-3 10:48 编辑

isr 能进入吗?
如果能进入就可能是抖动造成的立即读 PIND2 为 1 的情况。

使用特权

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

本版积分规则

4

主题

6

帖子

0

粉丝