
- •Пмк дз Общие требования
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
Решение.
.include "8535def.inc"
;----------------- Инициализация вектора прерывания ----------------------
.org 0
rjmp Start ;Перепрыгиваем таблицу векторов прерываний
.org OVF0addr
rjmp OVF0addrSUB
;----------------- Глобальное запрещение прерываний ----------------------
Start:
cli
;--------------------- Установка указателя стека -------------------------
ldi r16, low(ramend)
out SPL, R16
ldi r16, high(ramend)
out SPH, R16
;-------------------- Инициализация таймера-счетчика 0 -------------------
ldi r16, $03 ;Коэффициент деления 64
out TCCR0, r16
ldi r16, 0b00000001 ;Разрешаем прерывания от переполнения TC0
out TIMSK, r16
ldi r16, $ff ;Порт А –весь на вывод
out DDRA, r16
sei ; Глобальное разрешение прерываний
;=============== Основная программа ничего не делает =====================
m1: nop
rjmp m1
;=========================================================================
;-------- Подпрограмма обработки прерываний по переполнению ТС0 ----------
OVF0addrSUB:
push r16 ;Сохраняем в стеке содержимое r16 (рабочего регистра)
ldi r16, $e6 ;Загружаем рассчитанное по программе AndyRate число
out TCNT0, r16 ;и отправляем его в счетный регистр таймера 0
sbis PINA, 3 ;Пропустить строку, если бит 3 порта А выставлен в «1»
rjmp HL_ZERO ; а если нет, то перейти на метку HL_ZERO
sbiс PINA, 3 ;Пропустить строку, если бит 3 порта А сброшен в «0»
rjmp HL_ONE ; а если нет, то перейти на метку HL_ONE
rjmp EXIT_SUB ;Идем к выходу из подпрограммы обр. прерывания
HL_ZERO: sbi PORTA,3 ;Выставить "1" на линию 3 порта А
rjmp EXIT_SUB ;Идем к выходу из подпрограммы обр. прерывания
HL_ONE: cbi PORTA,3 ;Сбросить в "0" линию 3 порта А
rjmp EXIT_SUB ;Идем к выходу из подпрограммы обр. прерывания
EXIT_SUB: pop r16 ;Извлекаем из стека содержимое r16
reti ; выход из подпрограммы обработки прерывания
ПМК ДЗ №6
Написать программу генерации прямоугольных импульсов c частотой следования 3 Гц, с вывода PORTA3, при частоте кварцевого резонатора 1 МГц. Использовать прерывание от переполнения ТС1 Для расчетов использовать программу AndyRate.exe.
Решение.
.include "8535def.inc"
;------------------ Инициализация векторов прерываний --------------------
.org 0
rjmp Start ;Перепрыгиваем таблицу векторов прерываний
.org OVF1addr
rjmp OVF1addrSUB
;----------------------- Запрет прерываний -------------------------------
Start:
cli
;---------------------- Инициализация стека и периферии ------------------
ldi R16, low(ramend) ;Установка указателя стека
out spl, R16
ldi R16, high(ramend)
out sph, R16
ldi r16, $03 ;ТС1: Коэффициент деления 64
out tccr1b, r16
ldi r16, 0b00000100 ;Разрешаем прерывания от переполнения TC1
out TIMSK, r16
ldi r16, $ff ;Порт А –весь на вывод
out DDRA, r16
sei ;Глобальное разрешение прерываний
;================== Основная программа ничего не делает ==================
m1: nop
rjmp m1
;=========================================================================
;--------------- Подпрограмма обработки прерываний от ТС1 ----------------
OVF1addrSUB:
push r16 ;Сохраняем в стеке содержимое r16 (рабочего регистра)
ldi r16, $e0 ;Загружаем рассчитанное по программе AndyRate число
out TCNT1H, r16 ; сначала старший байт
ldi r16, $a8 ;
out TCNT1L, r16 ; затем младший байт
sbis PINA, 3 ;Пропустить строку, если бит 3 порта А выставлен в «1»
rjmp HL_ZERO ; а если нет, то перейти на метку HL_ZERO
sbiс PINA, 3 ;Пропустить строку, если бит 3 порта А сброшен в «0»
rjmp HL_ONE ; а если нет, то перейти на метку HL_ONE
rjmp EXIT_SUB ;Идем к выходу из подпрограммы обр. прерывания
HL_ZERO: sbi PORTA,3 ;Выставить "1" на линию 3 порта А
rjmp EXIT_SUB ;Идем к выходу из подпрограммы обр. прерывания
HL_ONE: cbi PORTA,3 ;Сбросить в "0" линию 3 порта А
rjmp EXIT_SUB ;Идем к выходу из подпрограммы обр. прерывания
EXIT_SUB: pop r16 ;Извлекаем из стека содержимое r16
reti ; выход из подпрограммы обработки прерывания
ПМК ДЗ №7
Написать программу генерации прямоугольных импульсов c частотой следования 3 Гц, с вывода ОС1А, при частоте кварцевого резонатора 1 МГц. Использовать прерывание по совпадению ТС1. Для расчетов использовать программу AndyRate.exe.