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

3.2.1. На панели TotCom  в вашей папке создайте файл с именем inter.asm и занесите в него текст программы INTER:

;------------------------------------INTER------------------------------------------------------------; Главная программа работы микроконтроллера

; Используются подпрограммы DISPL, CROSSCOD

;---------------------------------------------------------------------------------------------------------PUBLIC  INTER

EXTERN  DISPL,  CROSSCOD

SAVE:     EQU    30H          ; Адрес ячейки ПД для хранения входного кода

ORG  0000H

INTER:   JMP  MAIN          ; Переход на метку MAIN

ORG  0003H        ; Вектор прерывания по INT0

JMP  ISR0            ; Переход на программу ISR0

ORG  0010H        ; Начало программы MAIN

MAIN:     MOV  SP, #70H  ; Определить стек

CLR  A

MOV  SAVE, A  ; Очистить ячейку SAVE

CALL  DISPL     ; Вывести нули на HG1 и HG2

; Разрешить прерывание по INT0

SETB  EX0         ; Разрешить прерывание по INT0

SETB  IT0           ; Разрешить прерывание по перепаду 1->0

SETB  EA            ; Общее разрешение прерываний

STOP:      JMP  STOP          ; Зацикливание программы

; Обработчик прерывания

ISR0:        MOV  A, P0

MOV  SAVE, A   ; Запоминание кода в ПД

CALL  DISPL      ; Вывод на дисплей

RETI                     ; Возврат из прерывания

END

Обратите внимание на биты EX0, IT0, EA. Они находятся в регистрах специальных функций IE и TCON.

Закончив набор текста программы, получите объектный файл inter.obj.

3.2.2. Проверку правильности работы программы микроконтроллера рекомендуется вести в следующей последовательности. Произведите компоновку программы INTER в диалоговом режиме работы линкера link.exe. Последовательно запишите имена всех файлов, помеченных в директивах PUBLIC и EXTERN, т.е. inter.obj, displ.obj, crosscod.obj. В результате компоновки появится новый файл с именем inter.hex. Обязательно убедитесь в отсутствии ошибок при компоновке. Для удобства дальнейшей отладки запишите начальные и конечные адреса всех модулей, входящих в результирующую программу.

Запустите симулятор/отладчик AVSIM51 и загрузите в него файл inter.hex. Отключите отображения меток с помощью Alt-F5. Выполните прогон программы в автоматическом режиме с  малой скоростью (LOW). Программа должна зациклиться на команде AJMP $. Это соответствует строке STOP: JMP STOP в программе INTER. Программа ожидает нажатия кнопки SB1, т.е. появления нуля на линии P3.2 (INT0 – это альтернативная функция линии P3.2). Убедитесь, что на выводах портов P1 и P2 появились семисегментные коды, соответствующие числу 00H. Используя комбинацию клавиш Alt-P, переместите курсор на выводы порта Р3 и занесите 0 во второй разряд Р3 (Р3.2<-0). Должен произойти переход к обработчику прерывания, т.е. выполнение подпрограммы ISR0. В результате на выводах портов P1, P2 появятся семисегментные коды, соответствующие числу FFH со входа порта P0. Кроме того, в ячейке 30H памяти данных должен быть также код FFH.  Затем занесите 1 во второй разряд порта P3 (P3.2<-1).

Дальнейшее тестирование программы выполните при других значениях кода на входе порта P0, например, 55H и 99H. Если программа выполняется правильно при всех значениях входного кода, то процесс отладки можно считать законченным.

                               Задание 2 для самостоятельной работы

`Модернизируйте программу INTER таким образом, что после инициализации МК ожидает пяти нажатий кнопки SB1. После каждого нажатия происходит ввод кода из порта P0 и его накопление (суммирование) в ячейках памяти данных без отображения на дисплее. После пятого нажатия кнопки программа вычисляет среднее значение кода, записывает его в ячейку SAVE и выводит на дисплей. Затем программа  зацикливается и не реагирует на кнопку SB1.