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

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).