Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПМК ДЗ 2012 примеры.doc
Скачиваний:
2
Добавлен:
17.08.2019
Размер:
202.24 Кб
Скачать
      1. Решение.

.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.

Пример выполнения задания

  1. Частота кварцевого резонатора – 8 МГц.

  2. Скорость работы UART – 9600 бит/с.

  3. Передавать в 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. Для подсчета количества байтов использовать указанный регистр