Огромное спасибо за ответы, у меня закончился траффик, поэтому не смог сразу ответить.
Вот программа, слегка переделанная, но в сущности осталась как и была.
.include "m8535def.inc"
.org 0
rjmp RESET
.org ADCCaddr
rjmp interrupt
.MACRO output
com @1
out @0, @1
com @1
.ENDMACRO
RESET:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16, 7 ;ADC7 - вход АЦП.
out ADMUX, r16
;запуск преобразования в цикл. режиме, разрешение прерывания.
ldi r16, (1 << ADEN)|(1 << ADIE)|(1 << ADSC)|(1 << ADFR);|(1 << ADPS0)|(1 << ADPS2)
out ADCSRA, r16
ldi r16, 0xFF
out DDRB, r16;порт B на вывод
clr r16
out DDRA, r16
out PORTA, r16
sei
MAIN:
rjmp MAIN
interrupt: ;обработчик прерывания
in r20, ADCL
in r21, ADCH
andi r21, 0x03
output PORTB, r20
rcall delay
output PORTB, r21
rcall delay
reti
delay: ;подпрограмма задержки
delay1:
ldi r17, 100
delay2:
ldi r18, 100
delay3:
dec r18
brne delay3
dec r17
brne delay2
dec r19
brne delay1
ret
При запуске начинают мигать сначала все 8 диодов, а затем младшие два, с интервалом пару секунд. Что свидетельствует, о том, что из ADCL/ADCH извлекаются только единицы, а ведь должны быть нули, как я понимаю? Ведь на вход не поступает напряжение. Затем при нажатии на 7-ю кнопку, начинают мигать младшие три диода - т.е. в регистре ADCH - нули, а в ADCL - 0x07. Пожалуйста объясните мне почему так происходит?
Спасибо, за внимание к моей проблеме. Проблема в том, что я слаб в
схемотехнике. Насчет опорного напряжения: наверное, оно действительно
равно нулю, потому что я никаких ИОНов не подключал. Я пробовал использовать внутр. ИОН загрузив в ADMUX 0xC7 вместо 0x07, но ничего не изменилось.
Буду признателен если объясните мне как правильно нужно измерять напряжение, - как подключить внешний ИОН (и где его брать :) ) или можно обойтись внутр. ИОНом? И как правильно подавать напряжение на вход АЦП, что для этого нужно, подойдут ли для этого кнопки?
В понедельник мне нужно уже продемонстрировать работающую программу преподу. :( Заранее, спасибо.