BEGIN: JMP START; переход к программе START
USING 0; выбор 0 банка регистров
ORG 30H; директива размещения программы с адреса; 30H
SEG_FLAG SEGMENT DATA BITADDRESSABLE; объявляем сегмент перемещаемый; внутрь битовой адресуемой памяти; данных
SEG_PROG SEGMENT CODE; объявляем сегмент перемещаемый в; пространство кода программы
OVER_K SET R5; назначаем символические
OVER_D SET R6; имена регистрам
OVER_B SET R7; R5,R6,R7
RSEG SEG_FLAG; выбор сегмента
FLAGS: DS 1; однобайтовая переменная (FLAGS)
FDOOR BIT FLAGS.0; флаг игнорирования (да(1) / нет(0)) датчика дверей
FBOX BIT FLAGS.1; -------------------- багажника
FKAPOT BIT FLAGS.2; ---------------------------------- капота
FMODE2 BIT FLAGS.3; флаг режима 2 (да(1)/нет(0))
FALARM BIT FLAGS.4; флаг попытки вторжения (да(1)/нет(0))
RSEG SEG_PROG; выбор сегмента
START:; установка начальных значений параметров
MOV FLAGS,#00H; сброс флагов
MOV P0,#00H; установка режимов портов
MOV P2,#0FFH;
MOV R0,#00H; обнуление регистров
MOV R1,#00H;
MOV R2,#00H;
MOV R3,#00H;
MOV R4,#00H;
MOV OVER_B,#00H;
MOV OVER_K,#00H;
MOV OVER_D,#00H;
CLR A; обнуление аккумулятора
WAIT: JB P2.0, WAIT; ждем сигнала постановки на охрану
JNB P2.4, SIGNAL3; переходим на метку SIGNAL3,
JNB P2.5, SIGNAL3; если открыты двери, капот
JNB P2.6, SIGNAL3; или багажник
JMP BLOCKING; переход к п/п блокировки
SIGNAL3: MOV R0,#3; программа
LOOP3: CALL SIGNAL1; реализации трех
CALL DELAY; сигналов сиреной
DJNZ R0, LOOP3; с последующим переходом
JMP BEGIN; в начало
SIGNAL5: MOV R0,#5; программа
LOOP5: CALL SIGNAL1; реализации пяти
CALL DELAY; сигналов сиреной
DJNZ R0, LOOP5; с последующим переходом
JMP GAUGE_L; к опросу датчиков GAUGE_L
BLOCKING: SETB P0.0; блокировка стартера
SETB P0.1; закрытие дверей
SETB P0.2; закрытие багажника
CALL SIGNAL11; сигнал сирены и габаритов - СИСТЕМА НА ОХРАНЕ!
GAUGE_L: JNB P2.2, SIGNAL5; 5 сигналов сирены, если сработал датчик; слабого удара
GAUGE_S: JNB P2.3, LABELB; переход на метку LABELB, если; сработал датчик сильного удара
|
IGN_BOX: JB FBOX, IGN_KAPOT; переход к IGN_KAPOT, если датчик; багажника игнорируется
BOX: JB P2.5, IGN_KAPOT; переход к IGN_KAPOT, если датчик; багажника не срабатывает
INC OVER_B; если датчик багажника сработал, то +1 к; константе хранящей число срабатываний; этого датчика
JMP LABELB; переход на метку LABELB, включающую; сирену
IGN_KAPOT: JB FKAPOT, IGN_DOOR; 8 ниже следующих строк выполняют; аналогичную функцию,
KAPOT: JB P2.4, IGN_DOOR; как при опросе датчика багажника (выше),
INC OVER_K; только для датчиков капота и дверей!
JMP LABELB;
IGN_DOOR: JB FDOOR, CHECK_ALARM;
DOOR: JB P2.6, CHECK_ALARM;
INC OVER_D;
JMP LABELB;
CHECK_ALARM: JB FALARM, CHECK_MODE2; проверка на вторжение, если да, то; переходим на метку CHECK_MODE2
LIGHT_DIOD: MOV R4,#5; программа обеспечивающая мигание светодиода
D_CYCLE: CALL DELAY; мигание светодиода примерно
DJNZ R4, D_CYCLE; с интервалом в 1 секунду
CPL P0.5;
CHECK_MODE2: JNB P2.1, LABELA; если происходит постановка в режим 2, то; переходим на метку LABELA
CLR FMODE2; сброс флага режима 2
MOV OVER_B,#00H; и констант
MOV OVER_K,#00H;
MOV OVER_D,#00H;
SETB P0.2; закрытие багажника на случай если включался; режим 2
JNB P2.0, GAUGE_L; если система не выключается, то переход к; опросу датчиков
JNB FALARM ,EXIT; если не было вторжения в процессе работы,; то переход на EXIT
CALL SIGNAL44; если было вторжение, то 4 сигнала сирены и; габаритов
ANTIBLOKING: CLR P0.0; разблокирование стартера
CLR P0.1; открытие дверей
CLR P0.2; открытие багажника
JMP BEGIN; переход в начало
LABELA: JB FMODE2, IGN_KAPOT; если режим 2 уже установлен, то переход; на IGN_KAPOT, если нет, то:
SETB FMODE2; уст. флага режима 2
CALL SIGNAL22; 2 сигнала сирены и габаритов при постановке в; режим 2
CALL DELAY;
CALL SIGNAL11;
CLR P0.2; открытие багажника
JMP IGN_KAPOT; переход к проверке датчиков
LABELB: SETB P0.3; включение сирены
|
MOV R0,#3; загрузка регистров для
LOOP1: MOV R4,#100; цикла в 60 секунд
LOOP0: JB P2.0, STOP_PULT; переход если сирена отключается с пульта
JB P0.6, STOP_VALET; переход если сирена отключается с Valet`а
CALL DELAY; задержка 0.2 секунды
CPL P0.4; мигание габаритов
DJNZ R4, LOOP0; внутренний цикл
DJNZ R0, LOOP1; внешний цикл
JMP SHUTDOWN; пропускаем 2 строки
STOP_PULT: CLR P2.0; сброс отключения с пульта
STOP_VALET: CLR P0.6; сброс отключения с Valet`а
SHUTDOWN: CLR P0.3; выключение сирены
CLR P0.4; выключение габаритов
CJNE OVER_B,#5, SET_FKAPOT; установка флагов для
SETB FBOX; игнорирования датчиков
SET_FKAPOT: CJNE OVER_K,#5, SET_FDOOR; если воздействие было
SETB FKAPOT; 5 раз
SET_FDOOR: CJNE OVER_D,#5, SET_FALARM;
SETB FDOOR;
SET_FALARM: SETB FALARM; запомнили БЫЛА ПОПЫТКА ВТОРЖЕНИЯ!!!
SETB P0.5; включаем светодиод на постоянное свечение
JNB P2.1, TO_IGN_KAPOT; переход если режим 2 на TO_IGN_KAPOT
JMP GAUGE_S; переход к опросу датчиков GAUGE_S
TO_IGN_KAPOT: JMP IGN_KAPOT; переход на IGN_KAPOT
SIGNAL11: SETB P0.3; вкл. сирены
SETB P0.4; вкл. габаритов
CALL DELAY; задержка 0.2 секунды
CLR P0.3; выкл. сирены
CLR P0.4; выкл. габаритов
RET; возврат
SIGNAL22: CALL SIGNAL11; 1 сигнал сирены и габаритами
CALL DELAY; задержка 0.2 секунды
CALL SIGNAL11; 1 сигнал сирены и габаритами
RET; возврат
SIGNAL44: CALL SIGNAL22; 2 сигнала сирены и габаритами
CALL DELAY; задерка 0.2 секунды
CALL SIGNAL22; 2 сигнала сирены и габаритами
RET; возврат
EXIT: CALL SIGNAL22; 2 сигнала сирены и габаритами
JMP BEGIN; переход в начало
SIGNAL1: SETB P0.3; вкл. сирены
CALL DELAY; задержка 0.2 секунды
CLR P0.3; выкл. сирены
RET; возврат
DELAY: MOV R3,#2; задержка приблизительно 0.2 секунды
CYCLE2: MOV R2,#200; с помощь вложенных циклов
CYCLE0: MOV R1,#248;
CYCLE1: DJNZ R1, CYCLE1;
NOP;
DJNZ R2, CYCLE0;
DJNZ R3, CYCLE2;
RET; возвраты
END; конец