{
ADCSR = 0x00; //ADC无效
ADMUX = admuxx; //选择ADC通道7
/*--REFS1---REFS0---ADLAR---0--------------参考电源选择------对齐方式--------*/
/*--0000-- 0001-- 0010-- 0011-- 0100-- 0101-- 0110-- 0111-- 1110--- --1111---*/
/*--通道0--通道1--通道2--通道3--通道4--通道5--通道6-通道7--1.23V(VBG)-0V(GND)*/
ACSR = 0x80; //模拟比较器控制和状态寄存器 ACSR
//ACD置1,使模拟比较器禁用
/*--ACD--ACBG--ACO--ACI---ACIE---ACIC---ACIS1---ACIS0------------------------*/
/*-模拟比较起禁用--模拟比较器的能隙基准源--模拟比较起输出--模拟比较器中断标志*/
/*-模拟比较器中断使能--模拟比较器输入捕捉使能--模拟比较器中断模式选择-------- */
ADCSR = 0x8B;//模拟比较起控制和状态寄存器
/*-----------ADEN---ADSC---ADFR---ADIF---ADIE---ADPS2---ADPS1---ADPS0--------*/
//使能模数转换 ADC开始转换 ADC连续转换 ADC中断使能 128分频
}
void adc_isr ( void )
UcAdcData = ADCH; //读ADC转换结果
AdcConCom = 1; //置ADC转换完成标志
}
{
UCSRB = 0x00; //关串口
UCSRA = 0x02; //倍速模式 M16中文P151
UCSRC = BIT(URSEL) | 0x06; //写UCSRC寄存器,设定8个bit
UBRR = 0x000c; //设定串口波特率为9600
UCSRB = 0x98; //开串口
}
void UartRecvData(void) //串口中断处理函数 即是PC向AVR发送启动信号
{
uchar temp;
temp = UDR;
ADMUX |= 0x07;
ADCSR |= 0x40; //开启一次ADC转换
}
{
while(!(UCSRA&0x20)); //判断数据寄存器是否为空
UDR = UcAdcData;
}
{
CLI ( ); //关全部中断
Uart0Init ( ) ;
AdcInit ( ) ;
SEI ( ) ; //开全中断
}
while ( 1 )
{
if ( AdcConCom ) //AD完成标志 便开始处理数据
{
AdcConCom = 0; //清ADC转换完成标志
UartTransmitData ( ) ; //发送转换结果
}
}