MINBYTE1: DS 1 ;Байт с минимальным значением
NOFMIN1: DS 1 ;Номер владельца этого значения
MINBYTE2: DS 1
NOFMIN2: DS 1
ANDREZ: DS 1 ;Результат операции «И» над
;всеми битовыми входными
;значениями
Основная программа начинается с инициализации универсального приёмопередатчика (УАПП), задания маски, приоритетов и векторов прерываний. Так как при включении электропитания содержимое резидентной памяти данных не определено, то необходимо также проинициализировать переменные и таблицу данных. Так как после сброса во все регистры записывается #FFh, то необходимо также сбросить линии порта 1, осуществляющие управление объектом.
RSEG SEGCODE ;Начало сегмента кода
ORG 0 ;При включении питания
JMP START ;запустить основную программу
ORG 3 ;Прерывание от INT0
JMP EXTINT ;Переход на обработчик
ORG 1Bh ;Прерывание от
JMP T1INT ;таймера/счётчика
ORG 23h ;Прерывание от УАПП
JMP PCAINT
ORG 30h ;Начало основной программы
START:
MOV P1,#8Fh ;Снятие управляющих воздействий
;с объекта управления
MOV IE,#89h ;Запрет всех прерываний, кроме
;прерываний от
;таймера/счётчика 1 и УАПП
MOV IP,#10h ;Высокий приоритет для УАПП
MOV TMOD,#11h ;Установка таймеров/счётчиков
;в режим 16-битных таймеров
MOV IMPCOUNT,#0FFh ;Инициализация счётчика
;импульсов. Если
;значение этой переменной в процессе работы программы FFh,
;то это значит, что значение числа импульсов за 0,05 с
;ещё не определено и это значение учитываться не будет
MOV PREPIMP,#0
MOV TH1,#3Ch ;Установка ТС1 (0.05с) – время,
MOV TL1,#0Afh ;в течение которого
;производится подсчёт числа
;импульсов
MOV TCON,#40h ;Запуск таймера 1
;Инициализация переменных:
CLR ANSWER ;Ещё никто не отвечал
MOV NUMBER,#0 ;Собственный номер
MOV NBYTE,#0 ;Ещё не принимали данных
MOV CURRENT,#0
MOV SP,#30h ;Начальный адрес стека
;Инициализация таблицы данных
MOV A,#10h ;Всего 16 байт
INITAB: MOV R0,A
MOV A,#TABLE
ADD A,R0
XCH A,R0
MOV @R0,#0FFh ;Заполняем #0FFh
DEC A
JNZ INITAB
При включении микроконтроллера он сначала в течение времени 3×t «слушает» сеть. Это необходимо для определения, работала ли сеть до его включения. Значение t определяется как сумма времени, необходимого для передачи байта и времени, необходимого для реагирования контроллера с некоторым запасом. Так как используется частота передачи fрез/64, то время, необходимое для пересылки 11 бит (режим 2) составит: мкс. С учётом запаса на реагирование микроконтроллера t=70 мкс.
TAU SET 0FF2Dh ;TAU=0FFFFh-временная
;задержка (0.210 мс)
SETB IE.4 ;Разрешение прерываний от УАПП
WHOAMI: CALL WAIT ;Начало цикла «Кто я такой?»
;Вызов подпрограммы ожидания
;любого байта в течение 210 мкс
TAU SET 0FF73h ;Далее время ожидания 140 мкс
JBC ANSWER,INUSE ;Если установлен флаг
;ANSWER, т.е. сеть уже используется, переход на INUSE.
;Флаг устанавливается обработчиком прерывания от УАПП
MOV NUMBER,#0 ;Иначе – я номер 0
MOV QUANT,#1 ;В сети один контроллер
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.