. Разработка специального программного обеспечения
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 «SBROS»byte «Protect»byte «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
: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, 'A'X1X, 00000001b: cmp InBuffer, 'S'X2X, 00000010b: cmp InBuffer, 'D'X3X, 00000100b: cmp InBuffer, 'F'X4X, 00001000b: cmp InBuffer, 'G'X5X, 00010000b: cmp InBuffer, 'H'X6X, 00100000b
; - Датчики битого стекла -
X6: cmp InBuffer, 'Z'
jnz X7X, 01000000b: cmp InBuffer, 'X'Y0X, 10000000b: cmp InBuffer, 'C'Y1Y, 00000001b: cmp InBuffer, 'V'Y2Y, 00000010b: cmp InBuffer, 'B'Y3Y, 00000100b: cmp InBuffer, 'N'Y4Y, 00001000b
; - Датчик удара -: cmp InBuffer, 'Q'Y5Y, 10001111b; Удар = 0: cmp InBuffer, 'W'Y6Y, 10001111bY, 00010000b; Удар = 1: cmp InBuffer, 'E'Y7Y, 10001111bY, 00100000b; Удар = 2: cmp InBuffer, 'R'Y8Y, 10001111bY, 00110000b; Удар = 3: cmp InBuffer, 'T'Y9Y, 10001111bY, 01000000b; Удар = 4: cmp InBuffer, 'Y'Y10Y, 10001111bY, 01010000b; Удар = 5: cmp InBuffer, 'U'Y11Y, 10001111bY, 01100000b; Удар = 6: cmp InBuffer, 'I'Y12 Y, 01110000b; Удар = 7
ret
; - Датчик обрыва питания -
Y12: cmp InBuffer, 'J'Z0Y, 10000000b
; - Датчик осадков -: cmp InBuffer, 'K'Z1Z, 00000001b
; - Датчик движения -: cmp InBuffer, 'L'Z2Z, 00000010b
; - Внешняя зона датчика объёма -: cmp InBuffer, 'q' Z3
and Z, 11100011b; Уровень = 0
ret: cmp InBuffer, 'w'Z4Z, 11100011bZ, 00000100b; Уровень = 1: cmp InBuffer, 'e'Z5Z, 11100011bZ, 00001000b; Уровень = 2: cmp InBuffer, 'r'Z6Z, 11100011bZ, 00001100b; Уровень = 3: cmp InBuffer, 't'Z7Z, 11100011bZ, 00010000b; Уровень = 4: cmp InBuffer, 'y'Z8Z, 11100011bZ, 00010100b; Уровень = 5: cmp InBuffer, 'u'Z9Z, 11100011bZ, 00011000b; Уровень = 6: cmp InBuffer, 'i'Z10 Z, 00011100b; Уровень = 7
ret
; - Внутренняя зона датчика объёма -
Z10: cmp InBuffer, '1'Z11Z, 00011111b; Уровень = 0: cmp InBuffer, '2'Z12Z, 00011111bZ, 00100000b; Уровень = 1: cmp InBuffer, '3'Z13Z, 00011111bZ, 01000000b; Уровень = 2: cmp InBuffer, '4'Z14Z, 00011111bZ, 01100000b; Уровень = 3: cmp InBuffer, '5'Z15Z, 00011111bZ, 10000000b; Уровень = 4: cmp InBuffer, '6'Z16Z, 00011111bZ, 10100000b; Уровень = 5: cmp InBuffer, '7'Z17Z, 00011111bZ, 11000000b; Уровень = 6: cmp InBuffer, '8'R1 Z, 11100000b; Уровень = 7
ret
; - Кнопки брелка -
R1: cmp InBuffer, 'O'R2R, 1; Откл.: cmp InBuffer, 'P'EndSensorsR, 2; Охрана.:
ret
end start
Заключение
При выполнении курсового проекта на тему «Типовая микропроцессорная система охраны и сигнализации» была разработана МПС охраны и сигнализации на основе типового набора датчиков и исполнительных устройств в соответствии с выданным заданием. Особенностью управляющей программы является высокое быстродействие и малый размер занимаемой памяти. Необходимо подчеркнуть, что программа реализована с помощью 32 разрядной версии ассемблера в среде ассемблера MASM32.
Список литературы
микропроцессорный интерфейс сигнализация программа
1.Андрианов В.И. Охранные устройства для автомобилей. Справочное пособие: / Андрианов В.И., Соколов А.В. - М.: ООО «Фирма «Издательство АСТ»; СПб.: ООО «Издательство Полигон», 2002. - 320 с.
2.Асмаков С.В., Пахомов С.О. Железо 2009. КомпьютерПресс рекомендует. - СПб.: Питер, 2009. - 432 с.: ил.
.Ирвин Кип. Язык ассемблера для процессоров Intel, 4-е издание.: Пер с англ. - М.: Издательский дом «Вильямс», 2005. - 912 с.: ил. - Парал. тит. англ.
.Корнеев В.В., Киселёв А.В. Современные микропроцессоры. - 3-е изд., перераб. и доп. - СПб.: БХВ-Перербург, 2003. - 448 с.: ил.
.Микропроцессорные системы: Учебное пособие для вузов по напр. «Информатика и вычислительная техника». / Под ред. Д.В. Пузанкова - СПб.: Политехника, 2002. - 935 с.
.Организация ЭВМ. 5-е изд./ К. Хамахер, З. Вранешич, С. Заки. - СПб.: Питер; Киев: Издательская группа ИРМб 2003. - 848 с.: ил. - (Серия «Классика computer science»).
.Пухальский Г.И. Проектирование микропроцессорных систем: Учебное пособие для вузов. - СПб.: Политехника, 2001. - 554 с.