Программа обработки прерывания от
последовательного порта располагается в памяти программ микроЭВМ, начиная с адреса 23h, и
работает с регистрами банка 3. Различные банки регистров для различных программ выбраны для
того, чтобы исключить множественные пересылки содержимого регистров в стек и обратно при входе
в прерывание и возврате из него, а также в некоторых случаях для удобства написания
программы - использования символических обозначений ячеек памяти как R0-R7. Для
переключения на новый банк регистров при входе в программу прерывания или в иных случаях
достаточно изменить состояния разрядов слова PSW, определяющих номер рабочего банка.
При входе в программу обработки прерывания необходимо сбрасывать
флаг запроса прерывания - RI, так как при прерывании от последовательного порта микроЭВМ
автоматического сброса флага не происходит.
Принятый байт передается в аккумулятор, после чего определяется тип
принятой константы. Предполагается, что ПК посылает константы в строго определенном порядке:
сначала Т, затем S, затем К. После этого любой посланный байт означает разрешение накопления
данных. Количество принятых констант или тип принимаемой в настоящий момент константы
определяется по содержимому регистра R0. После приема каждой константы содержимое R0
увеличивается на 1 и в ПК посылается или код 02 - подтверждение приема байта константы
или код 03 - сигнал о том, что все 3 константы приняты.
После приема константы S происходит преобразование S в адрес
ячейки таблицы сдвигов и в регистре R2 фиксируется количество необходимых сдвигов выходного
кода с АЦП.
После приема трех констант устанавливается начальный адрес внешней
памяти, загружаются константы пересчета в таймер T/C0 и в программные счетчики и разрешаются
прерывания от таймера и от кнопки TEST (INT1).
Прием сигнала о начале вывода данных запрещает все прерывания и
подготавливает систему к выдаче данных из памяти с учетом константы К. ПК передает в микроЭВМ
константу К уже с учетом точности, т.е. двоичный код, соответствующий выходному коду с АЦП, уже
сдвинут на необходимое количество разрядов влево. Регистр R6 используется для подсчета
количества параметров, по величине меньших К. Начальный адрес внешней памяти опять
устанавливается в ноль.
Если считанный из памяти параметр, меньший К, не последний из
запомненных, то считывается новое значение. В противном случае происходит передача. Передача
происходит и при значении параметра, большем К.
Под передачей понимается пересылка в ПК или значения параметра или
код количества отсчетов, меньших К. Эти величины каким-то образом должны отличаться. Если это
параметр, то в старшем разряде предается «0» (код параметра максимум 7-разрядный), код
количества меньших параметров в старшем разряде имеет «1». Число отсчетов, меньших К, может
оказаться большим, тогда вывод производится последовательно несколько раз, причем максимальное
значение кода отсчетов в одном выводе равно 127.
Новое значение может быть передано в ПК только после получения
сигнала подтверждения приема (любой байт).
Признаком окончания чтения из внешней памяти является совпадение
состояния счетчика DPTR и копии последнего адреса, по которому записывались данные, в
регистрах R4 и R5. Завершается работа системы посылкой в ПК кода 05 - сигнала окончания
передачи накопленных данных. |
Блок-схема алгоритма
программы
прерывания
от последовательного
порта
(часть 1)
(часть 2)
Текст
программы |