Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦУМ_241112.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
221.18 Кб
Скачать

L

Зацикливание (ожидание прерывания)

1:

jmp L1

Вход в подпрограмму обработки прерывания от P1.0 и запрещение маскируемых прерываний

Input:

d

Очистка флага прерывания от P1.0 и изменение срабатывания прерывания по фронту/спаду

int

bic.b #(1<<0), &P1IFG

x

Если импульсы до этого ещё не поступали, то запустить таймер А (ловля 1-го импульса)

or.b #(1<<0), &P1IES

c mp #0h, &TAR

jz L2

bis MC_2, &TACLR

j

Занести измеренную длительность по адресу в R4, (хранение [T_импульса,T_период,…]), R4=R4+2

mp L3

L 2: mov &TAR, 0(R4)

incd R4

b

Если на вход поступил импульс, то обнулить счётчик (для начала отсчёта T_импульса)

it.b #(1<<0), &P1IN

jz L3

m

Разрешение маскируемых прерываний и выход из подпрограммы обработки прерывания

ov #0h, &TAR

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

Инициализация системы тактирования

ov #09FEh, SP ; инициализация стека

b ic #OSCOFF, SR ; по умолчанию

bis.b #SELM_3, &BCSCTL2

mov #200h, R4 ; адрес [Tи,Tп, …]

b

Инициализация порта P1.1

is.b #(1<<1), &P1SEL

b

Инициализация таймера А: вход от P1.1, по фронту и спаду, синхронный, захват с разрешением прерываний по захвату; работа таймера от ACLK

ic.b #(1<<1), &P1DIR ; по умолчанию

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

2: bit.b #(1<<1), &P1IN

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

Инициализация системы тактирования

ov #09FEh, SP ; инициализация стека

b ic #XT2OFF, SR ; по умолчанию

bis.b #SELM_2, &BCSCTL2

b

Инициализация портов P1.0- P1.4

ic.b #((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)), &P1SEL ; по умолчанию

bic.b #((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)), &P1DIR ; по умолчанию

b

Разрешение прерывания от портов P1.0- P1.3 по фронту сигнала

is.b #(1<<4), &P1DIR

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

int

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

it.b #(1<<0), R4

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

mp L4

L 2: bit.b #(1<<3), R4

jz L3

bis.b #(1<<4), &P1OUT ; E=1

L

Разрешение маскируемых прерываний и выход из подпрограммы обработки прерывания

4: eint

reti

end main