
- •1 . Два светодиода моргают, необходимо нажать, пока горит второй светодиод. Период горения светодиодов — 0,5 сек.
- •Выход из подпрограммы обработки прерывания
- •Запрет прерываний от порта p1.2, снятие флага прерывания (не обязательно), включение led1 и led2 (happy end)
- •Выход из подпрограммы обработки прерывания
- •Блок-схемы к задаче №1
- •Блок-схема к задаче №2(а)
- •Зацикливание (ожидание прерывания)
- •Блок-схемы к задаче №2(б)
- •Зацикливание (ожидание прерывания)
- •Вход в подпрограмму обработки прерывания от таймера а, проверка на первый измеряемый импульс, в случае подтверждения запуск таймера
- •Выход из подпрограммы обработки прерывания
- •Блок-схемы к задаче №2(в)
- •Зацикливание (ожидание прерывания)
- •Блок-схемы к задаче №3
- •Блок-схемы и иллюстрация операции к задаче №4
- •5. Программно-аппаратный делитель частоты входного сигнала.
- •Зацикливание (ожидание прерывания)
- •Блок-схемы к задаче №5
Блок-схемы к задаче №3
4. Синтезировать заданную импульсную последовательность с параметрами: T1=1 мкс, T2=5 мкс, T3=7 мкс, T4=10 мкс.
И
спользуется
кварц с частотой 5 МГц, поэтому T1=5T,
T2=25T, T3=35T,
T4=50T, где T1=1/(5 МГц)=0,2
мкс.
NAME main
PUBLIC main
#include "msp430x16x.h"
ORG 0FFFEh
DC16 main
ORG 0FFEAh
DC16 Timer_A1
RSEG CODE
main:
mov #(WDTPW+WDTHOLD), &WDTCTL
mov #09FEh, SP ; инициализация стека
b
Инициализация системы
тактирования
ic
#OSCOFF, SR ;
по
умолчанию
bis.b #XTS, &BCSCTL1
b
Инициализация портов
P1.2-P1.3
bis.b #((1<<2)|(1<<3)), &P1SEL
bis.b #((1<<2)|(1<<3)), &P1DIR
m
Инициализация таймера
А: блоки 1-2 в режиме сравнения, задание
констант (пределов) счёта; разрешение
прерывания от блока 1; OUT1=0,
OUT2=1,
установка выходов OUT1
и OUT2
в режим «переключение» и «сброс/установка»
соответственно; работа таймера от ACLK,
/1, запуск в режиме «вверх»
ov
#32h, &TACCR0 ;
T4=50T=10
мкс
mov #5h, &TACCR1 ; T1=5T=1 мкс
mov #19h, &TACCR2 ; T2=25T=5 мкс
mov #CCIE, &TACCTL1
bic #OUT, &TACCTL1 ; по умолчанию
bis #OUT, &TACCTL2
bis #OUTMOD_2, &TACCTL1
bis #OUTMOD_7, &TACCTL2
mov #(TASSEL_1+ID_0+MC_1), &TACTL
eint ; Разрешение маскируемых прерываний
L
Зацикливание (ожидание
прерывания)
jmp L1
T imer_A1:
c
Подпрограмма обработки
прерывания от блока 1 таймера А: задание
момента времени формирования перепада
сигнала на P1.2
jl T1
mov #5h, &TACCR1 ; 1 мкс
reti
T1: mov #23h, &TACCR1; 7 мкс
reti
end main
Блок-схемы и иллюстрация операции к задаче №4
5. Программно-аппаратный делитель частоты входного сигнала.
Д
еление
на 3 с использованием прерывания от
порта 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 #XT2OFF, SR ; по умолчанию
bis.b #SELM_2, &BCSCTL2
mov #0h, R4 ; R4=0
b
ic.b
#((1<<0)|(1<<1)), &P1SEL
; по
умолчанию
b
Инициализация портов
P1.0-P1.1
bis.b #(1<<1), &P1DIR
bic.b #(1<<1), &P1OUT ; по умолчанию
b
Разрешение прерываний
от порта P1.0 по фронту сигнала, разрешение
маскируемых прерываний
bis.b #(1<<0), &P1IE
eint
LЗацикливание (ожидание прерывания)
1:
jmp L1
Вход в подпрограмму
обработки прерывания от P1.0
и запрещение маскируемых прерываний
Input:
d
Очистка флага прерывания
от P1.0 и изменение срабатывания прерывания
по фронту/спаду
bic.b #(1<<0), &P1IFG
xor.b #(1<<0), &P1IES
c
Если R4=0, то смена уровня
выходного сигнала (P1.1),
R4=коэффициенту деления
jnz L2
xor.b #(1<<1), &P1OUT
mov #3h, R4
L
Декрементация R4, разрешение
маскируемых прерываний, выход из
подпрограммы
eint
r
eti
end main
Блок-схемы к задаче №5