DB 66H ; Код цифры “4”
DB 6DH ; Код цифры “5”
DB 7DH ; Код цифры “6”
DB 07H ; Код цифры “7”
DB 7FH ; Код цифры “8”
DB 6FH ; Код цифры “9”
DB 77H ; Код цифры “A”
DB 7CH ; Код цифры “B”
DB 39H ; Код цифры “C”
DB 5EH ; Код цифры “D”
DB 79H ; Код цифры “E”
DB 71H ; Код цифры “F”
END
Закончив набор текста, получите объектный файл crosscod.obj.
3.1.2. Создайте файл с именем displ.asm в вашей папке. Запишите в него текст подпрограммы DISPL:
;-----------------------------DISPL-----------------------------------------------------; Подпрограмма вывода двухзначного шестнадцатиричного числа на дисплей
; Входной параметр: регистр A - число в HEX-коде
; Используется подпрограмма CROSSCOD
;-----------------------------------------------------------------------------------------------PUBLIC DISPL
EXTERN CROSSCOD
DISPL: MOV R1, A
ANL A, #0FH ; Выделить МлТ числа
CALL CROSSCOD ; В аккумуляторе – семисегментный код
MOV P1, A ; Вывод на индикатор HG1
MOV A, R1
SWAP A ; Обмен тетрад в аккумуляторе
ANL A, #0FH ; Выделить МлТ числа
CALL CROSSCOD
MOV P2, A ; Вывод на индикатор HG2
RET
END
Закончив набор текста программы, получите объектный файл displ.obj.
3.1.3. Создайте файл с именем in_out.asm в вашей папке. Запишите в него текст программы IN_OUT:
;------------------------------------------IN_OUT----------------------------------------------------------; Главная программа работы микроконтроллера
; Используются подпрограммы DISPL, CROSSCOD
;---------------------------------------------------------------------------------------------------------------PUBLIC IN_OUT
EXTERN DISPL, CROSSCOD
SAVE: EQU 30H ; Адрес ячейки ПД для хранения входного кода
ORG 0000H
IN_OUT: MOV SP, #70H ; Определить стек
CLR A
MOV SAVE, A ; Очистить ячейку ПД
CALL DISPL ; Вывести нули на дисплей
; Ожидание импульса на входе порта P3.2
WAIT1: JB P3.2, WAIT1 ; Ожидание P3.2=0
WAIT2: JNB P3.2, WAIT2 ; Ожидание P3.2=1
MOV A, P0 ; Ввод кода из порта
MOV SAVE, A ; Запоминание кода в ПД
CALL DISPL ; Вывод на дисплей
JMP WAIT1 ; Зацикливание программы
END
Закончив набор текста программы, получите файл in_out.obj.
Отладку многомодульных программ следует выполнять последовательно. В нашем примере сначала подпрограмму CROSSCOD, затем подпрограмму DISPL и, наконец, главную программу IN_OUT.
3.1.4. Выполните проверку работы подпрограммы CROSSCOD. С этой целью получите файл crosscod.hex с помощью линкера link.exe. Запустите симулятор/отладчик AVSIM51 и загрузите в него файл crosscod.hex. При рассмотрении текста программы CROSSCOD недоумение могут вызвать команды, расположенные с адреса 0005H. В исходной программе здесь располагались константы 3FH, 06H и т.д. Дело в том, что отладчик AVSIM51 не может различать константы и коды команд, которые размещены в программной памяти. Любые данные он интерпретирует как команды. Таким образом, значению 3FH соответствует команда ADDC A, R6, а значению 06H – команда INC @R0 и т.д.
Отладка подпрограммы CROSSCOD состоит в проверке соответствия полученных данных (выходной параметр) и исходных данных (входной параметр). Исследуйте работу программы CROSSCOD в пошаговом режиме при следующих исходных данных: (A)=00H, (A)=09H, (A)=0FH. Выполнение программы заканчивайте при достижении команды RET.
3.1.5. Выполните проверку работы подпрограммы DISPL. Она является двухмодульной, в ней есть ссылка на другую программу CROSSCOD. В данном случае программный модуль DISPL будет считаться главным, а модуль CROSSCOD будет внешним. Объектные файлы этих модулей содержатся в файлах displ.obj и crosscod.obj.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.