Разработка контроллера в составе локальной микросети, страница 11

          CALL WWBT        ;Ожидание конца передачи

          CLR PSW.3        ;Выбор банка регистров 0

          RET

Подпрограмма SENDD осуществляет снятие показаний датчиков (АЦП, битовый сигнал – с линий портов, а значение числа импульсов за 0,05 с – из переменной IMPCOUNT, в которой к этому времени уже могут быть обновлённые данные)

SENDD:    SETB PSW.3      ;Выбор банка регистров 1

          SETB P1.7        ;Настройка порта на ввод

          MOV A,P1        ;Ввод показаний битового
;датчика. Для этого вводится байт, выделяется 7-й бит,
;сдвигается до позиции, на которой он будет находиться в байте
;данных при передаче

          ANL A,#80h      

          RR A

          MOV R2,A

          MOV A,IMPCOUNT   ;Ввод числа импульсов

          ANL A,#3Fh       ;Используются только 6 бит

          ORL A,R2         ;Формирование байта данных

          MOV R2,A             

          CLR P1.0         ;Запуск АЦП

WAITADC: JNB P1.1,WAITADC      ;Ожидание готовности
                                ;данных на выходе АЦП

          MOV P0,#0FFh     ;Настройка порта на ввод

          MOV A,P0        ;Получение эквивалента
;аналогового сигнала

          SETB P1.0        ;Остановка АЦП

          ANL A,#0FEh     ;Бит 7 должен быть равен нулю -
RR A             ;это признак байта данных

          MOV R3,A             

;Теперь необходимо записать считанные с датчиков значения
;в таблицу данных для дальнейшего анализа и передать в линию

          MOV A,NUMBER

          RL A             ;*2

          ADD A,#TABLE    ;A=#TABLE+2*NUMBER

          MOV R0,A

          MOV A,R2        ;A<-Первый байт данных

          MOV @R0,A        ;(#TABLE+2*NUMBER)<-Первый байт

          MOV SCON,#80h   ;УАПП – на вывод в режиме 2

          JNB PSW.0,B1TRANS

          SETB SCON.3      ;Бит паритета

B1TRANS:  SETB P1.3        ;Разрешение работы передатчика

          MOV SBUF,A       ;Начало передачи

          CALL WWBT        ;Ожидание конца передачи

          INC R0           ;Следующий адрес таблицы данных

          MOV A,R3         ;A<-Второй байт

          MOV @R0,A   ;(#TABLE+2*NUMBER+1)<-Второй байт

          JNB PSW.0,B2TRANS

          SETB SCON.3      ;Бит паритета

B2TRANS:  MOV SBUF,A      ;Начало передачи

          CALL ACTION      ;Выдать воздействия
;на объект управления. Эта функция совмещается с ожиданием
;конца передачи байта, т.к. время работы подпрограммы ACTION
;около 80 мкс, а время, в течение которого все контроллеры в
;сети будут ожидать появления маркера составляет 140 мкс. За
;это время данный контроллер успеет выдать управляющие
;воздействия и передать в сеть маркер

          CLR PSW.3        ;Выбор регистрового банка 0

          RET

Подпрограмма ACTION анализирует таблицу данных и на основе анализа производит управление объектом. В случае, если вызов подпрограммы произошёл во время цикла инициализации, управление объектом не производится и вызывается подпрограмма ожидания окончания передачи байта.

ACTION:   JNB INITC,BEGACT

          CALL WWBT            

          RET                  

BEGACT:   SETB PSW.3            

          MOV R3,QUANT     ;Счётчик числа контроллеров

          MOV MINBYTE1,#0FFh    ;Инициализация переменных

          MOV NOFMIN1,#0FFh    

          MOV MINBYTE2,#0FFh

          MOV NOFMIN2,#0FFh

          MOV ANDREZ,#40h 

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

ANALYZE:  MOV A,R3         ;Количество контроллеров

          DEC A            ;Получили номер анализируемого

          RL A             ;*2

          MOV R0,A        ;R0<-(Счётчик-1)*2

          MOV A,#TABLE

          ADD A,R0        ;A<-(#TABLE+(Счётчик-1)*2)

          MOV R0,A

          MOV A,@R0       ;Первый байт