打印
[AVR单片机]

AVR 外部中断怎么只能进入中断0哪!

[复制链接]
3029|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dc42733255|  楼主 | 2011-4-6 11:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是俺无聊时,编的一个外部中断程序,但是无论怎么改变中断口,程序都只能跑向外部中断0,这是为什么呀,请大家检查一下。

#include<avr/io.h>
#include<avr/interrupt.h>
#include<avr/eeprom.h>
/*宏定义PORTB口前三个脚的状态*/
#define red_on     PORTB&(1>>0)
#define red_off    PORTB|1
#define green_on   PORTB&(~(1<<1))
#define green_off  PORTB|(1<<1)
#define yellow_on  PORTB&(~(1<<2))
#define yellow_off PORTB|(1<<2)
void data_initialize(void)/* 端口初始化 */
{DDRD=0x00;/* D口为输入口*/
DDRB=0xff;/* f口为输出口*/
PORTB=0x00;
PORTD=0xfb;
}

SIGNAL(SIG_INTERRUPT0)/*外部中断0,触发外部中断1*/
{
PORTB=yellow_off;
PORTB=green_off;
PORTB=red_on;
eeprom_busy_wait();
PORTD=eeprom_read_byte((void*)0xf1);

}

SIGNAL(SIG_INTERRUPT1)/*外部中断1,触发外部中断2*/
{
  PORTB=red_off;
  PORTB=green_off;
  PORTB=yellow_on;
  PORTD=eeprom_read_byte((void*)0xf2);
  
  
}
SIGNAL(SIG_INTERRUPT2)/*外部中断2,触发外部中断3*/
{
  PORTB=red_off;
  PORTB=red_off;
  PORTB=green_on;
  PORTD=eeprom_read_byte((void*)0xf3);

}
SIGNAL(SIG_INTERRUPT3)/*外部中断4,触发外部中断1*/
{
PORTB=red_off;
PORTB=red_off;
PORTB=green_off;
PORTD=eeprom_read_byte((void*)0xf4);


}

void int_initialize(void)/*外部中断参数设置,低电平触发中断,0-3中断使能*/
{
EICRA=0x00;
EIMSK|=0x0f;
sei();
}
int main(void)
{
  eeprom_busy_wait();
  eeprom_write_byte((void *)0xf1,0xfd);
  eeprom_busy_wait();

  eeprom_busy_wait();
  eeprom_write_byte((void *)0xf2,0xfb);
  eeprom_busy_wait();

  eeprom_busy_wait();
  eeprom_write_byte((void *)0xf3,0xf7);
  eeprom_busy_wait();

  eeprom_busy_wait();
  eeprom_write_byte((void *)0xf4,0xfe);
/*-----------------------------------触发状态写入EEPROM*/
  
  data_initialize();/*端口初始化参数*/

  int_initialize();/*中断初始化端口*/





}

相关帖子

沙发
ccxlslr| | 2011-4-6 16:03 | 只看该作者
型号都不说,不过说了我也不知道!

使用特权

评论回复
板凳
dc42733255|  楼主 | 2011-4-7 08:21 | 只看该作者
选的是ATMEGA128

使用特权

评论回复
地板
airwill| | 2011-4-7 17:23 | 只看该作者
/*宏定义PORTB口前三个脚的状态*/
#define red_on     PORTB&(1>>0)

这里是不是弄错啦?

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
dc42733255 + 1
5
dc42733255|  楼主 | 2011-4-8 08:23 | 只看该作者
呵呵,谢谢,#define red_on     PORTB&(1>>0) 改成,#define red_on     PORTB&(1>>1)

这里错了.
   但是这对中断无影响呀,我这个程序在PORD口对应的中断口电平改变时,无法进入相应的中断程序,只有在中断0循环,请各位高手看一下。谢谢!

使用特权

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

本版积分规则

12

主题

101

帖子

0

粉丝