Смекни!
smekni.com

Система охранной сигнализации промышленного объекта на базе разнотипных датчиков (стр. 18 из 18)

Подпрограмма основного опроса датчиков, передача сигнала на последовательный порт (модем) адреса датчика при его ;срабатывании.

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