JNZ USUAL
CLR INITC
USUAL: CALL SENDD ;Послать свои данные в сеть
INC CURRENT ;Послать маркер следующему
CALL SENDM
JBC ANSWER,WORK ;Если был ответ, то переход на
;нормальную работу. Иначе, нужно проверить, не имеет ли
;данный контроллер номер, равный числу контроллеров в сети –1.
;Если это так, то это значит, что всё в порядке и новых
;контроллеров в сети не появилось и можно передавать маркер
;контроллеру с номером 0. Если это не так, то это значит, что
;следующий по номеру контроллер «потерялся» и необходимо
;переопределить номера контроллеров в сети
MOV A,QUANT
DEC A
CJNE A,NUMBER,ABAND
MOV CURRENT,#0 ;Если данный контроллер ;последний в сети
CALL SENDM
JMP WORK
;Обработка ситуации пропажи из сети какого-то контроллера
ABAND: DEC QUANT ;Если кто-то пропал, значит,
;количество контроллеров в сети уменьшилось
MOV A,NUMBER
JZ IAMHERE ;Если номер данного контроллера
;равен 0, то он имеет право начать круг инициализации
SUBB A,CURRENT ;Если номер пропавшего
;контроллера, больше, чем идентификационный номер текущего контроллера, то флаг
C=1 и можно начинать нормальную работу
JC WORK
DEC NUMBER ;Иначе необходимо
;уменьшить номер данного микроконтроллера
MOV A,NUMBER
JZ IAMHERE ;Если номер контроллера 0, то
;он имеет право начинать круг инициализации
JMP WORK ;Иначе – начало нормальной
;работы
;Действия, производимые контроллером, который после
;проведённых действий оказался обладателем номера 0
IAMHERE: MOV CURRENT,#1 ;Необходимо послать маркер
;контроллеру №1, предварительно установив признак цикла
;инициализации:
SETB INITC
CALL SENDM
JMP WORK
Подпрограмма WWBT: Wait While Byte is Transferring.
Данная подпрограмма производит ожидание окончания передачи
байта УАПП. Для этого анализируется флаг прерывания передатчика в регистре SCON
WWBT: JBC SCON.1,ENDWWBT
JMP WWBT
ENDWWBT: CLR P1.3 ;Сброс
бита порта 1,
;обеспечивающего управление схемой коммутации передатчика
;с линией связи
RET
Подпрограмма WAIT производит ожидание какого-либо байта из сети. Ожидание производится в течение времени, указанного в переменной TAU и прерывается либо по истечении этого времени, либо при переполнении таймера посредством записи в него максимальных значений (эти действия совершает обработчик прерывания от УАПП)
WAIT: SETB P1.3 ;Подключение передатчика к ЛС
MOV SCON,#90h ;Ввод в режиме 2
MOV TH0,#HIGH(TAU) ;Загрузка Т/С0
MOV TL0,#LOW(TAU)
SETB TCON.4 ;Запуск Т/С0
WLOOP: JBC TCON.5,ENDWAIT ;Анализ переполнения Т/С0
JMP WLOOP
ENDWAIT: CLR TCON.4 ;Останов Т/С0
RET
Подпрограмма SENDM – передача маркера в сеть. Осуществляет формирование маркера и передачу его в ЛС
SENDM: SETB PSW.3 ;Выбор банка регистров 1
MOV R0,CURRENT ;R0<-Номер получателя
MOV A,QUANT ;Сколько контроллеров в сети?
RL A
RL A
RL A
ORL A,R0 ;Загрузка в маркер информации о
;номере получателя и количестве контроллеров в сети
SETB ACC.7 ;Установка признака маркера
JNB INITC,NOINIT ;Это цикл инициализации?
ORL A,#40h ;Да!
NOINIT: MOV SCON,#80h ;Установка УАПП в режим 0
JNB PSW.0,BTRANS ;Загрузка бита паритета
SETB SCON.3 ;Бит паритета будет
;передаваться как 9-й бит
BTRANS: SETB P1.3 ;Разрешение работы передатчика
MOV SBUF,A ;Начало передачи
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.