Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ADC不与ATMEGA8一起工作_C_Embedded_Avr - Fatal编程技术网

ADC不与ATMEGA8一起工作

ADC不与ATMEGA8一起工作,c,embedded,avr,C,Embedded,Avr,我试图在ATMEGA8上执行以下代码,但ADC似乎无法工作 #include <avr/io.h> #include "LCD.h" int main() { int val=0; ADCSRA=0x87;//ADc enabled and prescaler set to fosc/128 ADMUX= 0xC0;//REFS0 and REFS1 set using internal 2.5 volts as Vref DDRC=0x

我试图在ATMEGA8上执行以下代码,但ADC似乎无法工作

#include <avr/io.h>
#include "LCD.h"

int main()
{
    int val=0;
    ADCSRA=0x87;//ADc enabled and prescaler set to fosc/128
    ADMUX= 0xC0;//REFS0 and REFS1 set using internal 2.5 volts as Vref      
    DDRC=0x00;// as input for the adc
    PORTC=0x00;
    DDRB=0xff;

    while (1)
    {
        ADCSRA |=(1<<ADSC);
        while(!(ADCSRA&(1<<ADIF)));
        lcd_string("Done Conversion");
        val=ADCL;
        PORTB=ADCL;
        ADCSRA |=(1<<ADIF);//(reseting ADIF to 1)
        lcd_print(2,1,val,3);
    }
    return 0;
}
#包括
#包括“LCD.h”
int main()
{
int-val=0;
ADCSRA=0x87;//启用ADc并将预分频器设置为fosc/128
ADMUX=0xC0;//使用内部2.5伏作为Vref设置REFS0和REFS1
DDRC=0x00;//作为adc的输入
端口C=0x00;
DDRB=0xff;
而(1)
{

ADCSRA |=(1你还没有读过ADCH。数据表上说

读取ADCL时,ADC数据寄存器在ADCH被读取之前不会更新 因此,如果结果被左调整且不超过 需要8位精度,读取ADCH就足够了。否则, 必须先读取ADCL,然后读取ADCH

顺便说一句,不建议对ADCSRA进行读修改写。要清除位4–ADIF(ADC中断标志),您可以尝试

ADCSRA = 0x97;              // rewrite config and clear ADIF
这是您的原始配置,ADIF位设置为清除该标志。或者,您可以测试位6 ADSC,该位保持高位,直到转换完成,无需执行任何清除操作。由于您尚未启用ADC中断,因此无需清除ADIF标志

while (ADCSRA & (1<<ADSC)); // wait for conversion to complete
while(ADCSRA&(1)“不工作”是什么意思?请准确。
ADCSRA = 0x97;              // rewrite config and clear ADIF
while (ADCSRA & (1<<ADSC)); // wait for conversion to complete