Проект учебного пособия по лабораторному стенду Teacher 51, страница 4

41h ¦  +---+  -                                                                                          ¦

+----------------------------------------------------------------------------¦

42h ¦ LASTKEY - переменная монитора.                                          ¦

¦ Код последней нажатой клавиши.                                            ¦

+----------------------------------------------------------------------------¦

43h ¦ RAMADR  - переменная монитора.                                          ¦

44h ¦                                                                                                       ¦

+----------------------------------------------------------------------------¦

45h ¦ RAMWORD - переменная монитора.                                       ¦

46h +----------------------------------------------------------------------------+

+----------------------------------------------------------------------------+

47h ¦ RAMSIZE - объём ОЗУ контроллера в килобайтах.               ¦

+----------------------------------------------------------------------------¦

48h ¦ Область РПД доступная пользователю.                                  ¦

**  ¦                                                                                                      ¦

5Fh ¦                                                                                                      ¦

+----------------------------------------------------------------------------¦

60h ¦                  С Т Е К  32 байта.                                                      ¦

7Fh +----------------------------------------------------------------------------+

Рис. 5

Сервисные процедуры монитора   

Пользователю доступны следующие сервисные процедуры монитора:

ConvHexToPos 0329h.

Подпрограмма преобразования кода из HEXIND в POSIND.

Преобразует неупакованные BCD-числа из HEXIND в abcdefgh-формат и записывает в массив POSIND.

Использует: dptr,r0,r1,r2.

WriteByte 034Eh.

Процедура передачи байта через UART с получением эхо-байта.

Вход  : a=байт данных.

Выход : cf=признак ошибки : 0-ok, 1-error.

Использует : b,tc0.

ReadByte 0369h.

Процедура приема байта через UART с передчей эхо-байта.

Входных параметров нет.

Выход : a=байт данных,

cf=признак ошибки : 0-ok, 1-error.

Использует : tc0.

WaitRq 0376h.

Процедура ожидания  запроса  от  ПЭВМ  65  мС.  Вызывается из

WRITE_BYTE и READ_BYTE.

Входных параметров нет.

Выход : cf=признак наличия запроса : 1-запрос есть , 0-нет.

Использует : tc0.

InByte 0390h.

Процедура ввода байта через UART.  Бесконечно ожидает приёма байта; перед её вызовом необходимо вызвать WAIT_RQ. Вызывается из

WRITE_BYTE и READ_BYTE.

Вход   : нет.

Выход : a=байт данных,

cf=признак ошибки : 0-ok, 1-error.

OutByte 03A5h.

Процедура вывода байта через UART. Вызывается из WRITE_BYTE и READ_BYTE.

Вход   : a=байт данных.

Выход : нет.

Для опроса клавиатуры в мониторе не предусмотрено специальной подпрограммы, пользовательская  программа  может использовать для этого следующий алгоритм, который, собственно, используется и самим монитором  :

1) дождаться установки флага KEYPRESSED, то есть нажатия клавиши;

2) дождаться сброса флага KEYPRESSED (отпускание клавиши);

3) прочитать код нажатой клавиши из переменной LASTKEY;

4) обработать считанный код и перейти к пункту 1).

В том случае,  если программе необходимо постоянно опрашивать клавиатуру, не привязываясь к моменту нажатия конкретной клавиши, то допустимо просто постоянно в цикле считывать содержимое  переменной LASTKEY. Если она содержит код отличный от FFh, то это код нажатой клавиши, FFh же сигнализирует о том,  что нажатых  клавиш нет, либо нажато сразу несколько клавиш.

Клавиатура стенда имеет следующие коды клавиш:

0 -  F (клавиши с шестнацатиричными цифрами) имеют означенные ниже коды;

kb  STORE   -  10h, Запись байта и инкремент адреса;

kb  INCADR  -  11h, Инкремент адреса;

kb  DECADR  -  12h, Декремент адреса;

kb  SETADR  -  13h, Установка адреса;

kb  START    -  14h, Запуск программы по текущему адресу.