Главная Микроконтроллеры [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [ 67 ] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] ; Вывод бита на внешний вывод порта и запись события в EEPROH Idi EventTypB,evDen ied bst Flags,0 brtc PasswordDenied sbi PORTD.1 ; Idi EventType, evPassed Если пароль совпал, включаем соленоид PasswordDenied: rcall WrireEEPROM ; Открытие двери при совпадении кода или цикл ожидания при ошибке Idi Key,5 OpenLoop: rcall DelaylOO Idi BeepDu rat ion, Time 7/2 Idi FreqConst,Note 7 rcall Beep dec Key sbic PIND,2 ; Если сработал концевик (открылась дверь), то выходим brne OpenLoop ; или выходим из цикла по тайм-ауту cbi PORTD, 1 ; Отключаем соленоид ; Нажатие на клавишу NewPassKey в этом месте приводит к загрузке rcall GetKey brtc MainLoop cpi Key,NewPassKey brne MainLoop sbrs Flags,0 rjmp MainLoop ; Ввод нового секретного кода. Idi FreqConst.Note 3 Idi BeepDuration, 20 rcall Beep Idi FreqConst,Note 5 Idi BeepDuration,20 rcall Beep Idi FreqConst,Note 7 Idi BeepDuration, 20 rcall Beep rcall DelaylOO NewPassword: clr LastKey clr гЗО clr Г31 NewPassLoop: rcall GetKey brtc NewPassLoop cp Key. LastKey breq NewPassLoop cpi Key,KeyEnter breq NewPassword mov LastKey,Key нового секретного кода Если старый был предъявлен верно Проигрывание "приглашения" изменения пароля Ожидаем нажатия клавиши Если клавиша еще не отпущена, продолжаем цикл ; Если сброс, начинаем ввод строки с начала
Дальше идут процедуры, вызываемые из основной программы Веер: Idi BeepVar,20 Beepi: mov DelayVar,FreqConst Delay2: rjmp NopJmpI NopJmp1;dec DelayVar brne Delay2 sbi PORTB,7 mov DelayVar FreqConst Delay3: rjmp NopJmp2 NopJmp2:dec DelayVar brne Delay3 PORTB,7 BeepVar Beepi BeepDuration Beep Выдача звукового сигнала 1 + = 5 мкс cbi dec brne dec brne sei ret : Задержка на время порядка секунды DelaylOO: Idi BeepDuration,3 D100 3: clr FreqConst D100 2: clr DelayVar D100 1: dec DelayVar brne D100 1
; Проигрываем сложную мелодию (Отговорила роща золотая) ;1 ми 1/8 Idi FreqConst,Note mi1 Idi BeepDuration,2.DURATI0N/Note mi1 rcall Beep Del ;1 ми 1/8 Idi F reqConst, Note mi1 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [ 67 ] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] 0.001 |