return_celoe
return_ostatok
double ostatok, celoe,data1;
unsigned char otvet,mass[10],count=1, mass1;
жесть...
Это общий алгоритм. Есть еще такие варианты и нюансы: как дополнительное форматирование для разных систем счисления, целые/числа с плавающей точкой, отрицательные числа, степени, дроби и прочее.
DDRB=1; /*Предполагается, что D/C подключен к PB0 */
PORTB=0;
Резистор нафиг не нужен. Или Вы из секты тех, кто видит на источнике напряжения 2А и думает что источник их всегда вливает в потребителей?
а не должен даже компилироваться. Потому что в векторе reset должна стоять команда перехода на метку RESET:.
.def temp = r16 // Присваиваем символические имена регистрам
.def razr1 = r17
.def razr2 = r18
rjmp RESET ; Reset Handler
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
rjmp ADC_convert ; ADC Conversion Complete Handler
reti
reti
reti
RESET: // Метка Reset
ldi temp, high(RAMEND) // Инициализируем стек
out sph, temp
ldi temp, low(RAMEND)
out spl, temp
ldi temp, 0xff // Константа в temp
out DDRD, temp // Порт D на выход, сюда будем выводить данныые с АЦП
ldi temp, 0b01100000 // REFS = 01 контролирует откуда берется опорное напряжение; ADLAR = 1
out ADMUX, temp // смещение битов(право или лево); мультиплексор на ножку ADC0, биты MUX = 00000
ldi temp, 0b11011111 // ADEN = 1 разрешаем АЦП; ADSC = 1 старт конвертации; ADIF, ADIE = 11
out ADCSRA, temp // разрешают прерывание, ADPS = 111 предделитель АЦП
sei // Разрешаем глобально прерывания
Proga: // Основная программа
rjmp Proga // переход на метку Proga
ADC_convert: // Прерывание АЦП
cli // запрещаем прерывания
in razr1, ADCL // Копируем в razr1 значение младшего регистра
in razr2, ADCH // в razr2 значение старшего, читать всегда сперва младший!
out PORTD, razr2 // Выводим значение старшего в порт
Vix: // Метка выхода
ldi temp, 0b01100000
out ADMUX, temp
ldi temp, 0b11011111
out ADCSRA, temp
sei // Разрешить прерывания
reti // Выйти из прерывания