如果先进入外部中断0 能正常显示AD0通道采集的电压值 再进入外部中断1 也可以正常显示AD1通道采集的AD值 但这时再进入外部中断0 显示的却是AD1通道的值
还有 如果先进入外部中断1就只能显示AD1通道的值 再进入外部中断0还是显示AD1的值
#include <iom128v.h> //AVR M128 8M内部晶振
#include <macros.h>
float temp;
#pragma interrupt_handler int0_isr:2
void int0_isr(void) //外部中断0
{
ADCSRA=0x00;
ADMUX|=0x00; //选择AD0通道
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADSC);
while(!(ADCSRA&(1<<ADIF)));
ADCSRA|=~(1<<ADIF);
}
#pragma interrupt_handler int1_isr:3
void int1_isr(void) //外部中断1
{
ADCSRA=0x00;
ADMUX|=0x01; //选择AD1通道
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADSC);
while(!(ADCSRA&(1<<ADIF)));
ADCSRA|=~(1<<ADIF);
}
#pragma interrupt_handler AD0:22
void AD0(void) //AD中断
{
temp=((float)(ADC))*(5.000/1024.0);
Seg7_Led_float(temp);
}
void main(void)
{
DDRD=0xff;
PORTD=0xff;
CLI();
EICRA|=0X00;
EIMSK|=(1<<INT0)|(1<<INT1);
SEI();
while(1)
{
;
} |