может кто занимался подобным?
Ниже написанная мной прога на asm,может чтов схеме куда опорное напряжение подключать то?
- Код: Выделить всё
.INCLUDE "m16def.inc"
.def temp= r16 ;Регистр для хронения временной информации
.def DataL= r17 ;Данные АЦП младшие 8 разрядов
.def DataH= r18 ;Данные АЦП старшие 2 разряда
.org $0000
rjmp RESET ;Вектор сброса RESET на него переходит микроконтроллер при подаче пиания или сбросе
.org $0001
rjmp Read_ADC ;Внешнее прерывание INT0 в данном случае используется лдя запуска АЦП
.org $0012
rjmp Taime_OUT ;Вектор прерывания переполнения таймера Т0
.org $000E
rjmp ADC_Complit ;Вектор прерывания преобразования АЦП завершено
;Инициализация устройств
;Инициализация стека
.org $0029 ;Ячейка с которой начнется запись программы
RESET: ;Инициализация стека
ldi temp,low(RAMEND)
out spl,temp
ldi temp,high(RAMEND)
out sph,temp
;Инициализация внешнего прерывания INT0 по спаду фронта сигнала
ldi temp,(1<<ISC00)+(1<<ISC01)
out MCUCR,temp
ldi temp,(1<<INT0)
out GICR,temp ;Разрешение внешнего прерывания INT0
;Инициялизация порта Д
ldi temp,(1<<PD6)
out DDRD,temp ;Ноги 12 работают как выходы
;Инициализациа порта Б
ldi temp,(1<<PB0)
out DDRB,temp ;Нога 14 работает как выход
out PortB,temp ;Зажечь индикатор работы микроконтроллера
;Инициализация АЦП
;Разрешение АЦП,разрешение прерывания АЦП и настройка частоты преобразований на 62.5 кГц при кварце 4МГц
ldi temp,(1<<REFS0)+(0<<REFS1)
out ADMUX,temp ;Выбор опорногонапряжения питания и по умолчанию 23 ноги как входа канала АЦП
;out SFIOR,temp
;Инициализация таймера Т0
ldi temp,(1<<TOIE0)
out TIMSK,temp ;Разрешение прерывания по перполнению таймера Т0
sei ;Общее разрешение прерываний
;Главный цикл прогрвммы
Main: nop
rjmp Main
;Метка прерывания INT0
Read_ADC: ldi temp,(1<<ADEN)+(1<<ADSC)+(1<<ADIE)+(1<<ADPS2)+(1<<ADPS0)
out ADCSRA,temp
;Зануск прерывания АЦП и настройка частоты преобразований на 62.5 кГц при кварце 4МГц
reti ;Выход из обработки прерывания
;Метка прерывания по переполнению таймера Т0
Taime_OUT: cbi PortD,PD6 ;Погасить светодиод на 12 ноге
reti
;Метка прерывания завершения преобразования АЦП
ADC_Complit: tst r0 ;Проверка регистра r0 на нулевое значение
breq pervoe ;Перейти на метку pervoe если r0=0
sbi PortD,PD6 ;Зажеч светодиод на 12 ноге
ldi temp,(1<<CS00)+(0<<CS01)+(1<<CS02) ;Запустить таймер Т0 с прутделителем на 1024
out TCCR0,temp
ldi temp,(1<<EEMWE)+(1<<EEWE)
out EECR,temp
EEpropm_writeL: sbic EECR,EEWE
rjmp EEpropm_writeL ;Ждать прка предыдущая запись EEPROM не завершиться
inc r19 ;Увеличить адрес ячейки EEPROM в которую будет записанно значение АЦП
out EEARL,r19 ;Задать адрес ячейки EEPROM в которую будет записанно значение АЦП
in DataL,ADCL ;Прочитать значение АЦП младшие разряды
out EEDR,DataL ;Записать значкние АЦП в регистр данных EEPROM
sbi EECR,EEMWE ;Установить флаг занятости EEPROM
sbi EECR,EEWE ;Записать в EEPROM
EEpropm_writeH: sbic EECR,EEWE
rjmp EEpropm_writeH ;Ждать прка предыдущая запись EEPROM не завершиться
inc r19 ;Увеличить адрес ячейки EEPROM в которую будет записанно значение АЦП
out EEARL,r19 ;Задать адрес ячейки EEPROM в которую будет записанно значение АЦП
in DataH,ADCH ;Прочитать значение АЦП младшие разряды
out EEDR,DataH ;Записать значкние АЦП в регистр данных EEPROM
sbi EECR,EEMWE ;Установить флаг занятости EEPROM
sbi EECR,EEWE ;Записать в EEPROM
pervoe: ldi temp,1
mov r0,temp
sbi EECR,EEMWE
reti