
- •1 . Два светодиода моргают, необходимо нажать, пока горит второй светодиод. Период горения светодиодов — 0,5 сек.
- •Выход из подпрограммы обработки прерывания
- •Запрет прерываний от порта p1.2, снятие флага прерывания (не обязательно), включение led1 и led2 (happy end)
- •Выход из подпрограммы обработки прерывания
- •Блок-схемы к задаче №1
- •Блок-схема к задаче №2(а)
- •Зацикливание (ожидание прерывания)
- •Блок-схемы к задаче №2(б)
- •Зацикливание (ожидание прерывания)
- •Вход в подпрограмму обработки прерывания от таймера а, проверка на первый измеряемый импульс, в случае подтверждения запуск таймера
- •Выход из подпрограммы обработки прерывания
- •Блок-схемы к задаче №2(в)
- •Зацикливание (ожидание прерывания)
- •Блок-схемы к задаче №3
- •Блок-схемы и иллюстрация операции к задаче №4
- •5. Программно-аппаратный делитель частоты входного сигнала.
- •Зацикливание (ожидание прерывания)
- •Блок-схемы к задаче №5
1 . Два светодиода моргают, необходимо нажать, пока горит второй светодиод. Период горения светодиодов — 0,5 сек.
NAME main
PUBLIC main
#include "msp430x16x.h"
ORG 0FFFEh
DC16 main
ORG 0FFEAh
DC16 Timer_A
ORG 0FFE8h
DC16 Button
RSEG CODE
main:
mov #(WDTPW+WDTHOLD), &WDTCTL
m
Инициализация системы
тактирования
b
ic
#OSCOFF,
SR
; по умолчанию
b
Инициализация портов
P1.0- P1.2
b ic.b #((1<<0)|(1<<1)|(1<<2)), &P1SEL ; по умолчанию
b
Инициализация таймера
А: тактирование от ACLK, /1, разрешение
прерываний от таймера, его запуск в
непрерывном режиме
;
по умолчанию
mov #3FFFh, &TACCR0 ; Счёт таймера до 0,5 сек. (32768/2-1)
mov #(TASSEL_1+ID_0+TAIE+MC_2), &TACTL
bis.b #(1<<0), &P1OUT ; включение LED1
bis.b #(1<<2), &P1IES ; прерывания от P1.2 по спаду
eint ; Разрешение маскируемых прерываний
L
Зацикливание (ожидание
прерывания)
jmp L1
Вход в подпрограмму
обработки прерывания от таймера А
Timer_A:
x
or.b
#((1<<0)|(1<<1)), &P1OUT
b
Смена очерёдности горения
LED1 и LED2; если включился LED1, то переход
к L2,
иначе ожидание прерывания от P1.2
jz L2
bic.b #(1<<2), &P1IFG
bis.b #(1<<2), &P1IE
jmp L3
L2: bic.b #(1<<2), &P1IE ; Запрет прерываний от P1.2, когда выключен LED2
L
Выход из подпрограммы обработки прерывания
3: reti
Вход в подпрограмму
обработки прерывания от P1.2
B
Запрет прерываний от порта p1.2, снятие флага прерывания (не обязательно), включение led1 и led2 (happy end)
utton:
bic.b #(1<<2), &P1IE
bic.b #(1<<2), &P1IFG
bis.b #((1<<0)|(1<<1)), &P1OUT
rВыход из подпрограммы обработки прерывания
eti
end main
Блок-схемы к задаче №1
2. Определить параметры импульсной последовательности: длительность импульсов, их период следования.
П
о
адресу в регистре R4 заносится массив:
T_импульса,T_период,T_импульса,…
а) Программный опрос
NAME main
PUBLIC main
#include "msp430x16x.h"
ORG 0FFFEh
DC16 main
RSEG CODE
main:
m
Инициализация системы
тактирования
b ic #OSCOFF, SR ; по умолчанию
bis.b #SELM_3, &BCSCTL2
mov #200h, R4 ; адрес [Tи,Tп, …]
b
Инициализация порта P1.0
bic.b #(1<<0), &P1DIR ; по умолчанию
m
Инициализация таймера
А: тактирование от ACLK, /1
L
Если на вход поступил
первый сигнал, то обнуление и запуск
таймера А
jz L1
mov #0h, &TAR ; по умолчанию
bis MC_2, &TACTL
L
Если на входе исчез сигнал,
то занести измеренную длительность
T_импульса
по адресу в R4, R4=R4+2
jnz L2
mov &TAR, 0(R4)
i
ncd
R4
L
Если на вход поступил
сигнал, то занести измеренную длительность
T_периода
по адресу в R4 и обнулить счётчик таймера
А, R4=R4+2
jz L3
mov &TAR, 0(R4)
mov #0h, &TAR
incd R4
jmp L2 ; Организация цикла программного опроса состояния сигнала на P1.0
end main
Блок-схема к задаче №2(а)
б
)
С использованием прерывания от порта
P1.0
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 #OSCOFF, SR ; по умолчанию
b
R4
хранит адрес начала создаваемого
массива [T_импульса,T_период,…];
инициализация таймера А
m ov #200h, R4
mov #(TASSEL_1+ID_0), &TACTL
b
Инициализация порта P1.0
b
Разрешение прерываний
от порта P1.0 по фронту сигнала, разрешение
маскируемых прерываний
bic.b #(1<<0), &P1IES ; по умолчанию
bis.b #(1<<0), &P1IE
eint