- •Пмк дз Общие требования
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
Решение.
.include "8535def.inc"
;------------------- Инициализация векторов прерываний -------------------
.org 0
rjmp Start ;Перепрыгиваем таблицу векторов прерываний
.org OC1Aaddr
rjmp OC1AaddrrSUB
;------------------------- Запрет прерываний -----------------------------
Start:
cli
;--------------------- Установка указателя стека -------------------------
ldi R16, low(ramend)
out spl, R16
ldi R16, high(ramend)
out sph, R16
;------------------- Инициализация таймера-счетчика 1 --------------------
ldi r16, 0b01000000 ;Переключение вывода ОС1А при совпадении
out TCCR1A, r16
ldi r16, 0b00001011 ;Сброс при совпадении, коэф. деления 64
out TCCR1B, r16
ldi r16, 0b00010000 ;Разрешаем прерывания от совпадения А
out TIMSK, r16
;------------------- Инициализация регистра сравнения --------------------
ldi r16, $14 ;Запись старшего байта в рег. сравнения
out OCR1AH,r16
ldi r16, $58 ;Запись младшего байта в рег. сравнения
out OCR1AL,r16
;-------------------------- Инициализация порта --------------------------
ldi r16, 0b00100000 ;Требуемую линию порта D - на вывод
out DDRD, r16
;------------------------- Разрешение прерываний -------------------------
sei
;========================= Основная программа ============================
m1: nop
rjmp m1 ;Основная программа ничего не делает
;============ Подпрограмма обработки прерываний от совпадения А ==========
OC1AaddrSUB:
nop ;Подпрограмма тоже ничего не делает!
reti
;Для канала В в подпрограмме нужно вручную сбрасывать ;содержимое таймера-счетчика
ПМК ДЗ №8
Написать программу определения длительности процесса, который запускается лог. «1» с вывода PORTD,7. Сигнал об окончании процесса приходит от внешнего устройства на вход захвата (передний фронт, подавление шумов отсутствует). Частота следования тактовых импульсов ТС1 – СК. Захваченное значение вывести в порты А и В.
Решение.
.include "8535def.inc"
;--------------- Инициализация векторов прерываний ----------------------
.org 0
rjmp Start ;Перепрыгиваем таблицу векторов прерываний
.org ICP1addr
rjmp ICP1addrSUB ;Переход на ППРГ обработки прер. по захвату
;---------------- Инициализация контроллера -----------------------------
cli ;Запрет прерываний
ldi R16, low(ramend) ;Установка указателя стека
out spl, R16
ldi R16, high(ramend)
out sph, R16
ldi r16, 0b00000000 ;ТС1: отключен от выводов, ШИМа нет
out tccr1а, r16
ldi r16, 0b01000001 ;ТС1: Шумоподавление откл., фронт, СК.
out tccr1b, r16
ldi r16, 0b00100000 ;Разрешаем прерывания от захвата ТС1
out TIMSK, r16
;--------------------- Инициализация порта -----------------------------
ldi r16, 0b10111111 ;Требуемую линию захвата – на ввод,
out DDRD, r16 ; выдачи импульса запуска – на вывод
ser r16 ;Выставляем все единицы в r16
out DDRA, r16 ;Порт А – весь на вывод
out DDRB, r16 ;Порт B – весь на вывод
rcall Initializ ;Инициализация процесса
sei ;Глобальное разрешение прерываний
;============== Основная программа ничего не делает ====================
m1: nop
rjmp m1
;===================== ПОДПРОГРАММЫ ====================================
ICP1addrSUB: ;----- Подпрограмма обработки прерываний от захвата -----
push r16 ;Сохраняем в стеке содержимое r16
rcall Initializ ;Инициализируем заново процесс
in r16, ICR1L ;Читаем младший захваченный байт
out PORTA,r16 ; и отправляем его в порт А
in r16, ICR1H ;Читаем старший захваченный байт
out PORTB,r16 ; и отправляем его в порт В
pop r16 ;Извлекаем из стека содержимое r16
reti
Initializ: ;----- Подпрограмма инициализации процесса ----------------
sbi PORTD,7 ;Выдаем стробирующий импульс
nop
cbi PORTD,7
clr Temp ;Обнуляем ТС1
out TCNT1H
out TCNT1L
ret
ПМК ДЗ №9
Написать программу выдачи байта, полученного по UART, в порт С. Чтение организовывать через прерывания по приему байта. Частота кварцевого резонатора – 8 МГц. Скорость работы UART – 9600 бит/с. Для определения числа, записываемого в UBRR, использовать программу AvrCalc.exe или таблицу из DataSheet.