- •1 Постановка задачи
- •2 Формализация задачи
- •2.1 Функциональная схема цифрового фильтра
- •2.2 Исходное состояние фильтра после включения питания
- •2.3 Формализация настроек для инициализации фильтра
- •2.4 Формализация определений для рабочего цикла фильтра
- •3 Разработка и описание общего алгоритма функционирования фильтра
- •4 Обоснование построения аппаратной части фильтра
- •5 Разработка и отладка программы на языке команд мк
- •5.1 Исходные определения и ручной расчет результатов работы программы: "Цифровой фильтр (нижних частот)"
- •6 Расчет быстродействия фильтра
- •7 Анализ характеристик фильтра для заданных и реальных значений коэффициентов (нули и полюса, ачх, фчх, оценка устойчивости)
- •8 Заключение (оценка результатов проектирования)
- •9 Список использованных источников
5 Разработка и отладка программы на языке команд мк
Рабочая программа разработана на основе спроектированного алгоритма функционирования фильтра, результатов анализа и формализации.
;Программа "Цифровой фильтр (нижних частот)"
;Автор Акимов А.В.
;Дата 24 марта 2012 года
;Разностное уравнение Yn = Xn + Xn-1 + 0,9 Xn-2 + 0,9 Xn-3 + 0,4 Yn-1
;Определение символических имён операндов
B0: .EQU 90h ;линия P1.0 для вывода импульса
;запуска АЦП
PA: .EQU 7001h ;порт PА РУ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 6h ;управляющее слово для задания
;частоты переполнения T/C0
TR0: .EQU 8Ch ;управляющий бит пуска T/C0
IE: .EQU A8h ;регистр разрешения прерываний
SIE: .EQU 83h ;слово разрешения прерываний
;от T/C0 и входа INT0
B: .EQU F0h ;регистр В
K1: .EQU E6h ;первый коэффициент разностного уравнения
K2: .EQU 66h ;второй коэффициент разностного уравнения
KM: .EQU 3Ch ;коэффициент масштабирования
X: .EQU 30h ;ячейка хранения отсчёта Xn
X1: .EQU 31h ;ячейка хранения отсчёта Xn-1
X2: .EQU 32h ;ячейка хранения отсчёта Xn-2
X3: .EQU 33h ;ячейка хранения отсчёта Xn-3
Y: .EQU 40h ;ячейка хранения отсчёта Yn
Y1: .EQU 41h ;ячейка хранения отсчёта Yn-1
PR1: .EQU 50h ;ячейка хранения произведения PR1
PR2: .EQU 51h ;ячейка хранения произведения PR2
PR3: .EQU 52h ;ячейка хранения произведения PR3
.FILLCHAR 00h ;записать в пропусках
;между секциями нули
;Инициализация по сигналу RST
S0: .SECTION
.ORG 0000h
LJMP INIT ;переход к программе
;инициализации
S1: SECTION
.ORG 00A0h
INIT: MOV TMOD, #STMOD;настройка режима Т/С0
MOV TH0, #STH0 ;задание частоты дискре-
;тизации
SETB TR0 ;пуск Т/С0
MOV A, #SRU ;настройка
MOV DPTR, #RGRU ;порта PA РУ55 на ввод, порта
MOVX @DPTR, A ;PB РУ55 на вывод
MOV IE, #SIE ;разрешение прерываний
;от Т/С0 и входа INT0
STOP: SJMP STOP ;останов программы
;Формирование импульса пуска АЦП по внутреннему прерыва-
;нию от Т/С0
S2: .SECTION
.ORG 000Bh
LJMP START ;переход к программе
;формирования импульса
;пуска АЦП
S3: .SECTION
.ORG 00D0h
START:CLR B0 ;сброс бита Р1.0
SETB B0 ;установка бита Р1.0
RETI ;возврат из подпрограм-
;мы обработки прерыва-
;ния
;Вычисление выходного отсчёта по сигналу внешнего прерыва-
;ния от входа INT0, рабочий цикл фильтра
S4: .SECTION
.ORG 0003h
LJMP XYOUT ;переход к программе
;рабочего цикла фильтра
S5: .SECTION
.ORG 0100h
XYOUT:MOV DPTR, #PA ;ввод отсчёта Xn
MOVX A, @DPTR ;через порт РA РУ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
;в памяти
;программный модуль вычисления
;произведения PR1 := K1Xn-2
;Xn-2 хранится в ячейке ОЗУ с адресом X2
;PR1 записать в ячейку ОЗУ с адресом PR1
M2: MOV A, X2 ;копирование Xn-2 в аккуму-
RLC A ;лятор и анализ знака
JC M3 ;переход к программе ум-
;ножения отрицательного
;отсчёта Xn-2 на K1
RRC A ;восстановление положи-
;тельного отсчёта Xn-1
;в аккумуляторе
MOV B, #K1 ;вычисление произведе-
MUL AB ;ния K1Xn-2
MOV PR1, B ;запоминание KXn-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 в па-
;мяти
;программный модуль вычисления
;произведения PR2 := K1Xn-3
;Xn-3 хранится в ячейке ОЗУ с адресом X3
;PR2 записать в ячейку ОЗУ с адресом PR2
M4: MOV A, X3 ;копирование Xn-3 в акку-
RLC A ;мулятор и анализ знака
JC M5 ;переход к программе ум-
;ножения отрицательного
;отсчёта Xn-3 на K1
RRC A ;восстановление положи-
;тельного отсчёта Xn-3
;в аккумуляторе
MOV B, #K1 ;вычисление произведе-
MUL AB ;ния K1Xn-3
MOV PR2, B ;запоминание K2Xn-3
;в памяти
SJMP M6 ;переход к продолжению
M5: RRC A ;восстановление отрица-
;тельного отсчёта Xn-3
;в аккумуляторе
CPL A ;получение положительно-
INC A ;го отсчёта Xn-3 (смена
;знака)
MOV B, #K1 ;вычисление произведе-
MUL AB ;ния K1Xn-3 и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательно-
INC A ;го произведения K2Xn-3
;(смена знака)
MOV PR2, A ;запоминание K1Xn-3 в па-
;мяти
;программный модуль вычисления
;произведения PR3 := K2Yn-1
;Yn-1 хранится в ячейке ОЗУ с адресом Y1
;PR3 записать в ячейку ОЗУ с адресом PR3
M6: 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 ;запоминание K2Yn-1
;в памяти
SJMP M6 ;переход к продолжению
M7: RRC A ;восстановление отрица-
;тельного отсчёта Yn-1
;в аккумуляторе
CPL A ;получение положительно-
INC A ;го отсчёта Yn-1 (смена зна-
;ка)
MOV B, #K2 ;вычисление произведе-
MUL AB ;ния KYn-1 и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательно-
INC A ;го произведения K2Yn-1
;(смена знака)
MOV PR2, A ;запоминание K2Yn-1 в па-
;мяти
;программный модуль вычисления выходного
;отсчёта Yn = Xn+Xn-1+PR1+PR2+ PR3, слагаемые
;хранятся в ячейках ОЗУ, результат записать
;в ячейку ОЗУ ,организовать вывод по сигналам готовности и
;квитирования
M8: MOV A, X ;вычисление отсчёта Yn
ADD A, X1 ;и сохранение в памяти
ADD A, PR1 ;
ADD A, PR2 ;
ADD A, PR3 ;
MOV Y, A ;
MOV DPTR, #PB ;вывод Yn
MOVX @DPTR, A ;через порт
;РB РУ55
;программный модуль сдвига отсчётов
;в памяти, подготовка следующего рабочего
;цикла
MOV X3, X2 ;
MOV X2, X1 ;
MOV X1, X ;
MOV Y1, Y ;
RETI ;возврат из подпрограммы
;обслуживания прерывания
;по входу INT0
.END