- •Выполнил ст. Гр. 413
- •1.Введение.
- •2 Постановка задачи
- •3 Конфигурация мп-системы на основе мк кр1830ве31
- •4 Ad9708: цап с источником опорного напряжения
- •5 Функциональная схема цифрового фильтра
- •6 Исходное состояние фильтра после включения питания.
- •7 Формализация настроек для инициализации фильтра.
- •8 Формализация определений для рабочего цикла фильтра.
- •9 Общий алгоритм функционирования фильтра
- •10 Рабочая программа фильтра
- •11 Исходные определения и ручной расчёт результатов работы программы: “Цифровой фильтр (нижних частот)’’
- •12 Оценка быстродействия фильтра
- •Расчет ачх фильтра
- •13 Заключение
- •14 Библиографический список
- •Шило в.Л. Популярные цифровые микросхемы. – м.: Радио и связь, 1989.
- •Лебедев. О. Н. Микросхемы памяти и их применение. – м.: Радио и связь, 1990.
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
