logo
МПТ_L_к

Програма sezam

****************************************************************

ORG 0 ; початкова адреса програми

REPEAT: JNB D, ALARM ; перехід (тривога), якщо повернули ручку

JB K, REPEAT ; повторити, якщо не натиснута кнопка

JNB K, $ ; чекання натискування кнопки вводу коду

;

; Введення коду від кнопки

MOV R6, #3 ; тільки три числа в коді

MOV R0, #CODEZ ; початкова адреса області пам’яті

; введених кодів

CYKLE: CLR A ; мітка циклу вводу, скид регістра коду

CLR L ; ввікнення лампи сигналізації

MOV R5, #120 ; завантаження лічильника витримки часу

LOOP: ACALL DELAY ; мітка затримки часу на 0,05 секунди

JNB D, ALARM ; перехід (тривога), якщо повернули ручку

JNB K, KREDO..; перехід, якщо натиснута кнопка вводу

DJNZ R5, LOOP ; цикл чекання натискування кнопки

SJMP PAUSE ; перехід, якщо вийшов час у 6 секунд

;

KREDO ACALL DELAY ; цикл контролю одного натискування

JNB D, ALARM ; перехід (тривога), якщо повернули ручку

JB K, ACCEPT ; перехід, якщо відпущена кнопка вводу

DJNZ R5, KREDO; чекання відпущення кнопки вводу коду

SJMP PAUSE ; безумовний перехід на мітку

;

ACCEPT INC A ; інкремент лічильника натискування

SJMP LOOP ; безумовний перехід на мітку

PAUSE MOV @R0, A ; зберігання числа натискувань

INC R0 ; інкремент R0

SETB L ; вимкнення лампи сигналізації

ACALL ONESEC ; мітка затримки часу на 1 секунду

DJNZ R6, CYKLE ; повторити три рази

;

; порівняння введених чисел коду з еталонними байтами

MOV R0, #CODEZ ; початкова адреса області пам’яті

СJNE @R0, #7, REPEAT; порівнюємо старшу цифру коду

INC R0 ; інкремент R0 (адреса середньої цифри)

СJNE @R0, #3, REPEAT; порівнюємо середню цифру коду

INC R0 ; інкремент R0 (адреса молодшої цифри)

СJNE @R0, #5, REPEAT; порівнюємо молодшу цифру коду

; відривання замка

CLR L ; ввікнення лампи сигналізації

CLR Q ; ввікнення соленоїду відкривання замка

JNB Е,. $ ; чекання на відкриття дверей

; закривання замка

JB Е,. $ ; чекання на закриття дверей

SETB L ; вимкнення лампи сигналізації

SETB Q ; вимкнення соленоїду відкривання замка

SJMP REPEAT ; безумовний перехід на мітку

; сигналізація тривоги

; формування світлового сигналу тривоги

ALARM: MOV R5, #5 ; мітка тривоги і лічильник повторення сигналів

L3 : CLR L ; мітка і ввікнення лампи сигналізації

CALL ONESEC ; пауза, затримка часу на 1 секунду

SETB L ; вимкнення лампи сигналізації

; формування звукового сигналу тривоги

MOV R5, #5 ; лічильник повторення сигналів

L2: MOV R4, #200 ; мітка і інтервал 0.2 секунди

L1: MOV R3, #248 ; мітка і інтервал ≈ 1 мілісекунда

CРL S ; інверсія сигналу на гучномовець

DJNZ R3, $ ; імпульс довжиною ≈ 0,5 мілісекунди

DJNZ R4, L1 ; внутрішній цикл

DJNZ R5, L2 ; середній цикл

DJNZ R6, L3 ; зовнішній цикл

JB D,. REPEAT; перехід на початок, якщо ручку дверей

;поставлено в вихідний (закритий) стан

MOV R6, #1 ; продовження сигналу тривоги

SJMP L3 ; безумовний перехід на мітку

;

; підпрограма витримки часу на 50 мс, використовується Т/С0

DELAY: MOV ТМОD, #0001В ; налаштування лічильника Т/С0

MOV ТН0, #HIGH (NOT(5000-16))

MOV ТL0, #LOV (NOT(5000-16))

SETB TCON.4 ; ввімкнення (старт) Т/С0

DEL_W: JNB TCON.5, DEL_W ; очікування

ANL TCON, (NOT(30H) ; стоп Т/С0

RET ; повернення

; підпрограма витримки часу на 1секунду

; використовується підпрограма DELAY та регістр R7

ONESEC MOV R7, #20 ; лічильник циклів

SEC_W ACALL DELAY ; витримка на 50 мс

DJNZ R7, SEC_W ; організація циклу

RET ; повернення.