打印
[AVR单片机]

AVR中断不对,怎么回事?

[复制链接]
1691|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sdu_yqc|  楼主 | 2011-5-4 17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sdu_yqc 于 2011-5-4 17:46 编辑

将1Hz的方波连到INT0,程序代码如下。按理说,将PC0接发光二极管,发光二极管应该按1Hz的频率闪烁的,但是 发光管却一直亮着,难道是中断错了?

#pragma interrupt_handler int0_isr:2  //外部中断0

void int0_isr(void)     //external interupt on INT0
    {
     DDRC|=BIT(0);
         PORTC|=BIT(0);
     }
         
void init_int0(void)
     {
                     //stop errant interrupts until set up
     CLI(); //disable all interrupts
     PORTD|= BIT(2); //使INT0对应口上拉电阻有效
     DDRD &=~BIT(2); //必须设置INT0对应口为输入
     
     MCUCR = 0x02; //INT0 的下降沿产生异步中断请求
     GICR = 0x40; //INT0使能
     TIMSK = 0x00; //timer interrupt sources
     SEI(); //re-enable interrupts
     
      }

void main(void)
{  ……
        init_int0();
      ……
}

相关帖子

沙发
woshixinshou| | 2011-5-4 21:25 | 只看该作者
错了,置1后没有置0,维持最后状态。

使用特权

评论回复
板凳
sdu_yqc|  楼主 | 2011-5-4 21:47 | 只看该作者
错了,置1后没有置0,维持最后状态。
woshixinshou 发表于 2011-5-4 21:25

是啊,在主程序中写置1,在中断子程序中,写 PORTC =~PORTC; 就可以了。现在是只用了PC0,可以写~PORTC。。不知道怎样只对PC0取反啊?

使用特权

评论回复
地板
ccxlslr| | 2011-5-10 11:55 | 只看该作者
你用最笨的办法实现了再说,别说你不知道.
所有新手都是这样的,看到复杂就不做,来问简单的方法.

使用特权

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

本版积分规则

0

主题

140

帖子

1

粉丝