Распределение памяти ОЗУ (ВЕ31)
70h – 7Fh – стек; 30h, 31h, 32h – хранение отсчётов xn, xn-1, xn-2 ; 40h, 41h, 42h – хранение отсчётов yn, yn-1, yn-2 ; 50h, 51h – хранение отсчётов p1n, p2n.
;Программа "Цифровой фильтр (фазовое звено)"
;Автор ;Дата ;Разностное уравнение Yn = 0,81 Xn + Xn-2 - 0,81 Yn-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 ;регистр В K: .EQU CFh ;коэффициент разностного уравнения KM: .EQU 61h ;коэффициент масштабирования X: .EQU 30h ;ячейка хранения отсчёта Xn X1: .EQU 31h ;ячейка хранения отсчёта Xn-1 X2: .EQU 32h ;ячейка хранения отсчёта Xn-2 Y: .EQU 40h ;ячейка хранения отсчёта Yn Y1: .EQU 41h ;ячейка хранения отсчёта Yn-1 Y2: .EQU 42h ;ячейка хранения отсчёта Yn-2 PR1: .EQU 50h ;ячейка хранения произведения PR1n PR2: .EQU 51h ;ячейка хранения произведения PR2n
;Инициализация по сигналу RST
.ORG 0000h LJMP INIT ;переход к программе ;инициализации
.ORG 00A0h INIT: 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 := KXn ;Xn хранится в ячейке ОЗУ с адресом X ;PR1n записать в ячейку ОЗУ с адресом PR1
M2: MOV A, X ;копирование Xn в аккуму- RLC A ;лятор и анализ знака JC M3 ;переход к программе ум- ;ножения отрицательного ;отсчёта Xn на K RRC A ;восстановление положи- ;тельного отсчёта Xn ;в аккумуляторе MOV B, #K ;вычисление произведе- MUL AB ;ния KXn MOV PR1, B ;запоминание K Xn ;в памяти SJMP M4 ;переход к продолжению M3: RRC A ;восстановление отрица- ;тельного отсчёта Xn ;в аккумуляторе CPL A ;получение положительно- INC A ;го отсчёта Xn (смена зна- ;ка) MOV B, #K ;вычисление произведе- MUL AB ;ния KXn и пересылка MOV A, B ;в аккумулятор CPL A ;получение отрицательно- INC A ;го произведения KXn ;(смена знака) MOV PR1, A ;запоминание KXn в па- ;мяти
;программный модуль вычисления ;произведения PR2n := KYn-2 ;Yn-2 хранится в ячейке ОЗУ с адресом Y2 ;PR2n записать в ячейку ОЗУ с адресом PR2
M4: MOV A, Y2 ;копирование Yn-2 в акку- RLC A ;мулятор и анализ знака JC M5 ;переход к программе ум- ;ножения отрицательного ;отсчёта Yn-2 на K RRC A ;восстановление положи- ;тельного отсчёта Yn-2 ;в аккумуляторе MOV B, #K ;вычисление произведе- MUL AB ;ния KYn-2 MOV PR2, B ;запоминание KYn-2 ;в памяти
SJMP M6 ;переход к продолжению M5: RRC A ;восстановление отрица- ;тельного отсчёта Yn-2 ;в аккумуляторе CPL A ;получение положительно- INC A ;го отсчёта Yn-2 (смена ;знака) MOV B, #K ;вычисление произведе- MUL AB ;ния KYn-2 и пересылка MOV A, B ;в аккумулятор
CPL A ;получение отрицательно- INC A ;го произведения KYn-2 ;(смена знака) MOV PR2, A ;запоминание KYn-2 в па- ;мяти
;программный модуль вычисления выходного ;отсчёта Yn = PR1n + Xn-2 - PR2n, слагаемые ;хранятся в ячейках ОЗУ, результат записать ;в ячейку ОЗУ и вывести на ЦАП
M6: MOV A, PR1 ;вычисление отсчёта Yn ADD A, X2 ;и сохранение в памяти CLR C ; SUBB A, PR2 ; MOV Y, A ;
ADD A, #80h ;получение смещённого ;кода Yn для ЦАП
MOV DPTR, #PB ;вывод смещённого кода MOVX @DPTR, A ;Yn на ЦАП через порт ;РВ РУ55
;программный модуль сдвига отсчётов ;в памяти, подготовка следующего рабочего ;цикла
MOV X2, X1 ; MOV X1, X ; MOV Y2, Y1 ; MOV Y1, Y ; RETI ;возврат из подпрограммы ;обслуживания прерыва- ;по входу INT0 .END Отладка программы
Отладка программы имеет целью установление правильности или неправильности работы программы, устранение ошибок в программе, получение правильных результатов работы программы. Технология разработки и отладки программы достаточно подробно рассмотрена в [ 2 ] и [ 7 ]. Отладка программы состоит из двух этапов. На первом этапе устраняются ошибки в исходном тексте программы и в конструкциях языка, на котором она написана (в нашем случае – в конструкциях языка ассемблера). Для этого выполняется ассемблирование исходного текста программы с использованием специальной программы-транслятора (ассемблера). При ассемблировании выявляются синтаксические и семантические ошибки. Текст программы с внесёнными исправлениями снова подвергается ассемблированию с целью получения объектного модуля программы, который необходим для выполнения второго этапа – собственно отладки программы. Второй этап – отладка с помощью программного отладчика (эмулятора) позволяет выявить логические, алгоритмические, принципиальные ошибки в программе. Эмулятор способен идентично выполнять (интерпретировать) все команды МК и путём пошагового или пофрагментного исполнения программы позволяет получать результаты её выполнения вместо реального МК. Сопоставление этих результатов с ожидаемыми (полученными расчётным, аналитическим путём) позволяет установить работоспособность программы.
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (534)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |