Спойлер
Код: Выделить всё
.include "tn13Adef.inc"; Header files
.list; // Отоброжения листинга исполнения команды.
.cseg; работаем с програмной памятью а не озу или eeprom
.org 0; устанавливаем начальную позицию строки
rjmp START; Reset Handler
rjmp START; IRQ0 Handler
rjmp START;; PCINT0Z Handler
rjmp START; Timer0 Overflow Handler
rjmp START; EEPROM Ready Handler
rjmp START; Analog Comparator Handler
rjmp START; TIM0_COMPA CompareA Handler
rjmp START; Timer0 CompareB Handler
rjmp START; Watchdog Interrupt Handler
rjmp START; ADC Conversion Handler
START:
// команда запрещает глобальные прерывания.
CLI;
//инициализация стэка.(установка максимально размера ОЗУ);
ldi R17, RAMEND;
out SPL, R17;
//Включаем аналогово-цифровой преобразователь
SBI ADCSRA, ADEN;
//Режим работы выставляем непрерывное преобразования
SBI ADCSRA, ADATE;
//И выставляем режим работы на прерывания от переполнения таймер счетчика.
LDI R16,(1<<ADTS2)|(0<<ADTS1)|(0<<ADTS0);
out ADCSRB, R16;
//Выбираем коэфициент пределителя тактовой частоты АЦП при расчете что частота 9,6/8=1,2 Мгц; 1200/8=150; где 8 выбранный коэфициент
LDI R16,(0<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
out ADCSRA, R16;
//Выбираем напряжение питание микроконтролера, ставим питания от мк.
CBI ADMUX, REFS0;
//Выбираем ножку мк которая будет производить измерения ADC1
LDI R16, (0<<MUX1)|(1<<MUX0);
//Оставляем работу ножки МК как на вход для измерения сигнала
CBI DDRB, DDB0;
CBI PORTB, PB0;
//Запуск преобразования
SBI ADCSRA, ADSC;
//Подключаем таймер в режиме FAST PWM - шИМ сигнала с установленным верхним значением OCR0A
LDI R16, (1<<WGM01)|(1<<WGM00)|(1<<COM0A1)|(0<<COM0A0);
OUT TCCR0A,R16;
//Определяем состояение выводов OCOA - не инвертирующий шим как на выход.
SBI DDRB, DDB0;
SBI PORTB, PB0;
/*Скорость работы таймера выбираем СК/1024 - где СК - частота работы микроконтролера
в нашем случаи мы выставляем во fuces clkdiv8 что обеспечит нам частоту 9,6Мhz/8=1,2Mhz значит
скорость работы таймера будет 1,2Mhz/1024=1,17Khz что увеличивает счет значения. Чем меньше
частота тем большее время срабатывания прерывания*/
ldi R16, (1<<CS02)|(0<<CS01)|(1<<CS00)|(0<<WGM02);
out TCCR0B, R16;
//Скважность шим сигнала.
ldi R16, 0xFE;
out OCR0A, R16;
rjmp START1;
START1:
//Считываем данные с младшего регистра АЦП, и подставляем их в OCR0A для изменения скважности.
ldi R16, ADCL;
out OCR0A, R16;
rjmp START1;


