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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.