об'єкт не під охороною,
; орану снятаBIT P2.3; Червоний світлодіод. Горить, коли шлейф обірваний
; або не закриті двері при взятті об'єкт під охрануBIT P2.4; Жовтий світлодіод горить, коли об'єкт під охороною
shleyf1 BIT P2.5BIT P2.6
flag SET 0; якщо flag = 1, то об'єкт під охороною
; якщо flag = 0, то об'єкт не під Орані:
; Робимо початкові установкіshleyf1; встановлюємо значення 1 на бітах 5 і 6shleyf2; порту 2 для реєстрації можливого обриваgreen; запалюємо зелений светодіодredyellowPSW, # 00001000b; Вибір банку регістрів RB1_paket:
; перевіряємо установліна чи охорона, якщо так, то перевіряємо шлейфи на обрив
; якщо ні, то перевірка на пакетflag, # 1, proverka1RI, proerka1; Якщо пакет прийшов, то proverka1 - його аналіз
mov R0, P2R0, # 00100000bR1, P2R1, # 01000000bR0, # 00100000b, vzlom
cjne R1, # 01000000b, vzlomread_paket
; аналіз вхідних пакетів:
; *** Налаштування послідовного порту на 1-ий режим роботи *** SCON, # 01110000b
; настройка таймера 1 на 2-ий режим роботи
anl TMOD, # 00001111bTMOD, # 00100000bTH0, # 0fdhTL0, # 0fdh
setb TR1RI, $; чекаємо закінчення прийому пакетаA, SBUF; заносимо його в аккуляторRIA, # 10010101b, proverka2; якщо пакет = команда взято під охорону (10010101),
; тоді перевіряємо чи закриті двері_or:
mov R0, P2R0, # 00100000bR1, P2
anl R1, # 01000000bR0, # 00100000b, onred; якщо двері не закриті, тоді запалюємо краснийR1, # 01000000b, onred; світлодіод і чекаємо нової команди
; Якщо двері закриті, тоді беремо під охорону
clr redyellowzamokflag, # 1read_paket:
setb redproverka1
; Якщо пакет = команда зняти з орани, то знімаємо Оран
; якщо інша послідовність, то йде перебір => включаємо сигналізацію: cjne A, # 01110110, vzlomzamok; відкриваємо замкіyellow; тушкуємо жовтий светодіодgreen; запалюємо зелений
mov flag, # 0proverka1: acall trevoga
sjmp read_paket
; *** Підпрограма затримки на 50 мс *** _50ms: orl TMOD, # 00000001b; Переводимо Тайер T0 в 1-ий режим работиTH0, # HIGH (not (50000-1)); заносимо старшу частину від 50 мсTL0, # LOW (not (50000-1)); заносимо молодшу частину від 50 мсTR0; запускаємо таймер: jnb TF0, wait1; Встановився Чи прапор прериваніяTR0; Зупинка таймераTF0; скидання прапора переривання
; *** Підпрограма сигналізації. Видає звук тривалістю = 20с
trevoga: setb alarmredR2, # 400_w: acall delay_50ms...