 
        
        - •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
; по умолчанию
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
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_импульса,…
о
адресу в регистре 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
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
)
С использованием прерывания от порта
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
