Типовая микропроцессорная система охраны и сигнализации
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
ествляется в порядке, описанном на рисунке 6.
mov al, Xal, 00111110B
jnz ALARM
al, Y
and al, 01110000B
cmp al, 00110000BALARM
1-я зона датчика объема:
mov al, Zal, 00011100B al, 00010100B
jg ALARM
2-я зона датчика объема:
DAT2:al, Zal, 11100000B al, 01000000B
jg ALARM
Рисунок 6 - Порядок опроса датчиков
Для опроса датчиков накладываем маски на регистры, в которые поступают данные от датчиков, и сравниваем их с необходимым признаком (срабатывание какого-либо датчика или превышение порога чувствительности), в случае совпадения с заданным признаком система переходит в режим тревоги. Причем 1-я зона датчика объема (внешняя) отключается в случае срабатывания датчика осадков.
6. Разработка специального программного обеспечения
model flat, stdcall
option casemap: none
\masm32\include\windows.inc\masm32\include\kernel32.inc\masm32\include\user32.inc; здесь объявление MessageBox\masm32\include\masm32.inc\masm32\include\debug.inc
\masm32\lib\kernel32.lib\masm32\lib\masm32.lib\masm32\lib\debug.lib\masm32\lib\user32.lib; здесь API-функция MessageBox
X byte 0; 8-пиновый разъём 1
Y byte 0; 8-пиновый разъём 2
Z byte 0; 8-пиновый разъём 3
R byte 1; кнопки брелка (сброс-1, охрана-2)
OutHandle DWORD 0; дескриптор стандартного устройства вывода
InHandle DWORD 0; дескриптор стандартного устройства ввода
BytesWritten DWORD?; число выведенных байтов
BytesRead DWORD?; число введённых байтов
InBuffer BYTE?; однобайтовый буфер ввода
Mode DWORD? ; режим работы клавиатуры
M byte?byte SBROSbyte Protectbyte ALARM DWORD 100h; частота звука в герцах (от 25h до 7FFFh)
dwDuration DWORD 3E8h; продолжительность звука в миллисекундах (1 сек. = 3E8h)
:
; - Определение дескрипторов -GetStdHandle, STD_OUTPUT_HANDLEOutHandle, eaxGetStdHandle, STD_INPUT_HANDLEInHandle, eax
; - Вывод на экран начального состония при запуске -
BEGIN:eax, 000C0027hSetConsoleCursorPosition, OutHandle, eax; установка курсораWriteConsole, OutHandle, offset L, lengthof L, offset BytesWritten, 0Beep, 900h, 3E8h/6Beep, 24h, 3E8h/32Beep, 950h, 3E8h/6Beep, 24h, 3E8h/32Beep, 530h, 3E8h/6Beep, 24h, 3E8h/8
Beep, 100h, 3E8h/6Beep, 24h, 3E8h/32Beep, 200h, 3E8h/6Beep, 24h, 3E8h/32Beep, 400h, 3E8h/6Beep, 24h, 3E8h/32
; - Управляющий алгоритм -
Opros:
Call ReadSensors
; - Вывод на экран слова Сброс-
; - Проверка нажата ли клавиша О-
cmp R, 1PROTECT
;-eax, 000C0027hSetConsoleCursorPosition, OutHandle, eax; установка курсораWriteConsole, OutHandle, offset L, lengthof L, offset BytesWritten, 0X, 0Y, 0Z, 0Beep, 930h, 3E8h/6Beep, 24h, 3E8h/16Beep, 950h, 3E8h/6
Opros
; - Вывод на экран слова Protect-
PROTECT:eax, 000C0027hSetConsoleCursorPosition, OutHandle, eax; установка курсораWriteConsole, OutHandle, offset D, lengthof D, offset BytesWritten, 0Beep, 130h, 3E8h/6Beep, 24h, 3E8h/32Beep, 150h, 3E8h/6Beep, 24h, 3E8h/32Beep, 70h, 3E8h/6
; invoke Beep, 24h, 3E8h/8
; invoke Beep, 250h, 3E8h/6
; invoke Beep, 24h, 3E8h/32
; invoke Beep, 300h, 3E8h/6
; invoke Beep, 24h, 3E8h/32
; invoke Beep, 200h, 3E8h/6
; invoke Beep, 24h, 3E8h/32
; - ОПРОС ДАТЧИКОВ-
Oprosd:
; проверка датчиков передних дверей, капота и багажника
mov al, Xal, 00111110B ALARM
; проверка датчика удара P>3
mov al, Yal, 01110000Bal, 00110000BALARM
; проверяем датчик осадковal, Zal, 00000001B DAT2
; проверка датчиков объёма первого уровня P>5
mov al, Zal, 00011100B al, 00010100B
jg ALARM
; проверка датчиков объёма второго уровня P>2
DAT2:al, Zal, 11100000Bal, 01000000BALARM
Opros
:eax, 000C0027hSetConsoleCursorPosition, OutHandle, eax; установка курсораWriteConsole, OutHandle, offset G, lengthof G, offset BytesWritten, 0
; -СИГНАЛ-
ecx, 0ecx, 2h:Beep, 900h, 3E8h/8Beep, 910h, 3E8h/16Beep, 920h, 3E8h/32Beep, 930h, 3E8h/64Beep, 940h, 3E8h/128Beep, 950h, 3E8h/264Beep, 960h, 3E8h/32Beep, 970h, 3E8h/32Beep, 980h, 3E8h/32Beep, 990h, 3E8h/32Beep, 1000h, 3E8h/32Beep, 1010h, 3E8h/32Beep, 1020h, 3E8h/32Beep, 1030h, 3E8h/32Beep, 1040h, 3E8h/32Beep, 1050h, 3E8h/32Beep, 1060h, 3E8h/32Beep, 1070h, 3E8h/32Beep, 1080h, 3E8h/32Beep, 1090h, 3E8h/32Beep, 1100h, 3E8h/32
Beep, 900h, 3E8h/8Beep, 910h, 3E8h/16Beep, 920h, 3E8h/32Beep, 930h, 3E8h/64Beep, 940h, 3E8h/128Beep, 950h, 3E8h/264Beep, 960h, 3E8h/32Beep, 970h, 3E8h/32Beep, 980h, 3E8h/32Beep, 990h, 3E8h/32Beep, 1000h, 3E8h/32Beep, 1010h, 3E8h/32Beep, 1020h, 3E8h/32Beep, 1030h, 3E8h/32Beep, 1040h, 3E8h/32Beep, 1050h, 3E8h/32Beep, 1060h, 3E8h/32Beep, 1070h, 3E8h/32Beep, 1080h, 3E8h/32Beep, 1090h, 3E8h/32Beep, 1100h, 3E8h/32
Beep, 900h, 3E8h/8Beep, 910h, 3E8h/16Beep, 920h, 3E8h/32Beep, 930h, 3E8h/64Beep, 940h, 3E8h/128Beep, 950h, 3E8h/264Beep, 960h, 3E8h/32Beep, 970h, 3E8h/32Beep, 980h, 3E8h/32Beep, 990h, 3E8h/32Beep, 1000h, 3E8h/32Beep, 1010h, 3E8h/32Beep, 1020h, 3E8h/32Beep, 1030h, 3E8h/32Beep, 1040h, 3E8h/32Beep, 1050h, 3E8h/32Beep, 1060h, 3E8h/32Beep, 1070h, 3E8h/32Beep, 1080h, 3E8h/32Beep, 1090h, 3E8h/32Beep, 1100h, 3E8h/32
Beep, 900h, 3E8h/8Beep, 910h, 3E8h/16Beep, 920h, 3E8h/32Beep, 930h, 3E8h/64Beep, 940h, 3E8h/128Beep, 950h, 3E8h/264Beep, 960h, 3E8h/32Beep, 970h, 3E8h/32Beep, 980h, 3E8h/32Beep, 990h, 3E8h/32Beep, 1000h, 3E8h/32Beep, 1010h, 3E8h/32Beep, 1020h, 3E8h/32Beep, 1030h, 3E8h/32Beep, 1040h, 3E8h/32Beep, 1050h, 3E8h/32Beep, 1060h, 3E8h/32Beep, 1070h, 3E8h/32Beep, 1080h, 3E8h/32Beep, 1090h, 3E8h/32Beep, 1100h, 3E8h/32
Beep, 900h, 3E8h/8Beep, 910h, 3E8h/16Beep, 920h, 3E8h/32Beep, 930h, 3E8h/64Beep, 940h, 3E8h/128Beep, 950h, 3E8h/264Beep, 960h, 3E8h/32Beep, 970h, 3E8h/32Beep, 980h, 3E8h/32Beep, 990h, 3E8h/32Beep, 1000h, 3E8h/32Beep, 1010h, 3E8h/32Beep, 1020h, 3E8h/32Beep, 1030h, 3E8h/32Beep, 1040h, 3E8h/32Beep, 1050h, 3E8h/32Beep, 1060h, 3E8h/32Beep, 1070h, 3E8h/32Beep, 1080h, 3E8h/32Beep, 1090h, 3E8h/32Beep, 1100h, 3E8h/32 R, 0
jmp Opros
; - Ввод одного символа без эха -
InputChar:GetConsoleMode, InHandle, offset Mode; сохранение флаговSetConsoleMode, InHandle, 0; отмена режима эхо-выводаReadConsole, InHandle, offset InBuffer, 1, offset BytesRead, 0SetConsoleMode, InHandle, Mode; восстановление режима
; - Эмулятор датчиков -
ReadSensors:InputChar
; - Контактные датчики -InBuffer, AX1X, 00000001b: cmp InBuffer, SX2X, 00000010b: cmp InBuffer, DX3X, 00000100b: cmp InBuffer, FX4X, 00001000b: cmp InBuffer, GX5X, 00010000b: cmp InBuffer, HX6X, 00100000b
; - Датчики битого стекла -
X6: cmp InBuffer, Z
jnz X7X, 01000000b: cmp InBuffer, XY0X, 10000000b: cmp InBuffer, CY1Y, 00000001b: cmp InBuffer, VY2Y, 00000010b: cmp InBuffer, BY3Y, 00000100b: cmp InBuffer, NY4Y, 00001000b
; - Датчик удара -: cmp InBuffer, QY5Y, 10001111b; Удар = 0: cmp InBuffer, WY6Y, 10001111bY, 00010000b; Удар = 1: cmp InBuffer, EY7Y, 10001111bY, 00100000b; Удар = 2: cmp InBuffer, RY8Y, 10001111bY, 00110000b; Удар = 3: cmp InBuffer, TY9Y, 10001111bY, 01000000b; Удар = 4: cmp InBuffer, YY10Y, 10001111bY, 01010000b; Удар = 5: cmp InBuffer, UY11Y,