Доброго времени суток котовци!
Помогите начинающему товарищу разобраться с АЦП. Прошивку кое-как написал, но видимо не то
Задача.
1. При включении контроллера необходимо произвести замер напряжения, результат записать в ячейку памяти.
2. На один из выходов порта подать 1.
3. Сделать задержку и произвести ещё один замер напряжения.
4. Сравнить первое значение со вторым и исходя из этого подать некие сигналы на выход.
5. Ждать пока напряжение пропадёт.
6. При появлении напряжения вернуться к пункту 1.
собственно код приведен ниже
Задача.
1. При включении контроллера необходимо произвести замер напряжения, результат записать в ячейку памяти.
2. На один из выходов порта подать 1.
3. Сделать задержку и произвести ещё один замер напряжения.
4. Сравнить первое значение со вторым и исходя из этого подать некие сигналы на выход.
5. Ждать пока напряжение пропадёт.
6. При появлении напряжения вернуться к пункту 1.
собственно код приведен ниже
Код: Выделить всё
.include "tn13def.inc"
.list
.def temp = R16 ;Определение рабочих регистров
.def temp1 = R17
.def temp2 = R18
.equ kdel = 255
.equ kdel2 = 1
; Начало програмы
.cseg
.org 0
; Настройка прерываний
RESET: ldi temp, RAMEND
out SPL, temp
;Настрйка портов В\В
ldi temp, 3 ; PB0 и PB1 out
out DDRB, temp ;
ldi temp, 0 ; Начальное состоЯние "0"
out PORTB,temp
;Инициализация Т/С0
ldi temp, 0b00000101 ;Запускаем Т0
out TCCR0B, temp ;с максимальным делителем т.ч.
;Начало оснвной прграммы
ldi temp, 0b10000101 ;Включение АЦП
out ADCSRA,temp ;и выбор делителя тактовой частоты
ldi temp, 0b00100011 ;Использовать 3й вивод АЦП
out ADMUX,temp ;и выравнивать результат по левому краю
rcall delay ;Ждем установления напряжения
rcall delay
rcall delay
rcall delay
sbi ADCSRA, 6
rcall delay2 ;ждем пока завершится измерение
in temp1, ADCH ;сохраняем результат измерения
sbi PORTB, 0 ;Сделали переполюсовку
rcall delay ;Ждем установления напряжения
rcall delay
rcall delay
rcall delay
sbi ADCSRA, 6 ;теперь можно мерить
rcall delay2 ;ждем пока завершится пребр АЦП
in temp2, ADCH ;сохраняем результат измерения 2
cp temp1, temp2 ;сравниваем результаты
brsh var1
brlo var2
var2: cbi PORTB, 0
var1: sbi PORTB, 1
;длинный цикл
vse1: rcall vse
vse: rcall vse1
;Подпрограмма задержки
delay: push temp
ldi temp, 0
out TCNT0, temp
wt1: in temp, TCNT0
cpi temp, kdel
brlo wt1
pop temp
ret
;delay2
;Подпрограмма задержки2
delay2: push temp
ldi temp, 0
out TCNT0, temp
wt2: in temp, TCNT0
cpi temp, kdel2
brlo wt2
pop temp
ret
