AVR片内AD测试高位丢失问题

2019-07-18 10:36发布

11
问题描述:proteus仿真能显示出ADCL的数据,但ADCH的却不行。问题程序:
#include <iom128v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int

adc_convert()                           //AD转换
{
uint a,b, q1,q2;                         //a用来暂存每次AD转换后的数值;b用来算10次a的总和;q1用来替代表示ADCL;q2用来替代表示ADCH
uchar i;
ADMUX=0XC0;
ADCSRA=0X87;
for(i=0;i<10;i++)
   {
    ADCSRA|=(1<<ADSC); //启动ADC开始转换
    while((ADCSRA&0X10)!=0x10);//等待ADC转换结束
    ADCSRA|=(1<<ADIF);  //1清除标志位

    q1=ADCL;
    q2=ADCH;
    a=q1+q2*256;                   //其实a、b并没有在这个测试中有用到,显示靠的是q1、q2
    b+=a;
    PORTE=q2;
    PORTD=q1;
    ADCSRA|=~(1<<ADSC);    //再次启动ADC开始转换
   }
ADCSRA&=~(1<<ADIE);      //禁止ADC中断
return(b/10);                           //返回b十次的平均值,其实并没用到
}

main()
{
DDRD=0XFF;
DDRE=0XFF;
while(1)
    {adc_convert();}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。