rcall ADC_ ;В первый раз из основной программы
;отправляю на подпрограмму инициали
;зации АЦП и обработки его прерыва
;ний "насильно"
sei ;разрешаю прерывания
;и кручусь в цикле, жду прерывания от АЦП
;.........
ADC_: ;Иниц. и обработка прерываний
cli ;глобальное запрещ. прерываний
ldi VAR5, 0b11100000
out ADMUX, VAR5 ;Регистром ADMUX выбрал канал 0 для
;АЦП,левое выравнивание результата,
;внутренний источник опорного напр.
ldi VAR5, 0b10001101
out ADCSR, VAR5 ;Pегистром ADCSR выбрал тактовую
;частоту, разрешил прерывания
;(бит 3),сбросил флаг завершения
;(бит 4),запретил автозапуск (бит
;5), разрешил использовать АЦП
;(бит 7)
;дальше идет несколько десятков строк, которые к
;делу не относятся
sbi ADCSR, 6 ;напоследок запускаю АЦП
reti ;и назад, в основную программу
Получается какая-то ерунда. АЦП запущен, программа
крутится в цикле, флаги не изменяются, прерывания нет. Добавишь (или убавишь) несколько строчек,совершенно левых (даже nop пробовал)- прерывание появилось, но от этого не легче. Программа идет почему-то не в начало, где прописаны вектора прерываний, а в середину, в основной цикл. Вопроса-три: кто- нибудь сталкивался с подобной проблемой, можно ли в AVRStudio нормально проверить мою программу и что за гадость такая с векторами прерываний. Всем спасибо.


