
- •Пмк дз Общие требования
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
Решение.
.include "8535def.inc"
;------------------ Инициализация векторов прерываний -------------------
.org 0
rjmp Start
.org URXCaddr
rjmp URXCaddrSUB
;------------------ Глобальный запрет прерываний -----------------------
Start:
cli
;-------------------- Установка указателя стека ------------------------
ldi r16, low(ramend)
out SPL, r16
ldi r16, high(ramend)
out SPH, r16
;----------------------- Инициализация UART ----------------------------
ldi r16, 0b10010000 ;разрешаем прерывание по окончанию приема
out UCR, r16 ; и работу приемника
ldi r16, 51 ;9600 бит/с для 8 МГц
out UBRR,r16
;----------------------- Инициализация порта ---------------------------
ldi r16, $ff ;Весь порт С – на вывод
out DDRС, r16 ;а остальные не трогаем
;---------------- Глобальное разрешение прерываний ---------------------
sei
;================ Основная программа ничего не делает ==================
m1: nop
rjmp m1
;=======================================================================
;------- Подпрограмма обработки прерываний по окончанию приема ---------
URXCaddrSUB:
push r16 ;Отправляем в стек используемый регистр
in r16, UDR ;Принятый байт читаем из приемника
out PORTC,r16 ; и отправляем в заданный порт.
pop r16 ;Извлекаем из стека используемый регистр
reti
ПМК ДЗ №10
Написать программу выдачи в UART состояния порта А, и выдачи в порт В данных, полученных по UART. Периодичность выдачи данных в UART определяется опустошением буфера передатчика, выдачи в порт В – принятием из UART очередного байта . Для определения числа, записываемого в UBRR, использовать программу AndyRate.exe или таблицу из DataSheet.
Пример выполнения задания
Частота кварцевого резонатора – 8 МГц.
Скорость работы UART – 9600 бит/с.
Передавать в UART состояние порта А, принятые из UART данные выдавать в порт В.
Решение.
.include "8535def.inc"
;------------------ Инициализация векторов прерываний ------------------
.org 0
rjmp start ;по сбросу
.org URXCaddr
rjmp URXCaddrSUB ;по принятию очередного байта
.org UDREaddr
rjmp UDREaddrSUB ; по опустошению буфера передатчика
;------------------------- Запрет прерываний ---------------------------
start:
cli ;Глобальное запрещение прерываний
;-------------------- Инициализация контроллера ------------------------
ldi r16, low(ramend) ;Инициализация стека
out SPL, r16
ldi r16, high(ramend)
out SPH, r16
ldi r16, 0b10111000 ;UART: разрешаем прерывание по опустошению буфера
out UCR, r16 ; и работу передатчика.
ldi r16, 51 ;9600 бит/с для 8 МГц
out UBRR,r16
;-------------------------- Инициализация порта ------------------------
clr r16 ;Порт А – на ввод
out DDRA,r16 ;
ser r16 ;Порт В – на вывод
out DDRB,r16 ;
;----------------------- Разрешение прерываний -------------------------
sei
in r16, PINA ;Запускаем передатчик для возникновения
out UDR, r16 ; первого прерывания
;================ Основная программа ничего не делает ==================
m1: nop
rjmp m1
;=======================================================================
;------------------ Подпрограммы обработки прерываний ------------------
URXCaddrSUB: ;----- По принятию очередного байта
push r16 ;Сохраняем в стеке содержимое r16
in r16, UDR ;Считываем принятый байт
out PORTB,r16 ; и отправляем его в порт В.
pop r16 ;Извлекаем из стека содержимое r16
reti
UDREaddrSUB: ;----- По опустошению буфера передатчика
push r16 ;Сохраняем в стеке содержимое r16
in r16, PINA ;Опрашиваем заданный порт
out UDR, r16 ; и отправляем считанное значение по UART.
pop r16 ;Извлекаем из стека содержимое r16
reti
ПМК ДЗ №11
Написать программу циклической выдачи в указанный порт побайтно массива данных, расположенного в указанной части Flash. Для подсчета количества байтов использовать указанный регистр