Ввод инфо с датчиков (1086870), страница 3
Текст из файла (страница 3)
Так как в системе команд МК48 отсутствует команда сравнения, то сравнение с уставкой (уставками) осуществляется сложением кода с числом, дополняющим уставку до 256. Если число в точности равно уставке, то результат сложения равен нулю и управление передается по команде JZ или JNZ.
версия для МК51
MOV A, #135 ;загрузка уставки
CJNE A,P1,LABELB ;сравнение и передача управления
LABELA: ...
Опрос группы импульсных датчиков. Эта процедура состоит из последовательности действий:ожидания замыкания одного из контактов, устранения дребезга, ожидания размыкания замкнутого контакта.
Программная реализация процедуры для случая подключения четырех импульсных датчиков к входам 0-3 порта 1 будет иметь вид:
версия для МК48
KBRD: IN A, P1 ;ввод кода
CPL A ;инверсия кода
ANL A, #00001111B ;есть замкнутый контакт?
JZ KBRD ;если ни один контакт не
;замкнут, то ждать
MOV R2, A ;передача принятого кода в R2
DBNC: CALL DELAY ;устранение дребезга
WAIT: IN A, P1 ;ввод кода
CPL A ;инверсия кода
ANL A, #00001111B ;есть замкнутый контакт?
JNZ WAIT ;если контакт замкнут ,то ждать,
EXIT: ... ;иначе выход из процедуры
Анализ состояния контактов осуществляется наложением маски на принятый от датчиков код. Для датчиков, формирующих "отрицательный" импульс, принятый код удобно предварительно проинвертировать.
Для группы импульсных датчиков, представляющих собой клавишный регистр, процедура KBRD должна быть дополнена процедурой идентификации нажатой клавиши и защиты от одновременного нажатия двух и более клавиш.
Идентификация нажатой клавиши может осуществляться двумя способами: по таблице или программно. При табличном способе перекодирования в памяти программ должна находиться таблица двоичных эквивалентов кодов клавиш.
Программное преобразование унитарного кода, принятого от клавиатуры, в двоичный может быть выполнено методом сдвигов исходного унитарного кода и подсчетом числа сдвигов на счетчике до появления первого переноса. Схема алгоритма такой процедуры приведена на рис. 6.7.
Программа для МК48 будет иметь вид:
IDNKEY: MOV A,R2 ;передача принятого кода в аккумулятор
MOV R1,#0 ;сброс счетчика сдвигов
CLR C ;сброс флага переноса
ROTATE: RRC A ;свиг унитарного кода
JC CHECK ;если возник перенос, то проверка
;на множественное нажатие
INC R1 ;инкркмент счетчика сдвигов
JMP ROTATE ;продолжение сдвигов
CHECK: JZ EXIT ;если (А)=0,то выход из процедуры
MOV R1, #0FFH ;занесение в R1 кода одновременного
;нажатия нескольких клавиш
EXIT: ... ;выход из процедуры
Результат формируется в регистре R1. В программе предполагается, что в R2 находится инверсия унитарного кода, принятого от группы: датчиков процедурой KBRD. В результате работы программы IDNKEY в R1 будет сформирован двоичный код нажатой клавиши или экстракод (FFH) "нажато несколько клавиш".
18