Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Борбит Курсовой проект готовый.doc
Скачиваний:
2
Добавлен:
09.09.2019
Размер:
367.1 Кб
Скачать

Jnz alarm

Опрос датчиков удара (вибрации):

mov al,Y

and al,01110000B

cmp al,00110000B

Jg alarm

Опрос датчика объёма и датчика осадков:

проверяем датчик осадков:

mov al,Z

and al,00000001B

jnz DAT2

1-я зона датчика объема:

mov al,Z

and al,00011100B

cmp al,00010100B

jg ALARM

2-я зона датчика объема:

DAT2:

mov al,Z

and al,11100000B

cmp al,01000000B

jg ALARM

Рисунок 6 – Порядок опроса датчиков

Д ля опроса датчиков накладываем маски на регистры, в которые поступают данные от датчиков, и сравниваем их с необходимым признаком (срабатывание какого-либо датчика или превышение порога чувствительности), в случае совпадения с заданным признаком система переходит в режим тревоги. Причем 1-я зона датчика объема (внешняя) отключается в случае срабатывания датчика осадков.

6. Разработка специального программного обеспечения

.386

.model flat, stdcall

option casemap: none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\user32.inc ; здесь объявление MessageBox

include \masm32\include\masm32.inc

include \masm32\include\debug.inc

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\masm32.lib

includelib \masm32\lib\debug.lib

includelib \masm32\lib\user32.lib ; здесь API-функция MessageBox

.data

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 ?

L byte "SBROS "

D byte "Protect"

G byte "ALARM "

d wFreq DWORD 100h ;частота звука в герцах (от 25h до 7FFFh )

dwDuration DWORD 3E8h ;продолжительность звука в миллисекундах (1 сек. = 3E8h)

.code

start:

;-------------- Определение дескрипторов ------------

INVOKE GetStdHandle, STD_OUTPUT_HANDLE

mov OutHandle ,eax

INVOKE GetStdHandle, STD_INPUT_HANDLE

mov InHandle,eax

;--Вывод на экран начального состония при запуске ---

BEGIN:

mov eax,000C0027h

INVOKE SetConsoleCursorPosition, OutHandle, eax ; установка курсора

INVOKE WriteConsole, OutHandle, offset L, lengthof L, offset BytesWritten,0

invoke Beep, 900h, 3E8h/6

invoke Beep, 24h, 3E8h/32

invoke Beep, 950h, 3E8h/6

invoke Beep, 24h, 3E8h/32

invoke Beep, 530h, 3E8h/6

invoke Beep, 24h, 3E8h/8

invoke Beep, 100h, 3E8h/6

invoke Beep, 24h, 3E8h/32

invoke Beep, 200h, 3E8h/6

invoke Beep, 24h, 3E8h/32

invoke Beep, 400h, 3E8h/6

invoke Beep, 24h, 3E8h/32

;---------------- Управляющий алгоритм --------------

Opros:

Call ReadSensors

;-------------Вывод на экран слова "Сброс"-----------

;------------Проверка нажата ли клавиша "О"----------

cmp R,1

jne PROTECT

;----------------------------------------------------

mov eax,000C0027h

I NVOKE SetConsoleCursorPosition, OutHandle, eax ; установка курсора

INVOKE WriteConsole, OutHandle, offset L, lengthof L, offset BytesWritten,0

mov X,0

mov Y,0

mov Z,0

invoke Beep, 930h, 3E8h/6

invoke Beep, 24h, 3E8h/16

invoke Beep, 950h, 3E8h/6

jmp Opros

;------------Вывод на экран слова "Protect"----------

PROTECT:

mov eax,000C0027h

INVOKE SetConsoleCursorPosition, OutHandle, eax ; установка курсора

INVOKE WriteConsole, OutHandle, offset D, lengthof D, offset BytesWritten,0

invoke Beep, 130h, 3E8h/6

invoke Beep, 24h, 3E8h/32

invoke Beep, 150h, 3E8h/6

invoke Beep, 24h, 3E8h/32

invoke Beep, 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,X

and al,00111110B

jnz ALARM

; проверка датчика удара P>3

mov al,Y

and al,01110000B

cmp al,00110000B

jg ALARM

; проверяем датчик осадков

mov al,Z

and al,00000001B

jnz DAT2

;проверка датчиков объёма первого уровня P>5

mov al,Z

and al,00011100B

cmp al,00010100B

jg ALARM

;проверка датчиков объёма второго уровня P>2

DAT2:

mov al,Z

and al,11100000B

cmp al,01000000B

jg ALARM

jmp Opros

ALARM:

mov eax,000C0027h

INVOKE SetConsoleCursorPosition, OutHandle, eax ; установка курсора

INVOKE WriteConsole, OutHandle, offset G, lengthof G, offset BytesWritten,0

;------------------------ СИГНАЛ----------------------

mov ecx,0

mov ecx,2h

Met:

invoke Beep, 900h , 3E8h/8

invoke Beep, 910h , 3E8h/16

invoke Beep, 920h , 3E8h/32

invoke Beep, 930h , 3E8h/64

invoke Beep, 940h , 3E8h/128

i nvoke Beep, 950h , 3E8h/264

invoke Beep, 960h , 3E8h/32

invoke Beep, 970h , 3E8h/32

invoke Beep, 980h , 3E8h/32

invoke Beep, 990h , 3E8h/32

invoke Beep, 1000h , 3E8h/32

invoke Beep, 1010h , 3E8h/32

invoke Beep, 1020h , 3E8h/32

invoke Beep, 1030h , 3E8h/32

invoke Beep, 1040h , 3E8h/32

invoke Beep, 1050h , 3E8h/32

invoke Beep, 1060h , 3E8h/32

invoke Beep, 1070h , 3E8h/32

invoke Beep, 1080h , 3E8h/32

invoke Beep, 1090h , 3E8h/32

invoke Beep, 1100h , 3E8h/32

invoke Beep, 900h , 3E8h/8

invoke Beep, 910h , 3E8h/16

invoke Beep, 920h , 3E8h/32

invoke Beep, 930h , 3E8h/64

invoke Beep, 940h , 3E8h/128

invoke Beep, 950h , 3E8h/264

invoke Beep, 960h , 3E8h/32

invoke Beep, 970h , 3E8h/32

invoke Beep, 980h , 3E8h/32

invoke Beep, 990h , 3E8h/32

invoke Beep, 1000h , 3E8h/32

invoke Beep, 1010h , 3E8h/32

invoke Beep, 1020h , 3E8h/32

invoke Beep, 1030h , 3E8h/32

invoke Beep, 1040h , 3E8h/32

invoke Beep, 1050h , 3E8h/32

invoke Beep, 1060h , 3E8h/32

invoke Beep, 1070h , 3E8h/32

invoke Beep, 1080h , 3E8h/32

invoke Beep, 1090h , 3E8h/32

invoke Beep, 1100h , 3E8h/32

invoke Beep, 900h , 3E8h/8

invoke Beep, 910h , 3E8h/16

invoke Beep, 920h , 3E8h/32

invoke Beep, 930h , 3E8h/64

i nvoke Beep, 940h , 3E8h/128

invoke Beep, 950h , 3E8h/264

invoke Beep, 960h , 3E8h/32

invoke Beep, 970h , 3E8h/32

invoke Beep, 980h , 3E8h/32

invoke Beep, 990h , 3E8h/32

invoke Beep, 1000h , 3E8h/32

invoke Beep, 1010h , 3E8h/32

invoke Beep, 1020h , 3E8h/32

invoke Beep, 1030h , 3E8h/32

invoke Beep, 1040h , 3E8h/32

invoke Beep, 1050h , 3E8h/32

invoke Beep, 1060h , 3E8h/32

invoke Beep, 1070h , 3E8h/32

invoke Beep, 1080h , 3E8h/32

invoke Beep, 1090h , 3E8h/32

invoke Beep, 1100h , 3E8h/32

invoke Beep, 900h , 3E8h/8

invoke Beep, 910h , 3E8h/16

invoke Beep, 920h , 3E8h/32

invoke Beep, 930h , 3E8h/64

invoke Beep, 940h , 3E8h/128

invoke Beep, 950h , 3E8h/264

invoke Beep, 960h , 3E8h/32

invoke Beep, 970h , 3E8h/32

invoke Beep, 980h , 3E8h/32

invoke Beep, 990h , 3E8h/32

invoke Beep, 1000h , 3E8h/32

invoke Beep, 1010h , 3E8h/32

invoke Beep, 1020h , 3E8h/32

invoke Beep, 1030h , 3E8h/32

invoke Beep, 1040h , 3E8h/32

invoke Beep, 1050h , 3E8h/32

invoke Beep, 1060h , 3E8h/32

invoke Beep, 1070h , 3E8h/32

invoke Beep, 1080h , 3E8h/32

invoke Beep, 1090h , 3E8h/32

invoke Beep, 1100h , 3E8h/32

invoke Beep, 900h , 3E8h/8

invoke Beep, 910h , 3E8h/16

invoke Beep, 920h , 3E8h/32

i nvoke Beep, 930h , 3E8h/64

invoke Beep, 940h , 3E8h/128

invoke Beep, 950h , 3E8h/264

invoke Beep, 960h , 3E8h/32

invoke Beep, 970h , 3E8h/32

invoke Beep, 980h , 3E8h/32

invoke Beep, 990h , 3E8h/32

invoke Beep, 1000h , 3E8h/32

invoke Beep, 1010h , 3E8h/32

invoke Beep, 1020h , 3E8h/32

invoke Beep, 1030h , 3E8h/32

invoke Beep, 1040h , 3E8h/32

invoke Beep, 1050h , 3E8h/32

invoke Beep, 1060h , 3E8h/32

invoke Beep, 1070h , 3E8h/32

invoke Beep, 1080h , 3E8h/32

invoke Beep, 1090h , 3E8h/32

invoke Beep, 1100h , 3E8h/32

mov R,0

jmp Opros

;------------- Ввод одного символа без эха ----------

InputChar:

INVOKE GetConsoleMode, InHandle, offset Mode ; сохранение флагов

INVOKE SetConsoleMode, InHandle, 0 ; отмена режима эхо-вывода

INVOKE ReadConsole, InHandle, offset InBuffer , 1, offset BytesRead, 0

INVOKE SetConsoleMode, InHandle, Mode ; восстановление режима

ret

;------------------- Эмулятор датчиков --------------

ReadSensors:

Call InputChar

;--------- Контактные датчики ---------

cmp InBuffer,'A'

jnz X1

o r X,00000001b

ret

X1: cmp InBuffer,'S'

jnz X2

or X,00000010b

ret

X2: cmp InBuffer,'D'

jnz X3

or X,00000100b

ret

X3: cmp InBuffer,'F'

jnz X4

or X,00001000b

ret

X4: cmp InBuffer,'G'

jnz X5

or X,00010000b

ret

X5: cmp InBuffer,'H'

jnz X6

or X,00100000b

ret

;--------- Датчики битого стекла ---------

X6: cmp InBuffer,'Z'

jnz X7

or X,01000000b

ret

X7: cmp InBuffer,'X'

jnz Y0

or X,10000000b

ret

Y0: cmp InBuffer,'C'

jnz Y1

or Y,00000001b

ret

Y1: cmp InBuffer,'V'

jnz Y2

or Y,00000010b

ret

Y2: cmp InBuffer,'B'

jnz Y3

or Y,00000100b

ret

Y 3: cmp InBuffer,'N'

jnz Y4

or Y,00001000b

ret

;--------- Датчик удара ---------

Y4: cmp InBuffer,'Q'

jnz Y5

and Y,10001111b ; Удар = 0

ret

Y5: cmp InBuffer,'W'

jnz Y6

and Y,10001111b

or Y,00010000b ; Удар = 1

ret

Y6: cmp InBuffer,'E'

jnz Y7

and Y,10001111b

or Y,00100000b ; Удар = 2

ret

Y7: cmp InBuffer,'R'

jnz Y8

and Y,10001111b

or Y,00110000b ; Удар = 3

ret

Y8: cmp InBuffer,'T'

jnz Y9

and Y,10001111b

or Y,01000000b ; Удар = 4

ret

Y9: cmp InBuffer,'Y'

jnz Y10

and Y,10001111b

or Y,01010000b ; Удар = 5

ret

Y10: cmp InBuffer,'U'

jnz Y11

and Y,10001111b

or Y,01100000b ; Удар = 6

ret

Y11: cmp InBuffer,'I'

jnz Y12

or Y,01110000b ; Удар = 7

ret

; --------- Датчик обрыва питания ---------

Y12: cmp InBuffer,'J'

jnz Z0

or Y,10000000b

ret

;--------- Датчик осадков ---------

Z0: cmp InBuffer,'K'

jnz Z1

or Z,00000001b

ret

;--------- Датчик движения ---------

Z1: cmp InBuffer,'L'

jnz Z2

or Z,00000010b

ret

;--------- Внешняя зона датчика объёма ---------

Z2: cmp InBuffer,'q'

jnz Z3

and Z,11100011b ; Уровень = 0

ret

Z3: cmp InBuffer,'w'

jnz Z4

and Z,11100011b

or Z,00000100b ; Уровень = 1

ret

Z4: cmp InBuffer,'e'

jnz Z5

and Z,11100011b

or Z,00001000b ; Уровень = 2

ret

Z5: cmp InBuffer,'r'

jnz Z6

and Z,11100011b

or Z,00001100b ; Уровень = 3

ret

Z6: cmp InBuffer,'t'

jnz Z7

and Z,11100011b

or Z,00010000b ; Уровень = 4

ret

Z7: cmp InBuffer,'y'

jnz Z8

and Z,11100011b

o r Z,00010100b ; Уровень = 5

ret

Z8: cmp InBuffer,'u'

jnz Z9

and Z,11100011b

or Z,00011000b ; Уровень = 6

ret

Z9: cmp InBuffer,'i'

jnz Z10

or Z,00011100b ; Уровень = 7

ret

;--------- Внутренняя зона датчика объёма ---------

Z10: cmp InBuffer,'1'

jnz Z11

and Z,00011111b ; Уровень = 0

ret

Z11: cmp InBuffer,'2'

jnz Z12

and Z,00011111b

or Z,00100000b ; Уровень = 1

ret

Z12: cmp InBuffer,'3'

jnz Z13

and Z,00011111b

or Z,01000000b ; Уровень = 2

ret

Z13: cmp InBuffer,'4'

jnz Z14

and Z,00011111b

or Z,01100000b ; Уровень = 3

ret

Z14: cmp InBuffer,'5'

jnz Z15

and Z,00011111b

or Z,10000000b ; Уровень = 4

ret

Z15: cmp InBuffer,'6'

jnz Z16

and Z,00011111b

or Z,10100000b ; Уровень = 5

ret

Z16: cmp InBuffer,'7'

jnz Z17

a nd Z,00011111b

or Z,11000000b ; Уровень = 6

ret

Z17: cmp InBuffer,'8'

jnz R1

or Z,11100000b ; Уровень = 7

ret

;--------- Кнопки брелка ---------

R1: cmp InBuffer,'O'

jnz R2

mov R,1 ; Откл.

ret

R2: cmp InBuffer,'P'

jnz EndSensors

mov R,2 ; Охрана.

EndSensors:

ret

end start