Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦПОС - Методические указания к курсовому проект...doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
961 Кб
Скачать
☆

Inport .Set 50h ; параллельный порт, используемый для ввода

; отсчетов сигнала

.data

; данные для фильтра

INAD .word 0

OUTAD .word 0 ; выходной отсчет

MM .word 32768*900/1000 ; масштабный множитель на входе 0,9

.sect "Vectors"

* Таблица векторов прерываний

B START

B BEGIN ; INT1 внешние прерывания

B BEGIN ; INT2

B BEGIN ; INT3

B BEGIN ; TINT прерывание по таймеру

.sect "Init_main"

* Инициализация процессора и основная программа

START:

* установка режимов работы

SETC INTM ; запрет прерываний на время установки режимов работы

CLRC OVM ; режим переполнения

SPM 1 ; режим сдвига значений при передаче (PREG) -> АЛУ

SETC SXM ; режим расширения знака

LDP #0 ; установка разрешения необходимых прерываний

SPLK #0Fh,IMR

CLRC INTM ; разрешение прерываний

LOOP:

NOP ; основная программа – бесконечная петля ожидания

; прихода запроса на прерывание

B LOOP

* подпрограмма прерывания, которая состоит из трёх основных частей

.sect "Vvod"

* прием очередного отсчета

BEGIN:

LDP #0

SPLK #(N-2),BRCR ; установка к-ва повторений блока команд

LDP #INAD

In inad,inport ; приём отсчета через входной порт

* умножение отсчета на масштабный множитель

LT INAD

MPY MM

LDP #BUFFER2 ;

SPH BUFFER2 ; запись отсчета в буфер

*при значении множителя ММ=1 необходимо убрать умножение на него;

* для этого вместо последних 4-х команд вставить команды

* LACC INAD

* LDP #BUFFER2

* SACL BUFFER2

.sect "Filter"

* программа реализации фильтра

LAR AR2,#(BUFFER2+N-1) ; загрузка начального (для вычислений)

; адреса отсчетов в регистр AR2

LAR AR1,#(BUFFER1+N-1) ; загрузка начального адреса

; коэффициентов в AR1

MAR *,AR1 ; установка текущего ARn

ZAP ; (PREG) = (ACC) = 0

RPTB B_END-1 ; задание блока команд для повторения

LT *-,AR2 ; к- т B -> регистр T, начиная с B(n-1)

MPYA *- ; B*X -> PREG, предыдущее (PREG) добавляется к (ACC)

DMOV *,AR1 ; сдвиг отсчета Х в буфере, необходимый для

; вычисления следующего выходного значения фильтра Y

B_END:

* перемножение и добавление в ACC последнего

* произведения B*X без сдвига X

LT *,AR2

MPYA *

APAC

LDP #OUTAD

SACH OUTAD ; сохранение полученного выходного отсчета

.sect "Vivod"

; Вывод выходного отсчета фильтра

OUT OUTAD,OUTPORT

CLRC INTM ; разрешение прерывания для приема следующего

; отсчета

RET

* резервирование памяти для хранения входных отсчетов

.sect "BUFFER2"

BUFFER2 .space N*16

* секция данных с к-тами фильтра, начиная с B0

.sect "BUFFER1"

BUFFER1

.word -(32768*439/10000) ; В0 = - 0,0439

.word -(32768*359/10000) ; B1 = - 0,0359

.word (32768*506/10000) ; B2 = 0,0506

.word 32768*304/10000 ; B3 = 0,0304

.word -(32768*363/10000) ; B4 = - 0,0363

.word -(32768*965/10000) ; B5 = - 0,0965

.word 32768*528/10000 ; B6 = 0,0528

.word (32768*3092/10000) ; B7 = 0,3092

.word 32768*4535/10000 ; B8 = 0,4535

.word 32768*3092/10000

.word 32768*528/10000

.word -(32768*965/10000)

.word -(32768*363/10000)

.word 32768*304/10000

.word 32768*506/10000

.word -(32768*359/10000)

.word -(32768*439/10000)

.end