Почему вы так сложно выводите текст?
Есть отличная отладочная (а если нет требований к быстродействию и памяти то и в конечном устройстве прокатит) штука, называется sprintf.
И вообще у вас много лишних усложнений.
CVAVR 2.04.4a
в свойствах С Compiler выставляете напротив (s)printf: "int, width"
Код:
#include <mega32.h>
#include <delay.h>
#include <STRING.h>
#include <stdio.h>
#include <stdlib.h>
#asm
.equ __lcd_port=0x16 ;PORTB
#endasm
#include <lcd.h>
#define ADC_VREF_TYPE 0x40
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
char buf[40]; // Текстовый буфер для вывода
void main(void)
{
PORTA=0x00; DDRA=0x00;
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
#asm("sei")
// LCD module initialization
lcd_init(16);
lcd_clear();
while(1)
{
lcd_gotoxy(0, 0);
sprintf(buf, "ADC(A0)=%3u ", read_adc(0));
lcd_puts(buf);
delay_ms(100);
}
}