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

10 Рабочая программа фильтра

Рабочая программа разработана на основе спроектированного алгоритма функционирования фильтра, результатов анализа и формализации.

Распределение памяти ПЗУ (РФ55).

0000h – команда перехода к программе инициализации по сигналу RST;

0003h – команда перехода к программе вычисления и вывода

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

00A0h … 00D9h – программа инициализации;

0100h … 015Bh – программа вычисления и вывода выходного отсчёта.

Распределение памяти ОЗУ (ВЕ31).

70h – 7Fh – стек;

40h, – хранение отсчётов yn;

00h…0F,--хранение 8разрядных кодов ошибок

Текст программы «Цифровой фильтр (нижних частот)»

;Программа "Цифровой фильтр (нижних частот)"

;Автор Зюзенков А.В.

;Дата 22.04.2007

;Разностное уравнение Yn = Xn + Xn-1 + 0,86Xn-2 + 0.75Yn-1 - - 0,31Yn-2

;Определение символических имён операндов

B0: .EQU 90h ;линия P1.0 для вывода импульса

;запуска АЦП

PA: .EQU 7001h ;порт PA РУ55

PB: .EQU 7002h ;порт PB РУ55

RGRU: .EQU 7000h ;регистр управляющего слова РУ55

SRU: .EQU 02h ;управляющее слово для настройки

;портов РУ55

TMOD: .EQU 89h ;регистр управления режимами

;таймеров-счётчиков

STMOD: .EQU 02h ;управляющее слово для настройки

;таймера-счётчика

TH0: .EQU 8Ch ;старший байт Т/С0

STH0: .EQU 9Ch ;управляющее слово для задания

;частоты переполнения T/C0

TR0: .EQU 8Ch ;управляющий бит пуска T/C0

IE: .EQU A8h ;регистр разрешения прерываний

SIE: .EQU 83h ;слово разрешения прерываний

;от T/C0 и входа INT0

B: .EQU F0h ;регистр В

K1: .EQU 80h ;первый коэффициент разностного уравнения

K2: .EQU 8Eh ;второй коэффициент разностного уравнения

K3: .EQU 01h ;третий коэффициент разностного уравнения

KM: .EQU 120h ;коэффициент масштабирования

X: .EQU 30h ;ячейка хранения отсчёта Xn

X1: .EQU 31h ;ячейка хранения отсчёта Xn-1

X2: .EQU 32h ;ячейка хранения отсчёта Xn-2

Y1: .EQU 41h ;ячейка хранения отсчёта Yn-1

Y2: .EQU 42h ;ячейка хранения отсчёта Yn-2

PR1: .EQU 50h ;ячейка хранения произведения PR1n

PR2: .EQU 51h ;ячейка хранения произведения PR2n

PR3: .EQU 52h ;ячейка хранения произведения PR3n

;Инициализация по сигналу RST

.ORG 0000h

LJMP INIT ;переход к программе

;инициализации

INIT: .ORG 00A0h

MOV TMOD, #STMOD ;настройка режима Т/С0

MOV TH0, #STH0 ;задание частоты дискре-

;тизации

SETB TR0 ;пуск Т/С0

MOV A, #SRU ;настройка порта PA РУ55

MOV DPTR, #RGRU ;на ввод, порта PB РУ55 -

MOVX @DPTR, A ;на вывод

MOV IE, #SIE ;разрешение прерываний

;от Т/С0 и входа INT0

STOP: SJMP STOP ;останов программы

;Формирование импульса пуска АЦП по внутреннему прерыва-

;нию от Т/С0

.ORG 000Bh

LJMP START ;переход к программе

;формирования импульса

;пуска АЦП

.ORG 00D0h

START: CLR B0 ;сброс бита Р1.0

SETB B0 ;установка бита Р1.0

RETI ;возврат из подпрограм-

;мы обработки прерыва-

;ния

;Вычисление выходного отсчёта по сигналу внешнего прерыва-

;ния от входа INT0, рабочий цикл фильтра

.ORG 0003h

LJMP XYOUT ;переход к программе

;рабочего цикла фильтра

.ORG 0100h

XYOUT: MOV DPTR, #PA ;ввод отсчёта Xn из АЦП

MOVX A, @DPTR ;через порт РА РУ55

;программный модуль масштабирования:

;вычисление произведения Xn := KмXn

;входной отсчёт - в аккумуляторе, масштаби-

;рованный отсчёт записать в ячейку ОЗУ

RLC A ;анализ знака Xn

JC M1 ;переход к программе ум-

;ножения отрицательного

;отсчёта Xn на Kм

RRC A ;восстановление положи-

;тельного отсчёта Xn

;в аккумуляторе

MOV B, #KM ;вычисление произведе-

MUL AB ;ния KмXn

MOV X, B ;запоминание масштаби-

;рованного отсчёта Xn

;в памяти

SJMP M2 ;переход к продолжению

M1: RRC A ;восстановление отрица-

;тельного отсчёта Xn

;в аккумуляторе

CPL A ;получение положительно-

INC A ;го отсчёта Xn (смена зна-

;ка)

MOV B, #KM ;вычисление произведе-

MUL AB ;ния KмXn и пересылка

MOV A, B ;в аккумулятор

CPL A ;олучение отрицательно-

INC A ;го произведения KмXn

;(смена знака)

MOV X, A ;запоминание масштаби-

;рованного отсчёта Xn

;в памяти

;программный модуль вычисления

;произведения PR1n := K1Xn-2

;Xn-2 хранится в ячейке ОЗУ с адресом X

;PR1n записать в ячейку ОЗУ с адресом PR1

M2: MOV A, X ;копирование Xn-2 в аккуму-

RLC A ;лятор и анализ знака

JC M3 ;переход к программе ум-

;ножения отрицательного

;отсчёта Xn-2 на K

RRC A ;восстановление положи-

;тельного отсчёта Xn-2

;в аккумуляторе

MOV B, #K1 ;вычисление произведе-

MUL AB ;ния K1Xn-2

MOV PR1, B ;запоминание K1 Xn-2

;в памяти

SJMP M4 ;переход к продолжению

M3: RRC A ;восстановление отрица-

;тельного отсчёта Xn-2

;в аккумуляторе

CPL A ;получение положительно-

INC A ;го отсчёта Xn-2 (смена зна-

;ка)

MOV B, #K1 ;вычисление произведе-

MUL AB ;ния K1Xn-2 и пересылка

MOV A, B ;в аккумулятор

CPL A ;получение отрицательно-

INC A ;го произведения K1Xn-2

;(смена знака)

MOV PR1, A ;запоминание K1Xn-2 в па-

;мяти

;программный модуль вычисления

;произведения PR2n:= K2Yn-1

; Yn-1 хранится в ячейке ОЗУ с адресом Y1

;PR2n записать в ячейку ОЗУ с адресом PR2

M4: MOV A, Y1 ;копирование Yn-1 в аккуму-

RLC A ;лятор и анализ знака

JC M5 ;переход к программе ум-

;ножения отрицательного

;отсчёта Yn-1 на K2

RRC A ;восстановление положи-

;тельного отсчёта Yn-1

;в аккумуляторе

MOV B, #K2 ;вычисление произведе-

MUL AB ;ния K2Yn-1

MOV PR2, B ;запоминание K2 Yn-1

;в памяти

SJMP M6 ;переход к продолжению

M5: RRC A ;восстановление отрица-

;тельного отсчёта Yn-1

;в аккумуляторе

CPL A ;получение положительно-

INC A ;го отсчёта Yn-1 (смена зна-

;ка)

MOV B, #K2 ;вычисление произведе-

MUL AB ;ния K2Yn-1 и пересылка

MOV A, B ;в аккумулятор

CPL A ;получение отрицательно-

INC A ;го произведения K2Yn-1

;(смена знака)

MOV PR2, A ;запоминание K2Yn-1 в па-

;мяти

;программный модуль вычисления

;произведения PR3n := K3Yn-2

;Yn-2 хранится в ячейке ОЗУ с адресом Y2

;PR3n записать в ячейку ОЗУ с адресом PR3

M6: MOV A, Y2 ;копирование Yn-2 в акку-

RLC A ;мулятор и анализ знака

JC M7 ;переход к программе ум-

;ножения отрицательного

;отсчёта Yn-2 на K3

RRC A ;восстановление положи-

;тельного отсчёта Yn-2

;в аккумуляторе

MOV B, #K3 ;вычисление произведе-

MUL AB ;ния K3Yn-2

MOV PR3, B ;запоминание K3Yn-2

;в памяти

SJMP M8 ;переход к продолжению

M7: RRC A ;восстановление отрица-

;тельного отсчёта Yn-2

;в аккумуляторе

CPL A ;получение положительно-

INC A ;го отсчёта Yn-2 (смена

;знака)

MOV B, #K3 ;вычисление произведе-

MUL AB ;ния K3Yn-2 и пересылка

MOV A, B ;в аккумулятор

CPL A ;получение отрицате3льно-

INC A ;го произведения KYn-2

;(смена знака)

MOV PR3, A ;запоминание K3Yn-2 в па-

;мяти

;программный модуль вычисления выходного

;отсчёта Yn=Xn+Xn-1+PR1n+PR2n–PR3n, слагаемые

;хранятся в ячейках ОЗУ, результат записать

;в ячейку ОЗУ и вывести на ЦАП

M8: MOV A, PR1 ;вычисление отсчёта Yn

ADD A, PR2 ;и сохранение в памяти

CLR C ;

SUBB A, PR3 ;

RLC A ;умножение результата на 2

MOV Y, A ;

MOV DPTR, #PB ;вывод смещённого кода

MOVX @DPTR, A ;Yn на ЦАП через порт

;РВ РУ55

;программный модуль сдвига отсчётов

;в памяти, подготовка следующего рабочего

;цикла

MOV X2, X1 ;

MOV X1, X ;

MOV Y2, Y1 ;

MOV Y1, Y ;

RETI ;возврат из подпрограммы

;обслуживания прерыва-

;по входу INT0

.END