255 个字符。而不是 1023,无法设置参考电压

255 char. instead of 1023, Unable to set reference voltage

我在我的项目中使用 ATmega16。我想在输入 5V 时得到值=1023,在输入 = 0 时得到 0。readADC 函数读取微控制器 ADC 的特定通道。我的时钟频率是 4MHz。但是在读取输入时,我 得到 255 作为最大值而不是 1023。 了解avr编程的人可以帮忙!!!

我的代码:

#include <avr/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>

unsigned char ReadADC(unsigned char ch)
{
   ch = ch&0b00000111;
   ADMUX&=0xF8;
   ADMUX |= ch;
   ADCSRA |= (1<<ADSC);
   while(ADCSRA & (1<<ADSC);   //wait for conversion to complete
   return(ADC);
}

int main(void)
{
   SegDataDDR = 0xFF;
   SegCntrlDDR = 0xF3;
   SegCntrlPort = 0xF3;
   SegDataPort = 0x00;

ADMUX = (1<<REFS0) | (0<<REFS1);
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0);   // ADEN set to turn ADC on
// clock frequency divided by 32 for operable 125KHz frequency

while(1) 
{ 
   ADCSRA |= (1<<ADSC);    // start conversion
   unsigned char value = ReadADC(0);    // Reads the value of the ADC
}

在您的代码中,行

unsigned char value = ReadADC(0);

限制您只能使用 8 位。您需要将 value 的类型更改为更大的类型,例如 unsigned short,它可以容纳 16 位的数据。如果进行此更改,还必须将 ReadADC 的定义更改为

unsigned short ReadADC(unsigned char ch)

将无符号字符替换为unit16_t