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

Функциональная схема микроконтроллера, выполняющего рассмотренные действия, приведена на рис. 12.1. Порт P0 служит для ввода кода из АЦП. Индикатор HG1 предназначен для вывода младшей тетрады кода, индикатор HG2 –  для вывода старшей тетрады. Для работы индикаторов необходим семисегментный код. Этот код формируется методом программной перекодировки из двоичного позиционного и выводится в порты P1, P2. Микросхемы DD2, DD3 являются буферными элементами и служат для сопряжения портов вывода микроконтроллера с индикаторами (усиление по току или согласование уровней напряжения). Кнопка SB1 в отжатом состоянии выдает напряжение высокого уровня (лог. 1) на вход порта P3.2, а при нажатии - напряжение низкого уровня (лог. 0). Таким образом, импульсный сигнал, формируемый при кратковременном нажатии кнопки, будет состоять из двух перепадов вида: 1-> 0 -> 1 (см. рис. 12.2).

Алгоритм программы работы МК состоит в следующем. После включения электропитания (запуска программы) МК выводит на дисплей нули, затем программа зацикливается (останавливается). При кратковременном нажатии кнопки SB1 происходит ввод кода со входов порта P0, запоминание в ПД и  вывод его на индикаторы дисплея. Блок-схема алгоритма программы работы МК приведена на рис. 12.3.

Главная программа управления с именем IN_OUT производит инициализацию МК, в которой определяется стек, очищается ячейка ПД для хранения входного кода и выводятся нули на индикаторы дисплея. Затем программа ожидает нажатия кнопки SB1 (появления лог.0 на линии P3.2). После нажатия кнопки SB1 программа ожидает момент ее отжатия (появления лог.1 на линии P3.2). Затем происходит ввод кода из порта P0, запоминание его в ячейке ПД и вывод на дисплей. После этого программа вновь переходит на ожидание нажатия кнопки SB1.  

Главная программа IN_OUT  включает подпрограмму  DISPL – вывода кода из аккумулятора на индикаторы дисплея. В свою очередь подпрограмма DISPL включает подпрограмму CROSSCOD – перекодировку двоичного позиционного кода в семисегментный эквивалент.

Таким образом, вся программа работы МК разбивается на три отдельных модуля, которые могут быть разработаны и отлажены по отдельности.

При разбиении программного обеспечения на отдельные модули в них могут появиться метки и переменные, определяемые в других модулях. Все метки и символические имена, к которым осуществляется обращение в данном модуле, но определяемые вне его, должны быть указаны через запятую в директиве (псевдокоманде) ассемблера EXTERN (внешние). Все метки и имена переменных, определяемые в данном модуле и используемые также вне этого модуля, должны быть указаны через запятую в директиве (псевдокоманде) PUBLIC (общие). Таким образом, метки и имена, применяемые для связи между модулями, могут быть указаны в директиве PUBLIC только в одном модуле. В остальных модулях они указываются в директивах EXTERN.

3.1.1. На панели TotCom раскройте свою папку и создайте в ней файл с именем

crosscod.asm. Запишите в него текст подпрограммы CROSSCOD.

     Указание.   Имена директив PUBLIC и EXTERN необходимо набирать, начиная со 2-й позиции курсора. Имена меток, символических имен следует набирать, начиная с 1-й позиции курсора.

;-----------------CROSSCOD-------------------------------------------------------------------------------; Подпрограмма преобразования двоичного позиционного кода в семисегментный код.

; Входной параметр: (А) – двоичный (позиционный) код символа.

; Выходной параметр: (А) – семисегментный код символа.

;----------------------------------------------------------------------------------------------------------------PUBLIC CROSSCOD

CROSSCOD: MOV    DPTR, #TABLECOD

MOVC A, @A+DPTR

RET

; Таблица семисегментных кодов символов

TABLECOD: DB  3FH    ; Код цифры “0”

DB  06H     ; Код цифры “1”

DB  5BH    ; Код цифры “2”

DB  4FH    ; Код цифры “3”