- •Содержание пояснительной записки
- •1. Постановка задачи (введение)
- •7) Расчёт быстродействия фильтра.
- •2. Формализация задачи (определение функций аппаратной части и программы и способов их реализации)
- •2.1. Функциональная схема цифрового фильтра.
- •2.2. Исходное состояние фильтра после включения питания.
- •2.3. Формализация настроек для инициализации фильтра
- •2.4. Формализация определений для рабочего цикла фильтра.
- •3. Разработка и описание общего алгоритма функционирования фильтра
- •4. Обоснование построения аппаратной части фильтра
- •5. Разработка и отладка программы на языке команд мк
- •Содержание файла программы «1010-sme.Asm».
- •Исходные определения и ручной расчет результатов работы программы: «Цифровой фильтр (вычислитель)»
- •Зададим состояние памяти для входных и выходных отсчётов максимальной амплитуды:
- •6. Составление электрической принципиальной схемы и описание функционирования фильтра
- •7. Расчет быстродействия фильтра
- •Длительность команд программы.
- •9. Заключение (оценка результатов проектирования)
- •10. Список использованных источников
5. Разработка и отладка программы на языке команд мк
Разработка программы
Рабочая программа разработана на основе спроектированного алгоритма функционирования фильтра, результатов анализа и формализации.
Таблицы данных распределения памяти ОЗУ и ПЗУ.
Таблица 5.1. Распределение памяти ПЗУ (РФ55).
0000h |
команда перехода к программе инициализации по сигналу RST |
00013h |
команда перехода к программе вычисления и вывода выходного отсчёта по сигналу на входе INT1 |
000Bh |
команда перехода к программе формирования импульса запроса данных по сигналу переполнения Т/С0 |
00A0h … 00CFh |
программа инициализации |
00D0h … 00FFh |
программа формирования импульса запроса данных |
0100h … 07FFh |
программа вычисления и вывода выходного отсчёта |
Таблица 5.2. Распределение памяти ОЗУ (ВЕ31).
70h - 7Fh |
стек |
30h |
хранение отсчетов xn |
31h |
хранение отсчетов хn-1 |
32h |
хранение отсчетов хn-2 |
33h |
хранение отсчетов yn |
34h |
хранение отсчетов yn-1 |
35h |
хранение отсчетов yn-2 |
36h |
Хранение произведения Р |
Содержание файла программы «1010-sme.Asm».
;Программа "Цифровой фильтр" (режекторный)
;Автор Коньков А.А., студент гр.0011
;Разностное уравнение Yn=Xn+Xn-2-0,0078125*Yn-2
;Определение символических имён операндов
B3: .EQU 93h ;линия P1.3 для вывода импульса запроса данных
PARU: .EQU 7001h ;порт PА РУ55
PBRU: .EQU 7002h ;порт PB РУ55
RUS: .EQU 7000h ;регистр управляющего слова РУ55
SRU: .EQU 01h ;управляющее слово для настройки
;портов РА и РВ РУ55
TMOD: .EQU 89h ;регистр управления режимами
;таймеров-счётчиков
STMOD: .EQU 02h ;управляющее слово для настройки
;таймера-счётчика
TH0: .EQU 8Ch ;старший байт Т/С0
STH0: .EQU A1h ;управляющее слово для задания
;частоты переполнения T/C0 старший байт
TR0: .EQU 8Ch ;управляющий бит пуска T/C0
IE: .EQU A8h ;регистр разрешения прерываний
SIE: .EQU 86h ;слово разрешения прерываний
;от T/C0 и входа INT1
B: .EQU F0h ;регистр В
X: .EQU 30h ;ячейка хранения отсчёта Xn
X1: .EQU 31h ;ячейка хранения отсчёта Xn-1
X2: .EQU 32h ;ячейка хранения отсчета Xn-2
Y: .EQU 33h ;ячейка хранения Yn
Y1: .EQU 34h ;ячейка хранения Yn-1
Y2: .EQU 35h ;ячейка хранения Yn-2
P: .EQU 36h ;ячейка хранения произведения Р
KM: .EQU 7Fh ;коэффициент масштабирования
K: .EQU 02h ;коэффициент 0,0078125
.FILLCHAR 00h ;записать в пропусках
;между секциями нули
;Инициализация по сигналу RST
S0: .SECTION
.ORG 0000h
LJMP INIT ;переход к программе инициализации
S1: SECTION
.ORG 00A0h
INIT: MOV TMOD,#STMOD ;настройка режима Т/С0
MOV A,#SRU ;настройка порта PA РУ55 - на ввод, а порта
MOV DPTR,#RUS ;РB РУ55– на вывод
MOVX @DPTR,A ;
MOV IE,#SIE ;разрешение прерываний от Т/С0 и входа INT0
SETB TR0 ;пуск Т/С0
STOP: SJMP STOP ;останов программы
;Формирование импульса запроса данных по внутреннему прерыванию от Т/С0
S2: .SECTION
.ORG 000Bh
LJMP START ;переход к программе формирования импульса запроса
;данных
S3: .SECTION
.ORG 00D0h
START:CLR B3 ;сброс бита Р1.3
SETB B3 ;установка бита Р1.3
RETI ;возврат из подпрограммы обслуживания прерывания от
;Т/С0
;Вычисление выходного отсчёта по сигналу внешнего прерывания
;от входа INT1, рабочий цикл фильтра
S4: .SECTION
.ORG 0013h
LJMP XYOUT ;переход к программе рабочего цикла фильтра
S5: .SECTION
.ORG 0100h
XYOUT:MOV DPTR,#PARU ;ввод отсчёта Xn через порт РA РУ55
MOVX A,@DPTR ;
;программный модуль масштабирования входного отсчета
RLC A ;перенос знака в бит С
JC M1 ;анализ знака и переход если Xn отрицательно
RRC A ;восстановление положительного Хn
MOV B,#KM ;масштабирование положительного Xn
MUL AB ;
MOV X,B ;сохранение масштабированного Км*(+Xn)
SJMP M2 ;переход к продолжению
M1: RRC A ;восстановление отрицательного Хn
CPL A ;смена знака Хn
INC A ;
MOV B,#KM ;масштабирование Хn
MUL AB ;
MOV A,B ;копирование результата в аккумулятор
CPL A ;смена знака Хn
INC A ;
MOV X,A ;сохранение масштабированного отсчета Км*(–Xn)
;программный модуль вычисления P=0,0078125*Yn-2
M2: MOV A,Y2 ;копирование Yn-2 в аккумулятор
RLC A ;перенос знака в бит С
JC M3 ;анализ знака и переход если Yn-2 отрицательно
RRC A ;восстановление положительного Yn-2
MOV B,#KM ;масштабирование Yn-2
MUL AB ;
MOV A,#K ;вычисление P
MUL AB ;
MOV P,B ;сохранение P
SJMP M4 ;переход к продолжению
M3: RRC A ;восстановление отрицательного Yn-2
CPL A ;смена знака Yn-2
INC A ;
MOV B,#KM ;масштабирование Yn-2
MUL AB ;
MOV A,#K ;вычисление P
MUL AB ;
MOV A,B ;копирование результата в аккумулятор
CPL A ;смена знака P
INC A ;
MOV P,A ;сохранение P
;программный модуль вычисления Yn и вывода его на внешнее устройство
M4: MOV A,X ;вычисление Yn
ADD A,X2 ;
CLR C ;
SUBB A,P ;
MOV Y,A ;сохранения Yn
ADD A,#80h ;согласование с ЦАП
MOV DPTR,#PBRU ;вывод Yn на внешнее устройство через порт РB РУ55
MOVX @DPTR,A ;
;программный модуль сдвига отсчетов в памяти, и масштабирования Yn подготовка ;следующего цикла
MOV X2,X1 ;
MOV X1,X ;
MOV Y2,Y1 ;
MOV Y1,Y ;
RETI ;возврат из подпрограммы обслуживания прерываний по
;входу INT1
.END
Отладка программы
Отладка программы имеет целью установление правильности или неправильности работы программы, устранение ошибок в программе, получение правильных результатов работы программы. Отладка программы состоит из двух этапов:
I этап. Устраняются ошибки в исходном тексте программы и в конструкциях языка, на котором она написана (в нашем случае – в конструкциях языка ассемблера). Для этого выполняется ассемблирование исходного текста программы с использованием специальной программы-транслятора (ассемблера X8051.exe). Программа ассемблера формирует файл листинга с расширением .lst, в котором содержится подробная информация о синтаксических и семантических ошибках (их общее количество и местонахождения в программе).
Текст программы с внесёнными исправлениями снова подвергается ассемблированию с целью получения объектного модуля программы, который необходим для выполнения второго этапа – собственно отладки программы.
II этап. Отладка с помощью программного отладчика (эмулятора EMU51.exe) позволяет выявить логические, алгоритмические, принципиальные ошибки в программе. Эмулятор способен идентично выполнять (интерпретировать) все команды МК и путём пошагового или пофрагментного исполнения программы позволяет получать результаты её выполнения вместо реального МК. Сопоставление этих результатов с ожидаемыми (полученными расчётным, аналитическим путём) позволяет установить работоспособность программы.
Для того чтобы оценить правильность работы программы, произведем ручной расчет контрольных точек, результаты которого в последствии сравним с результатом работы эмулятора. Контрольные точки возьмем такими, чтобы положительный и отрицательный результаты получались максимальными, для контроля переполнения разрядной сетки (флаг OV регистра PSW).
