
- •1 . Два светодиода моргают, необходимо нажать, пока горит второй светодиод. Период горения светодиодов — 0,5 сек.
- •Выход из подпрограммы обработки прерывания
- •Запрет прерываний от порта p1.2, снятие флага прерывания (не обязательно), включение led1 и led2 (happy end)
- •Выход из подпрограммы обработки прерывания
- •Блок-схемы к задаче №1
- •Блок-схема к задаче №2(а)
- •Зацикливание (ожидание прерывания)
- •Блок-схемы к задаче №2(б)
- •Зацикливание (ожидание прерывания)
- •Вход в подпрограмму обработки прерывания от таймера а, проверка на первый измеряемый импульс, в случае подтверждения запуск таймера
- •Выход из подпрограммы обработки прерывания
- •Блок-схемы к задаче №2(в)
- •Зацикливание (ожидание прерывания)
- •Блок-схемы к задаче №3
- •Блок-схемы и иллюстрация операции к задаче №4
- •5. Программно-аппаратный делитель частоты входного сигнала.
- •Зацикливание (ожидание прерывания)
- •Блок-схемы к задаче №5
LЗацикливание (ожидание прерывания)
1:
jmp L1
Вход в подпрограмму
обработки прерывания от P1.0
и запрещение маскируемых прерываний
Input:
d
Очистка флага прерывания
от P1.0 и изменение срабатывания прерывания
по фронту/спаду
bic.b #(1<<0), &P1IFG
x
Если импульсы до этого
ещё не поступали, то запустить таймер
А (ловля 1-го импульса)
c mp #0h, &TAR
jz L2
bis MC_2, &TACLR
j
Занести измеренную
длительность по адресу в R4, (хранение
[T_импульса,T_период,…]),
R4=R4+2
L 2: mov &TAR, 0(R4)
incd R4
b
Если на вход поступил
импульс, то обнулить счётчик (для начала
отсчёта T_импульса)
jz L3
m
Разрешение маскируемых
прерываний и выход из подпрограммы
обработки прерывания
L 3: eint
reti
end main
Блок-схемы к задаче №2(б)
в) С использованием прерывания от блока захвата таймера А (используется порт P1.1)
NAME main
PUBLIC main
#include "msp430x16x.h"
ORG 0FFFEh
DC16 main
ORG 0FFECh
DC16 Timer_A0
RSEG CODE
main:
mov #(WDTPW+WDTHOLD), &WDTCTL
m
Инициализация системы
тактирования
b ic #OSCOFF, SR ; по умолчанию
bis.b #SELM_3, &BCSCTL2
mov #200h, R4 ; адрес [Tи,Tп, …]
b
Инициализация порта P1.1
b
Инициализация таймера
А: вход от P1.1, по фронту и спаду, синхронный,
захват с разрешением прерываний по
захвату; работа таймера от ACLK
m ov #(CCIS_0+CM_3+SCS+CAP+CCIE), &TACCTL0
mov #(TASSEL_1+ID_0), &TACTL
eint ; Разрешение маскируемых прерываний
LЗацикливание (ожидание прерывания)
1:
jmp L1
TВход в подпрограмму обработки прерывания от таймера а, проверка на первый измеряемый импульс, в случае подтверждения запуск таймера
imer_A0:
cmp #0h, &TAR
jz L2
bis MC_2, &TACTL
jmp L4
L
Если на вход поступил
импульс, то обнулить счётчик; сохранить
захваченное значение T_импульса
или T_периода
по адресу в R4, R4=R4+2
jz L3
mov #0h, &TAR
L3: mov &TACCR0, 0(R4)
incd R4
L
Выход из подпрограммы обработки прерывания
4: reti
end main
Блок-схемы к задаче №2(в)
3. Создать прототип схемы из логических элементов.
З
адача
решается только с использованием
прерываний, чтобы исключить влияние
гонки сигналов на входах устройства.
NAME main
PUBLIC main
#include "msp430x16x.h"
ORG 0FFFEh
DC16 main
ORG 0FFE8h
DC16 Input
RSEG CODE
main:
mov #(WDTPW+WDTHOLD), &WDTCTL
m
Инициализация системы
тактирования
b ic #XT2OFF, SR ; по умолчанию
bis.b #SELM_2, &BCSCTL2
b
Инициализация портов
P1.0- P1.4
bic.b #((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)), &P1DIR ; по умолчанию
b
Разрешение прерывания
от портов P1.0- P1.3 по фронту сигнала
b ic.b #((1<<0)|(1<<1)|(1<<2)|(1<<3)), &P1IES ; по умолчанию
bis.b #((1<<0)|(1<<1)|(1<<2)|(1<<3)), &P1IE
eint ; разрешение маскируемых прерываний
L
Зацикливание (ожидание прерывания)
1:
jmp L1
Вход в подпрограмму
обработки прерывания и запрещение
маскируемых прерываний
I nput:
d
Переключение прерывания
фронт/спад в соотв. с сигналами на
входах, очистка флагов прерывания, вх.
сигналы запоминаются в R4
m ov.b &P1IN, &P1IES
bic.b #((1<<0)|(1<<1)|(1<<2)|(1<<3)), &P1IFG
mov.b &P1IES, R4
b
Элемент 3И-НЕ: если один
из входных сигналов = 0, то переход к L2,
иначе на выходе E=0
j
z
L2
bit.b #(1<<1), R4
jz L2
bit.b #(1<<2), R4
jz L2
L3: bic.b #(1<<4), &P1OUT ; E=0
j
Элемент 2И: сравнивается
1 от 3И-НЕ и сигнал D
L 2: bit.b #(1<<3), R4
jz L3
bis.b #(1<<4), &P1OUT ; E=1
L
Разрешение маскируемых
прерываний и выход из подпрограммы
обработки прерывания
reti
end main