我只几天在做mage16INT0中断程序时,给外部中断后,程序不进入中断子程序而是跳出循环,从主程序开始执行,这是怎么回事?多多指教!试验程序:
#include "iom16v.h" //;icc avr ATmega16 头文件
#define uchar unsigned char
#define uint unsigned int
#define LED 6 //PORTD6
//延时子程序
void delay_us(unsigned int time) // us级延时子程序
{
do
{
time--;
}
while (time>1);
}
void delay_ms(unsigned int time) //ms 级延时子程序
{
while(time!=0)
{
delay_us(1000);
time--;
}
}
//中断服务程序
#pragma interrupt_handler EXT_INT0_ISR:iv_INT0
void EXT_INT0_ISR (void) //INT0 中断
{
uchar temp;
temp=SREG;
delay_ms(20);
PORTD ^= (1<<LED); //取反,LED
SREG=temp;
}
void main(void) //主程序
{
SREG=0x00; //禁止总中断
DDRD=0x40; //PORTD,LED 输出
PORTD &=~(1<<LED); //低电平点亮LED
MCUCR=0x83; //INT0 上升沿
GICR =0x40; //INT0 中断使能
SREG=0x80; //总中断允许
//
while(1) //循环等待中断
{
}
} |