Подпрограмма основного опроса датчиков, передача сигнала на последовательный порт (модем) адреса датчика при его ;срабатывании.
OPROS:
в P1.0..P1.3 записывается адресующий код мультиплексора – код
проверяемого датчика
ADDRESS_BIT0 EQU P1.0 ;адрес бита порта P1.0
ADDRESS_BIT1 EQU P1.1 ;адресбитапорта P1.1
ADDRESS_BIT2 EQU P1.2 ;адресбитапорта P1.2
ADDRESS_BIT3 EQU P1.3 ;адресбитапорта P1.3
TEMP EQU R1 ;адрес регистра R1
P0.0, P0.1 – биты выходного сигнала мультиплексоров №1 и №2 соответственно
BIT_Q_MUX1 EQU P0.0 ;адрес бита порта P0.0
BIT_Q_MUX2 EQU P0.1 ;адрес бита порта P0.1
CLR A ;сброс аккумулятора
CLR P1.4 ;разрешение работы мультиплексора №1
CLR P1.5 ;разрешение работы мультиплексора №2
CALL INIT ;вызов подпрограммы инициализации последовательного ;порта
START_OPROS:
MOV C,ACC.0 ;запись адреса проверяемого ;датчика
MOV ADDRESS_BIT0,С
в порты P1.0..P1.3 через бит ;переноса
MOV C,ACC.1
MOV ADDRESS_BIT1,C
MOV C,ACC.2
MOV ADDRESS_BIT2,C
MOV C,ACC.3
MOV ADDRESS_BIT3,C
JNB BIT_Q_MUX1,NOT_ERR
если не сработал датчик
подсоединенный к 1-му
мультиплексору, то проверить
датчик по такому же адресу 2-го
мультиплексора
CLR TEMP ;очищаем регистр, для временного хранения адреса датчика
MOV TEMP,A ;заносим адрес сработавшего датчика
ORL A,#00010000B
4-й бит аккумулятора обозначает 1-й мультиплексор
CALL SP_OUT ;вызов подпрограммы передачи ;данных о сработавшем датчике через последовательный порт
MOV A,TEMP ;восстанавливаем значение адреса ;датчика
NOT_ERR:
JNB BIT_Q_MUX2,END_OPROS
если не сработал датчик ;подсоединенный ко 2-му ;мультиплексору, то продолжить сканирование
CLR TEMP ;очищаем регистр, для временного ;хранения адреса датчика
MOV TEMP,A ;заносим адрес сработавшего ;датчика
ORL A,#00100000B
5-й бит аккумулятора обозначает ;2-й мультиплексор
CALL SP_OUT ;вызов подпрограммы передачи ;данных о сработавшем датчике через последовательный порт
MOV A,TEMP ;восстанавливаем значение адреса ;датчика
END_OPROS:
CJNE A,#00001111B,NOT_EXIT
если была опрошена последняя ;пара датчиков, то
RET ;возвращение из подпрограммы ;опроса датчиков
NOT_EXIT:
INC A ;увеличение аккумулятора на 1, для опроса следующей пары датчиков
JMP START_OPROS
продолжаем опрос
Подпрограмма инициализации последовательного порта в режиме 3 со скоростью передачи данных 2400 бод.
INIT: MOV SCON,#00100010B
MOV TMOD,#00100000B
;настройка Т/С1
MOV PCON,#0 ;сброс бита SMOD
MOV TH1,#<.NOT.13+1
K=f/(12*32*0.0024)= 13, где ;f=12МГц есть частота синхронизации микроконтроллера
SET TR1 ;включить Т/С1
RET ;вернуться из подпрограммы
Пподпрограмма передачи данных и контрольного бита данных через последовательных порт
SP_OUT: MOV C,P ;пересылка контрольного бита
MOV TB8,C ;из флага паритета SCON.3
M1: JNT T1,M1 ;синхронизация передачи
CLR T1 ;сброс бита SCON.1
MOV SBUF,A ;передача контрольного бита и содержимого аккумулятора через последовательный порт
RET