Принцип действия данного СКУД прост: у входа на предприятие или в любое другое подлежащее контролю помещение устанавливается считыватели - специальные устройства, считывающие голосовую команду и передающие его в систему для проверки. На основе произведённого сравнения система принимает одно из двух решений: открывает проход или оставить его закрытым. СКУД запоминает неудачные попытки входа и после третей предлагает сотруднику ввести код, если код был введён корректно, то система открывает проход.
Подробное описание работы данной СКУД:
МП опрашивает порт С ППИ, чтобы узнать нажата ли кнопка. После нажатия одной из кнопок устройства (внутри или снаружи), сигнал с ППИ поступает в МП, МП обрабатывает поступивший ему код. Если кнопка была нажата из нутрии охраняемого помещения, МП подаст сигнал на порт С ППИ означающий открытие двери.
Если кнопка была нажата снаружи, то МП проверяет наличие в памяти эталонной записи. Если её нет, то он посылает серию сигналов на ППИ для её записи, а именно: на вход «Пуск» АЦП поступает с порта С сигнал, АЦП начинает преобразовывать напряжение поступающие на него с усилителя напряжения микрофона. После преобразования напряжения АЦП вырабатывает сигнал «Готов», который поступает на порт С ППИ. МП проверяет наличие сигнала «Готов» с порта С и если он есть, то поступает сигнал «чтение» , который попадает на вход АЦП. АЦП передает преобразованные данные в порт А ППИ. Данное число отправляется в МП, а из него в память. Процедура считывания повторяется 255 раз.
Если эталонная дорожка записана, то МП подаёт серию сигналов для записи
проверяемой дорожки способом описанным выше.
ПОСТРОЕНИЕ АЛГОРИТМА РАБОТЫ СКУД
Блок-схема
- распространенный тип схем (графических моделей
<https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C>),
описывающих алгоритмы
<https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC>
или процессы, в которых отдельные шаги изображаются в виде блоков различной
формы, соединенных между собой линиями, указывающими направление
последовательности.
Таблица 1. Основные элементы блок-схемы
|
Наименование |
Обозначение |
Функция |
|
Блок начало-конец (пуск-остановка) |
|
|
|
Блок действия |
|
|
|
Логический блок (блок условия) |
|
|
|
Предопределённый процесс |
|
|
|
Данные (ввод-вывод) |
|
|
|
Граница цикла |
|
|
|
Соединитель |
|
|
|
Комментарий |
|
|
В блок-схеме к своей программе я использовал блок начала/конца, действия
и логический.
Рисунок 8 - блок-схема программы СКУД
РАЗРАБОТКА ПРОГРАММЫ РАБОТЫ СКУД
Язык ассемблера - машинно-ориентированный язык низкого уровня <https://ru.wikipedia.org/wiki/%D0%9D%D0%B8%D0%B7%D0%BA%D0%BE%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B2%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F> с командами, обычно соответствующими командам машины <https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8>. Это система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ <https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0> и памяти, а также задавать удобные для себя схемы адресации <https://ru.wikipedia.org/wiki/%D0%90%D0%B4%D1%80%D0%B5%D1%81%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8> (например, индексную или косвенную). Кроме того, он позволяет использовать различные системы счисления (например, десятичную <https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%81%D1%8F%D1%82%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F> или шестнадцатеричную <https://ru.wikipedia.org/wiki/%D0%A8%D0%B5%D1%81%D1%82%D0%BD%D0%B0%D0%B4%D1%86%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F>) для представления числовых констант и даёт возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться (по именам, а не по адресам) из других частей программы (например, для передачи управления). Ассемблер создаётся при производстве МП, то есть для каждого МП свой язык.
Для микропроцессора КР580ВМ80А базовая система команд содержит 78 различных кодов, с модификацией это число возрастает до 240. Все команды МП делятся на 5 групп:
1. Команды пересылки и загрузки данных. По этим командам осуществляется пересылка данных между регистрами МП, а так же между ячейками памяти (ЯП). Кроме того, в эту группу входят команды позволяющие загрузить данные как внутрь МП так и в ЯП из вне.
. Арифметические команды. К ним относятся команды сложения, вычитания, увеличения или уменьшения содержимого регистров или ЯП.
. Логические команды - это многоразрядная конъюнкция, дизъюнкция, логические сдвиги и т. д.
. Команды передачи управления. Эти команды обеспечивают организацию разрывающихся или циклических процессов.
. Команды ввода/вывода, управления стеком и другие вспомогательные команды.
Микропроцессор (МП) КР580ВМ80А с точки зрения программиста может быть представлен в виде модели, изображенной на рисунке 9. Модель включает перечень программно-доступных регистров микропроцессора:
шесть 8-битных регистров общего назначения B, C, D, E, H и L, которые при выполнении некоторых команд объединяются в 16-битные регистровые пары, обозначаемые по имени старшего регистра B, D и H;
основной рабочий регистр микропроцессора - 8-битный аккумулятор A, используемый по умолчанию во многих командах микропроцессора;
регистр признаков F, в
котором при выполнении команд обработки данных в зависимости от полученного
результата формируется 5 признаков:) S (Sign, M) - признак
знака, устанавливаемый в 1 в случае отрицательного результата и сбрасываемый в
0 при положительном результате;) Z (Zero) - признак нуля,
устанавливаемый в 1 в случае нулевого результата и сбрасываемый в 0 при
ненулевом результате;) CY (Carry) - признак переноса (CY=1, если был
перенос из старшего разряда результата при сложении или заем в старший разряд
при вычитании, иначе CY=0);) P (Parity) - признак четности,
устанавливаемый в 1 в случае четного числа
единицврезультатеисбрасываемыйв0принечетномчислеединиц;) AC (Auxiliary
carry)- признак полупереноса, т.е. переноса из младшей тетрады результата в
старшую, используемый при обработке чисел в двоично-десятичном коде.
Рисунок 9 - Модель микропроцессора КР580ВМ80А
Микропроцессор КР580ВМ80А имеет четыре различных способа адресации данных, хранимых в памяти или в регистрах:
- Прямая адресация. Второй и третий байты команды содержат адрес данных в памяти.
- Регистровая адресация. В коде команды адресуется регистр или пара регистров, в которых хранятся данные.
- Косвенно-регистровая адресация. Команда выбирает регистровую пару, в которой содержится адрес ячейки памяти.
- Непосредственная адресация. Данные, которые могут быть 8- или 16- битными, представлены в теле команды - во втором и третьем байтах.
Для того, чтобы программы
выполнялась быстрее и занимала меньше места, рекомендуется использовать
косвенно-регистровою адресацию.
ВЫБОР И ОПИСАНИЕ ЭМУЛЯТОРА
Изучение структуры и принципов работы эмулятора (I80)
Методические указания по работе с эмулятором.
. Общий вид
После запуска эмулятора на экране монитора появляется главная страница эмулятора, представленная на рисунке 1.
1) Область программы.
2) Регистры, тут можно посмотреть содержимое регистров.
3) Регистр флагов.
4) Область данных, здесь мы записываем исходные данные и можем посмотреть содержимое ЯП.
5) Стек.
Рисунок 10 - Главная страница
. Ввод программы в эмулятор
В данном эмуляторе, как и в предыдущем ввод программы (мнемоники) осуществляется путем «клика»
Ввод программы можно условно разделить на несколько этапов:
) Вводим код команды
(мнемонику) в третий столбик, в ячейку «NOP» .
Рисунок 11-
Ввод команды
2)
Таким образом последовательно вводим программу в эмулятор.
Рисунок 12 -
Ввод программы
) Для ввода исходных данных используем область данных, выбрав
нужный нам адрес, вводим содержимое
Рисунок 13 - Ввод содержимого в ячейки памяти
) После ввода программы и исходных данных проверяем содержимое
регистров (чтобы не использовать данные из прошлых задач)
Рисунок 14 - Содержимое регистров
) Начинаем выполнение программы, это можно сделать двумя
способами: обычным запуском (F9)
или пошагам (F8).
ОТЛАДКА ПРОГРАММЫ СКУД
Во время учебной практики по Микропроцессорным системам был проведен анализ имеющихся эмуляторов. На основе этого анализа был выбран эмулятор i80.
Данный эмулятор был выбран потому, что в нём есть возможность вводить команды в мнемонике, переключаться между ячейками памяти с помощью стрелок и просматривать содержимое регистров и стека в любой момент. Перечисленные выше качества позволяют легко и быстро отладить программы и исправить ошибки в её коде.
Во время отладки программы были выявлены и устранены незначительные
ошибки в коде программы.
ЗАКЛЮЧЕНИЕ
В результате проделанной работы была разработана система контроля и управлением доступом рассчитанная на контроль одной двери с проверкой биометрического параметра: голос. Максимальное время выполнения программы 423614,5 мкс, задействовано ячеек памяти 0400. СКУД от источника напряжения 5 В.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
микропроцессорный управление эмулятор сигнализация
1. Нестеров П. В. Микропроцессоры. Архитектура и ее оценка. М.: Высшая школа, 1984. 104 с.
. Уокерли Дж. Архитектура и программирование микроЭВМ: В 2-х кн. / Пер. с англ. М.: Мир, 1984. Кн. 1. 486 с. Кн. 2. 359 с.
. Хосе М. Ангуло. Микропроцессоры: Архитектура, программирование и проектирование систем. Тбилиси: Ганатлеба, 1989.
. МикроЭВМ / Пер. с англ., Под ред. А. Дирксена. М.: Энергоиздат, 1982. 328 с.
. Хоровиц П., Хилл У. Искусство схемотехники. М.: Мир,1983. Т. 2. 590 с.
. Вуд А. Микропроцессоры в вопросах и ответах / Пер. с англ. М.: Энергоатомиздат, 1985. 185 с.
. Басманов А. С., Широков Ю. Ф. Микропроцессоры и однокристальные микроЭВМ: Номенклатура и функциональные возможности / Под ред. В. Г. Домрачева. М.: Энергоатомиздат, 1988. 127 с.
. Мячев А. А., Иванов В. В. Интерфейсы вычислительных систем на базе мини- и микроЭВМ / Под ред. Наумова Б. Н. М.: Радио и связь, 1986.
. Интерфейсы систем обработки данных: Справочник / Под ред. А. А. Мячева. М.: Радио и связь, 1989.
. Байцер Б. Архитектура вычислительных комплексов. М.: Мир, 1974. Т.1,2.
. Водовозов В. М., Осипов В. О., Пожидаев А. К. Практическое введе-ние в информационные системы / ГЭТУ. СПб, 1995.
Интернет ресурсы:
1. <https://ru.wikipedia.org>
. <#"804115.files/image023.gif">
Приложение Б
Текст программы системы контроля и управления доступом
|
Адрес я.п. Н |
|
Мнемоника |
Операнд |
Комментарий |
|
0100 (m1) 0101 |
DB 01 |
IN |
01 |
Загрузка содержимого порта 01 (С) |
|
0102 0103 0104 |
CA 00 01 |
JZ |
0100 |
Проверка флага Z (нуля), если = 1, то переход по адресу 0100 |
|
0105 0106 |
E6 01 |
ANI |
01 |
Логическое И над содержимым аккумулятора и 01 |
|
0107 0108 0109 |
F2 |
JP |
011E (M2) |
Проверка флага Р (чётности), если = 1, то переход по адресу 011Е |
|
010A 010B |
3E 1C |
MVI |
A,1C |
Загрузить в аккумулятор 1С |
|
010C 010D |
D3 01 |
OUT |
01 |
Отправить содержимое аккумулятора в порт 01 (С) |
|
010E 010F 0110 |
21 FF FF |
LXI |
H,FFFF |
Загрузить в регистровую пару H FFFF |
|
0111 (M3) |
25 |
DCR |
H |
Уменьшить содержимое регистровой пары Н на 1 |
|
0112 0113 0114 |
CA |
JZ |
0118 (M3.1) |
Проверка флага Z (нуля), если = 1, то переход по адресу 0118 |
|
0115 0116 0117 |
C3 11 01 |
JMP |
0111 (M3) |
Безусловный переход по адресу 0111 |
|
0118 (M3.1) 0118 |
3E 00 |
MVI |
00 |
Загрузить в аккумулятор 10 |
|
0119 011A |
D3 01 |
OUT |
01 |
Отправить содержимое аккумулятора в порт 01 (С) |
|
011B 011C 011D |
C3 00 01 |
JMP |
0100 (M1) |
Безусловный переход по адресу 0100 |
|
011E (M2) 011F |
3E 00 |
MVI |
B,00 |
Загрузить в регистр В 00 |
|
0120 0121 0122 |
11 00 04 |
LXI |
D,0200 |
Загрузить в регистровую пару D 0400 |
|
0123 0124 |
3E 64 |
MVI |
C,64 |
Загрузить в регистр В 64 |
|
0125 (M5) |
1A |
LDAX |
D |
Содержимое ЯП, адрес которой хранится в регистровой паре D загрузить в аккумулятор |
|
0126 |
80 |
ADD |
B |
Сложить содержимое аккумулятора с содержимым регистра В |
|
0127 |
47 |
MOV |
B,A |
Содержимое аккумулятора отправить в регистр В |
|
0128 |
13 |
INX |
D |
Содержимое регистровой пары D увеличить на 1 |
|
0129 |
0D |
DCR |
C |
Уменьшить содержимое регистра С на 1 |
|
012A 012B 012C |
CA 30 01 |
JZ |
0130 (M4) |
Проверка флага Z (нуля), если = 1, то переход по адресу 0130 |
|
012D 012E 012F |
C3 25 01 |
JMP |
0125 (M5) |
Безусловный переход по адресу 0125 |
|
0130 (M4) |
78 |
MOV |
A,B |
Содержимое регистра В отправить в аккумулятор |
|
0131 0132 |
F6 00 |
ORI |
00 |
Логическое ИЛИ над содержимым аккумулятора и 00 |
|
0133 0134 0135 |
CA 9D 01 |
JZ |
019D (M6) |
Проверка флага Z (нуля), если = 1, то переход по адресу 019D |
|
0136 |
3E |
MVI |
B,FF |
Загрузить в регистр В FF |
|
0137 0138 0139 |
11 00 05 |
LXI |
D,0300 |
Загрузить в регистровую пару D 0500 |
|
013A (M9) |
3E |
MVI |
A,38 |
Загрузить в аккумулятор 38 |
|
013B 013C |
D3 01 |
OUT |
01 |
Отправить содержимое аккумулятора в порт 01 (С) |
|
013D (M7) 013E |
DB 01 |
IN |
01 |
Загрузка содержимого порта 01 (С) |
|
013F 0140 |
D6 58 |
58 |
Вычесть из аккумулятора 58 |
|
|
0141 0142 0143 |
CA 3D 01 |
JZ |
013D (M7) |
Проверка флага Z (нуля), если = 1, то переход по адресу 013D |
|
0144 0145 |
DB 00 |
IN |
00 |
Загрузка содержимого порта 00 (А) |
|
0146 |
12 |
STAX |
D |
Содержимое аккумулятора отправить в ЯП, адрес которой хранится в регистровой паре D |
|
0147 |
13 |
INX |
D |
Содержимое регистровой пары D увеличить на 1 |
|
0148 |
05 |
DCR |
B |
Уменьшить содержимое регистра В на 1 |
|
0149 014A 014B |
CA 4F 01 |
JZ |
014F (M8) |
Проверка флага Z (нуля), если = 1, то переход по адресу 014F |
|
014C 014D 014E |
C3 3A 01 |
JMP |
013A (M9) |
Безусловный переход по адресу 013A |
|
014F (M8) 0150 |
3E FF |
MVI |
B,FF |
Загрузить в регистр В FF |
|
0151 0152 0153 |
11 00 04 |
LXI |
D,0200 |
Загрузить в регистровую пару D 0400 |
|
0154 (N4) |
1A |
LDAX |
D |
Содержимое ЯП, адрес которой хранится в регистровой паре D загрузить в аккумулятор |
|
0155 |
67 |
MOV |
H,A |
Содержимое аккумулятора отправить в регистр Н |
|
0156 |
14 |
INR |
D |
Содержимое регистра D увеличить на 1 |
|
0157 |
1A |
LDAX |
D |
Содержимое ЯП, адрес которой хранится в регистровой паре D загрузить в аккумулятор |
|
0158 |
1C |
INR |
E |
Содержимое регистра Е увеличить на 1 |
|
0159 |
15 |
DCR |
D |
Уменьшить содержимое регистра D на 1 |
|
015A |
94 |
SUB |
H |
Вычесть из аккумулятора содержимое регистра Н |
|
015B 015C 015D |
C3 5F 01 |
JMP |
015F (N1) |
Безусловный переход по адресу 015F |
|
015E (N2) |
2C |
INR |
L |
Содержимое регистра L увеличить на 1 |
|
015F (N1) 0160 0161 |
CA 5E 01 |
JZ |
015E (N2) |
Проверка флага Z (нуля), если = 1, то переход по адресу 015E |
|
0162 |
05 |
DCR |
B |
Уменьшить содержимое регистра В на 1 |
|
0163 0164 0165 |
CA 69 01 |
JZ |
0169 (N3) |
Проверка флага Z (нуля), если = 1, то переход по адресу 0169 |
|
0166 0167 0168 |
C3 54 01 |
JMP |
0154 (N4) |
Безусловный переход по адресу 0154 |
|
0169 (N3) |
7D |
MOV |
A,L |
Содержимое регистра L отправить в аккумулятор |
|
016A 016B |
D6 81 |
SUI |
81 |
Вычесть из аккумулятора 81 |
|
016C 016D 016E |
C3 86 01 |
JMP |
0186 (N4.1) |
Безусловный переход по адресу 0186 |
|
016F (N7) 0170 0171 |
3E 10 |
MVI |
А,10 |
Загрузить в аккумулятор 10 |
|
0172 0173 |
D3 01 |
OUT |
01 |
Отправить содержимое аккумулятора в порт 01 (С) |
|
0174 0175 0176 |
21 FF FF |
LXI |
H,FFFF |
Загрузить в регистровую пару H FFFF |
|
0177 (N6) |
2B |
DCX |
H |
Уменьшить содержимое регистровой пары Н на 1 |
|
0178 0179 017A |
CA 80 01 |
JZ |
0179 (N5) |
Проверка флага Z (нуля), если = 1, то переход по адресу 0179 |
|
017B 017C 017D |
C3 77 01 |
JMP |
0177 (N6) |
Безусловный переход по адресу 0177 |
|
0179 (N5) 0180 |
3E 00 |
MVI |
00 |
Загрузить в аккумулятор 00 |
|
0181 0182 |
D3 01 |
OUT |
O1 |
Отправить содержимое аккумулятора в порт 01 (С) |
|
0183 0184 0185 |
C3 00 01 |
JMP |
0100 (M1) |
Безусловный переход по адресу 0100 |
|
0186 (N4.1) 0187 0188 |
FA 6F 01 |
JM |
016F (N7) |
Проверка флага S (переноса), если = 1, то переход по адресу 0196 |
|
0189 |
3E |
MVI |
A,1C |
Загрузить в аккумулятор 1С |
|
018A 018B |
D3 01 |
OUT |
01 |
Отправить содержимое аккумулятора в порт 01 (С) |
|
018C 018D 018E |
21 FF FF |
LXI |
H,FFFF |
Загрузить в регистровую пару H FFFF |
|
018F (N9) |
2B |
DCX |
H |
Уменьшить содержимое регистровой пары Н на 1 |
|
0190 0191 0192 |
CA |
JZ |
0196 (N8) |
Проверка флага Z (нуля), если = 1, то переход по адресу 0196 |
|
0193 0194 0195 |
C3 90 01 |
JMP |
018F (N9) |
Безусловный переход по адресу 018F |
|
0196 (N8) 0197 |
3E 00 |
MVI |
A,00 |
Загрузить в аккумулятор 00 |
|
0198 0199 |
D3 01 |
OUT |
01 |
Отправить содержимое аккумулятора в порт 01 (С) |
|
019A 019B 019C |
C3 00 01 |
JMP |
0100 (M1) |
Безусловный переход по адресу 0100 |
|
019D (M6) 019E |
3E FF |
MVI |
B,FF |
Загрузить в регистр В FF |
|
019F 01AF 01A0 |
11 00 01 |
LXI |
D,0200 |
Загрузить в регистровую пару D 0400 |
|
01A1 (M9.2) |
3E |
MVI |
A,38 |
Загрузить в аккумулятор 38 |
|
01A2 01A3 |
D3 01 |
OUT |
01 |
Отправить содержимое аккумулятора в порт 01 (С) |
|
01A4 (M9.1) 01A5 |
DB 01 |
IN |
01 |
Загрузка содержимого порта 01 (С) |
|
01A6 01A7 |
D6 58 |
SUI |
58 |
Вычесть из аккумулятора 58 |
|
01A8 01A9 01AA |
CA A4 01 |
JZ |
01A4 (M9.1) |
Проверка флага Z (нуля), если = 1, то переход по адресу 01A4 |
|
01AB 01AC |
DB 00 |
IN |
00 |
Загрузка содержимого порта 00 (А) |
|
01AD |
12 |
STAX |
D |
Содержимое аккумулятора отправить в ЯП, адрес которой хранится в регистровой паре D |
|
01AE |
13 |
INX |
D |
Содержимое регистровой пары D увеличить на 1 |
|
01AF |
05 |
DCR |
B |
Уменьшить содержимое регистра В на 1 |
|
|
CA |
JZ |
0100 (M1) |
Проверка флага Z (нуля), если = 1, то переход по адресу 0100 |
|
|
C3 00 01 |
JMP |
01A1 (M9.2) |
Безусловный переход по адресу 01А1 |