Главная Микроконтроллеры [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] .EQU Note sol1 = Note 7 .EQU Note 8=114 .EOU Note la1 = Note 8 .EOU Note 9=101 .EOU Note ci1 = Note 9 .EQU NoTe 10=96 .EOU Note <)o2 = Note 10 .EQU Note 11=85 .EOU Note re2 = Note 11 .EOU Note 12=76 .EOU Note mi2 = Note 12 .EOU Note 13=72 .EOU Note fa2 = Note l3 .EQU Note 14=64 .EQU Note sol2 = Note 14 .EOU DURATION = 350 .EOU Time 1=1000/Note 1 EOU Time 2=1000/Note 2 .EOU Time 3=10O0/Note 3 .EQU Time 4=1000/Note 4 .EOU Time 5=1000/Note 5 .EOU Time 6=1000/Note 6 .EOU Time 7=1000/Note 7 .DEF KeyPass=rO .DEF tmp=rO .DEF KeyPass1=r1 DEF KeyPass2=r2 .DEF KeyPass3=r3 .DEF KeyPass4=r4 .DEF KeyPass5=r5 .DEF SSREG=r6 .DEF DelayVar=r7 DEF InTUseO=r8 .DEF LastKey=r9 .DEF ZerReg=rlO .DEF Time0=r16 .DEF Time1=r17 .DEF Time2=r18 DEF EEadr=r20 Время, увеличивается 3815 раз в секунду Время, увеличивается раз в 67 секунд Время, увеличивается раз в 47721 час, насыщается за 50 суток Адрес для записи в EEPROH. равен 255, если в текущий момент запись не производится DEF .OEF .DEF .DBF .DEF .DEF .DEF .DEF EventType=r21 BeepVar=r21 TimerEEByte=r22 TimerEEBit=r23 Key=r24 BeepDuration=r25 FreqConst=r26 IntUse1=r27 ; .DEF PassLoopCounter=r28 .DEF Flags=r29 ; bit О - Password accepted .ORG ООО clr ZerReg rjmp RESET .ORG 002 Здесь оказываемся при возникновении прерывания от таймера 3 раза в секунду Таймер используется как RTC и для вывода информации EEPROM Увеличение счетчика времени SSREG.SREG TimeO,1 Timel, ZerReg Time2,ZerReg TimeOk Timel ; Если прошло переполнение, Time2 счетчик времени остановлен subi adc adc brcc com com TiraeOk: ; Чтение данных из EEPROM и выдача на внешний порт. : Процедура обработки прерывания будет вызвана не раньше, чем через 300-3*4 мс ; после последнего обращения к EEPROH, поэтому проверка готовности EEPROM не ; производится, она должна быть уже готова.
Здесь оказываемся при включении питания схемы RESET: Настройка Idi out Idi out Idi out Idi out Idi mov Idi mov Idi mov Idi mov Idi mov Idi clr clr rcall sei микросхемы и программы. r31.$8F DDRB,г31 г31.$03 DDRD.г31 г31.$05 TCCRO.г31 г31.$02 TIMSK,г31 г31.2 KeyPassl. г31 г31.3 KeyPass2. г31 г31,2 KeyPass3, г31 Г31.3 KeyPass4, г31 г31.2 KeyPassS,г31 EventType.evReset Timel Time2 WrireEEPROH Настраиваем направление работы портов Настраиваем гаймер Разрешаем прерывания при переполнении таймера Загружаем пароль по умолчанию Сбрасываем счетчик времени Разрешаем прерывания MainLoop: : Подготавливаемся clr clr ori clr clr гЗО.О г31,0 Flags.1 KeyPass LastKey PassLoop: rcall GetKey brtc breq cpi breq Idi Idi rcall mov PassLoop Key,LastKey PassLoop Key,KeyEnter MainLoop FreqConst,FreqKeyPressed BeepDuration.S к вводу пароля. : При предъявлении пароля пока ошибок не было Цикл ввода пароля Записывает в переменную Key код нажатой клавиши и устанавливает бит Т, если клавиша нажата Если предыдущая клавиша еще нв отпущена Если нажат сброс, начинавм ввод строки с начала Веер LastKey.Key inc Id cpse andi cpi brne KeyPass.Z Key,KeyPass Flags."1 гЗО,Кеу1еп PassLoop Выдача короткого звукового сигнала Сравниваем введенную цифру и цифру пароля иэ ОЗУ, если ошибка, сбрасываем бит успешности пароля. Длина секретного кода. [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 |