Однокристальные микроконтроллеры семейства MCS-51. Разработка и отладка многомодульных программ. Алгоритм программы работы МК, страница 3

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.