Кодовый замок зуммерного типа

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ № 1.

Тема: "Проектирование цифровых устройств на базе i8051"

Техническое задание. Разработать кодовый замок зуммерного типа, обеспечивающий доступ в помещение лаборатории только лицам, знающим код замка.

В нормальном состоянии замок закрыт и вход в лабораторию невозмо­жен. Чтобы открыть замок, необходимо один раз нажать кнопку один раз нажать кнопку. После этого МК-51 инициирует три световые вспышки длительностью по 6 сек. с паузой в 1 сек. Во время каждой вспышки необходимо определенное число раз нажать ту же кнопку.

Таким образом, с помощью одной и той же кнопки организуется ввод трех секретных чисел, являющихся ключом для отпирания замка.

Если набранный код совпадает с эталоном, хранящимся в МК-51,то за­мок открывается и загорается сигнальная лампа, разрешающая повернуть ручку и открыть дверь.

После входа в лабораторию и закрытия двери лампа гаснет и уст­ройство переходит в исходное (начальное) состояние.

При попытке открывания двери с неправильно набранным кодом вклю­чается сигнал тревоги - это перемежающийся световой и звуковой сигна­лы длительностью по одной секунде каждый.

Выключение сигнала тревоги производится после прекращения попыток открыть дверь при неправильном наборе кода, но не ранее, чем через 10 секунд после включения сигнала тревоги. После отключения сигнализации можно повторить попытку открыть дверь.

Задание 1. Представить схему устройства, инженерную интерпре­тацию задачи, граф переходов, граф-схему алгоритма.

Задание 2. Разработать прикладную программу управления кодо­вым замком на языке ассемблера МК-51.

Решение задачи приведено в [Эл. Материалы «Сташин.doc» с.31-37]

 

По результатам выполнения заданий практического занятия № 2 (Кодовый замок зуммерного типа) провести коррекцию программы, представленной в файле «Сташин.doc», с учетом заданных по вариантам параметров.

Варианты выбираются по списку студента в группе.

Группа КІ-09-1 Микроконтроллер из семейства MCS-51

Параметры Варианты
Входная частота генератора, Мгц 0.75 0.5 0.25 0.2 0.1
Таймер\счетчик
Параметры Варианты
Входная частота генератора, Мгц 15,5 14,5 13,5 12,5 9,5 8,5 7,5 6,5 5,5 4.5 3.5 2.5 1.5
Таймер\счетчик

Группа КІ-09-2 Микроконтроллер из семейства MCS-51

Параметры Варианты
Частота резонатора, Мгц 0.75
Таймер\счетчик
Параметры Варианты
Частота резонатора, Мгц 0.75 0.5 0.25 0.2 0.1
Таймер\счетчик

Каждому студенту включить в программу свою кодовую комбинацию ключа, состоящего из десятичных чисел дня и месяца рождения.

Решение задачи

[Эл. Материалы «Сташин.doc» с.31-37]

Кодовый замок зуммерного типа

Постановка задачи. Пусть требуется разработать кодовый замок зуммерного типа, обеспечивающий доступ в помещение лаборатории только лиц, знающих код замка. Устройство должно быть реализовано на МК51.

В нормальном состоянии замок закрыт, и вход в лабораторию невозможен. Чтобы открыть замок, необходимо сначала один раз нажать кнопку. После этого МК инициирует три световые вспышки длительностью по 6 с с паузой в 1 с. Во время каждой вспышки необходимо определенное число раз нажать ту же кнопку. Таким образом, с помощью единственной кнопки организуется ввод трех секретных чисел, являющихся ключом для отпирания замка. Если набранный код совпадает с эталоном, хранящимся в МК, то замок открывается и загорается си­льная лампа. В этом случае можно повернуть ручку и открыть дверь. После входа в лабораторию и закрытия двери лампа гаснет и МК переходит в начальное состояние.

При попытке открывания двери с неправильно набранным кодом МК должен включить сигнал тревоги: перемежающиеся световой и звуковой сигналы длительностью по 1 с каждый. Выключение сигнала тревоги производится после прекращения попыток открыть дверь при неправильном наборе кода, но не ранее чем через 10 с после включения, после отключения сигнализации можно повторить попытку открыть верь.

Анализ задачи. Для решения поставленной задачи необходимо наличие специальных датчиков и исполнительных механизмов. Требуются следующие датчики: кнопка для ввода чисел, датчик поворота ручки двери (дверь имеет дополнительную защелку, открываемую ручкой), датчик закрытия двери. Кроме того, необходимо наличие исполнительных механизмов: громкоговорителя или сирены для подачи звукового сигнала тревоги; сигнальной лампы и соленоида для втягивания ригеля (задвижки) кодового замка.

Разработка схемы устройства. Схема контроллера замка может быть, например, такой, как показано на рис. 8.5. Кроме МК51 потребуется RС-цепь для формирования сигнала сброса при включении питания и кварцевый резонатор 12 МГц. Если предположить, что для хранения прикладной программы используется РПП, то на вход отключения РПП (ЕА) подается уровень 1.

Связь МК51 с датчиками и исполнительными механизмами можно обеспечить через один из имеющихся портов, а незадействованные порты могут быть впоследствии использованы при расширении функциональных возможностей контроллера.

Из-за низкой нагрузочной способности выходов МК для всех исполнительных механизмов потребуются усилители мощности, показанные на рис. 8.5. Интерфейс МК построен таким образом, что для включения исполнительного механизма необходимо на соответствующем выходе МК сформировать сигнал низкого уровня. При этом в начальном состоянии МК после включения электропитания все исполнительные механизмы оказываются в пассивном состоянии. Аналогично и все датчики сообщают о контролируемом событии подачей сигнала низкого уровня на соответствующий вход МК.

 

 

Инженерная интерпретация задачи. На основе изучения поставленной задачи можно выделить пять состояний, в которых может находиться МК-устройство в процессе работы. Анализ работы МК-устройства удобно проводить с использованием аппарата автоматных графов.

Граф контроллера кодового замка показан на рис. 8.6.

 

В начальном состоянии (НАЧ) контроллер оказывается после включения питания. Все исполнительные механизмы при этом выключены, замок закрыт. В этом состоянии контроллер может находиться неопределенное время, пока не будет нажата кнопка. После нажатия кнопки (К = 0) осуществляется переход в состояние ввода и сравнения кода (ВСК). В состоянии ВСК контроллер инициирует засветку лампы и производит ввод трех контрольных цифр. Если коды не совпадут, осуществляется возврат в состояние НАЧ, иначе выполняется переход в состояние ОТКР (открывание двери). В состоянии ОТКР зажигается сигнальная лампа, срабатывает соленоид открывания замка и контроллер ожидает открывания двери.

После закрывания двери (состояние ОЖ ЗАКР) контроллер переходит в начальное состояние. Если в состояниях НАЧ и ВСК контроллер обнаружит попытку открывания двери (поворот ручки защелки, D = 0), то осуществляется переход в состояние тревожной сигнализации (СИГНАЛ).

 

Как видно, граф состояний позволяет (к сожалению, далеко не всегда) выполнить формализованное описание работы МК-устройства, которое не только помогает уточнить задачу, но и облегчает разработку схемы алгоритма ее решения.

Разработка блок-схемы алгоритма. На основе графа состояний разрабатывается недетализированная блок-схема алгоритма (рис. 8.7). Состояние НАЧ реализуется операторами 1-2, состояние ВСК-операторами 3-10, состояние ОТКР - операторами 11-13, состояние ОЖ ЗАКР - операторами 14-16, а состояние СИГНАЛ - операторами 17-24.Оператор 5 является наиболее сложным для программной реализации. Как видно, из него даже имеется второй выход для отслеживании попытки открыть дверь при неправильно набранном коде (D = О). В блок-схеме отсуствуют операторы ввода. С целью упрощения графического образа алгоритма они заменены операторами проверки. Это упрощение не искажает смысла процедур, так как в МК51 имеется возможность совмещать в одной команде операцию ввода и операцию проверки бита.

Разработка прикладной программы. Текст исходной программы работы контроллера кодового замка является основным документом для последующих процедур трансляции, отладки и загрузки объектных кодов в РПП, в которых возможно использование средств автоматизации разработки прикладного программного обеспечения.
Исходный текст программы SEZAM, составленный в полном соответствии со схемой алгоритма, приводится ниже.

Для реализации временных задержек используются две подпрограм­мы. Подпрограмма DELAY реализует задержку 50 мс с использованием Т/С0. Подпрограмма ONESEC реализует задержку длительностью в 1с.
Для большей наглядности введены символические имена линий порта 1, используемых в работе контроллера замка. После включения питания по сигналу сброса выключаются все исполнительные механизмы, в РУС заносится код 07Н, выбирается банк регистров 0 и запрещаются все прерывания. Допустим, что секретная (отпирающая) последовательность цифр образована цифрами 7, 3 и 5, коды которых задаются в тексте программы.

 

Опрос кнопки в состоянии ВСК ведется дискретно (один раз в 50 мс), тем самым устраняется дребезг ее контактов. Введенные цифры кода замка сохраняются в РПД, начиная с адреса 20Н (CODE_EX). Генерация звукового сигнала реализуется чисто программным способом, для чего используется трехкратно вложенный цикл. Внутренний цикл задает длительность импульса и паузы примерно по 500 мкс. Тем самым получается периодический сигнал с частотой около 1 кГц и скважностью 2. Следующий цикл (счетчик R4) обеспечивает временной интервал генерации 0.2 с, а внешний цикл (счетчик R5) доводит время звучания до 1 с.

Объектные коды программы должны быть записаны в РПП, начиная с нулевой ячейки.

Длина программы составляет 121 байт; это значит, что МК-устройство допускает значительное расширение своих функциональных возможностей. (Например, можно организовать через УАПП МК51 связь множества кодовых замков с центральным диспетчером для сообщения о количестве человек, находящихся в лабораториях, для экстренных сообщений о многократных попытках несанкционированного входа в лабораторию, для получения от диспетчера нового значения кода и т.п.)

 

; Определение символических имен

; определение символических имен бит порта 1

KBIT P1.2 ;кнопка

DBIT P1.3 ;датчик поворота ручки

EBIT P1.5 ;датчик закрытия двери

QBIT P1.4; соленоид замка

SBIT P1.0 ;выход на громкоговоритель

LBIT P1.1 ;выход на лампу

CODE_EXDATA 20H; начало области кодов

;Программа SEZAM

ORG 0 ; начальный адрес программы

REPEAT: JNB D, ALARM ; переход,если D=0

JB K, REPEAT ; повторить, если K=0

JNB K, ¤ ; ожидание ответа нажатия кнопки

; ввод кодов от кнопки

MOV R6, #3 ; (счетчик 1) ß 3

MOV R0, #CODE_EX ; начальный адрес области введенных кодов

CYKLE:CLR A ; сброс регистра кодов

CLR L ; включить лампу

MOV R5, #120 ; (счетчик 2) ß 120

LOOP: ACALL DELAY ; задержка 0.05 сек

JNB D, ALARM

JNB K, KZERO ; переход, если К=0

DJNZ R5, LOOP ; цикл ожидания нажатия

SJMP PAUSE ; переход, если истекли 6 секунд

KZERO: ACALL DELAY ;

JNB D, ALARM ;

JB K, ACCEPT ; переход, если кнопка отжата

DJNZ R5, KZERO ; ожидание отжатия

SJMP PAUSE ;

ACCEPT: INC A ; инкремент счетчика нажатия

SJMP LOOP ;

PAUSE: MOV @R0, A ; сохранение числа нажатий

INC R0 ;

SETB L ; выключение лампы

ACALL ONESEC ;задержка 1 сек

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

; сравнение введенных чисел с эталонными байтами

MOV R0,#CODE_EX ;

CJNE @R0,#7,REPEAT ; сравнение старших бит

INC R0 ;

CJNE @ R0,#3,REPEAT; сравнение средних бит

INC R0;

CJNE @R0,#5,REPEAT; сравнение младших бит

;открытие замка

CLR L ; включение лампы

CLR Q ; открытие замка

JNB E,¤ ; ожидание открытия двери

;закрытие замка

JB E,¤ ; ожидание закрытия двери

SETB L ; выключение лампы

SETB Q ; закрытие замка

SJMP REPEAT ; переход к началу

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

; Формирование светового сигнала

ALARM: MOV R6, #5 ; (счетчик)ß5

L3: CLR L ; включение лампы

CALL ONESEC ; пауза 1 секунда

SETB L ; выключение лампы

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

MOV R5 ,#5 ; счетчик повторений

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

L1: MOV R3, #248 ; период приблизительно равен 1 мс

CPL S ; инвертирование S

DJNZ R3,¤ ; длительность импульса примерно 0.5 мс

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

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

DJNZ R6,L3 ; внешний цикл

JB D,REPEAT ; переход к началу, если D=1

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

SJMP L3 ;

;ПОДПРОГРАММЫ

;подпрограмма задержки 50 мс, используется T\C0

; погрешность не более 2 мкс

DELAY:MOV TMOD, #0001B ; настройка T\C0

MOV TH0, #HIGH(NOT(50000-16))

MOV TH0, #LOW(NOT(50000-16))

SETB TCON.4 ; старт T\C0

DEL_W:JNB TCON.5,DEL_W ; ожидание

ANL TCON,#NOT(30H) ; стоп T\C0, сброс T\C0

RET ; возврат

; подпрограмма задержки 1 секунда

; используется подпрограмма DELAY и РЕГИСТР R7

; погрешность не боле 123 мкс

ONESEC:MOV R7,#20 ; счетчик циклов

SEC_W: ACALL DELAY ; задержка 50 мс

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

RET ; возврат