|
请大家看看这个程序,按理说应该触发一次外部中断i只会加1,avrstudio仿真也通过了,可是实际测试i会不断自加,好像中断一触发就一发不可收拾,改变外部中断触发条件为低电平触发会出现触发一次i自加2次的情况,上升沿、下降沿、低电位和任意逻辑转变触发都试过了,没一种能达到目的的,不知是哪里出了问题?换了2片新的M16都是这样。
winavr20060421版+M16测试。
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned char flags=0;
SIGNAL (INT0_vect)
{
cli();
flags=1; //中断标志
}
int main (void)
{
unsigned char i=0;
DDRA=0x00; //IO均为带上拉的输入
DDRB=0x00;
DDRC=0x00;
DDRD=0x00;
PORTA=0xFF;
PORTB=0xFF;
PORTC=0xFF;
PORTD=0xFF;
MCUCR=(1<<ISC01); //INT0下降沿触发
GICR=(1<<INT0); //使能INT0
GIFR=(1<<INTF1)|(1<<INTF0)|(1<<INTF2); //清标志
sei();
while(1)
{
if (flags)
{
flags=0;
i++;
sei();
}
}
}
-----此内容被gxlujd于2007-04-13,16:14:59编辑过 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|