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

.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

  1. ПМК ДЗ №9

Написать программу выдачи байта, полученного по UART, в порт С. Чтение организовывать через прерывания по приему байта. Частота кварцевого резонатора – 8 МГц. Скорость работы UART – 9600 бит/с. Для определения числа, записываемого в UBRR, использовать программу AvrCalc.exe или таблицу из DataSheet.