Считаю,что тема была бы не законченной не приведя законченный код индикатора.Спасибо всем за помощь.
Не сомневаюсь,что не совсем хорошо,но я ещё только начинающий.
Код
;******************************************
;Автор: *
;Дата :10/10/2013 *
;Имя файла:indADC.asm *
;Для AVR : ATmega8A,в корпусе DIP28 *
;Тактовая частота:3.686 Мгц. *
;Исследование АЦП. Индикатор на *
;светодиодах.Прерывание .Однократный *
;режим преобразования АЦП. *
;******************************************
.include "m8Adef.inc" ;Файл определений для ATmega8A
.list ;Включение листинга
.def temp = r16 ;Временный регистр
.def leder = r19 ;Регистр индикации
.def temp1 = r20
;**** Описание макроса ********************
.macro caseADC
ldi temp1,high(@2)
cpi zL,low(@2)
cpc zH,temp1
brlo t@0
ldi leder,@1
out PORTD,leder
t@0:
.endm
;****Векторы прерываний *******************
.org $0 ;Установка текущего адреса на ноль по "RESET"
rjmp init ;Переход на начало программы
.org $00E ;Вектор прерывания АЦП
rjmp adca ;преобразование завершено ;
;****Модуль инициализации******************
init: ldi temp,low(RAMEND) ;Установка указателя стека
out SPL,temp ;на последнюю
ldi temp,high(RAMEND) ;ячейку
out SPH,temp ;ОЗУ
ldi temp,0b11111111 ;Порт PD на вывод
out DDRD,temp ;используем выводы PD0...PD7
out PORTD,temp ;Погасим светодиоды на PD0...PD7
clr temp ;Аналоговые входы порта PC
out DDRC,temp ;на выводе PC0 "сидит" канал ADC0
out PORTC,temp ;отключаем подтягивающие резисторы
;****Инициализация АЦП *********************
ldi temp,0b10001101 ;ADEN=1,ADIE=1,Fadc=Fclk/32,ADFR=0(режим однократного преобразования)
out ADCSRA,temp ;Fadc=115 кГц при Fclk=3,69 МГц
ldi temp,0b01000000 ;Выбираем канал ADC0 по выводу PC0
out ADMUX,temp ;Опорное напряжение AVCC=VCC равно напр.питания 5 вольт,ADLAR=0 (выравнивание по правому)
sei ;Разрешение прерываний
sbi ADCSRA,ADSC ;Запуск преобразования
loop: rjmp loop ;Цикл ожидания прерываний
;****Обработка прерывания от АЦП **********
adca: in zL,ADCL ;
in zH,ADCH ;
cbi ADCSRA,ADIE ;Запрет прерывания от АЦП
ldi temp1,high(128)
cpi zL,low(128)
cpc zH,temp1
brlo t0
ldi leder,0b11111110
out PORTD,leder
rjmp t1
t0: ldi leder,0b11111111
out PORTD,leder
t1:
caseADC 2,0b11111100,256
caseADC 3,0b11111000,384
caseADC 4,0b11110000,512
caseADC 5,0b11100000,640
caseADC 6,0b11000000,768
caseADC 7,0b10000000,896
caseADC 8,0b00000000,1020
sbi ADCSRA,ADIE ;Разрешение прерывания от АЦП
sbi ADCSRA,ADSC ;Пуск преобразования
reti