Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
304 Микроконтроллеры AVR от азов программирования... Процедура проверки кода 91 mov data, count , Помещаем длину кода в data 92 ldi addre, klen ; Адрес в EEPROM для хранения длины кода 93 rcall eewr ; Записываем в длину кода EEPROM 94 ldi addre, bufe ; В регистр адреса начало буфера в EEPROM 95 ldi ZH, high(bufr) ; В регистровую пару Z записываем 96 ldi ZL, low(bufr) ; адрес начала буфера в ОЗУ 97 т8: Id data, Z+ ; Читаем очередной байт из ОЗУ 98 rcall eewr ; Записываем в длину кода EEPROM 99 dec count , Декремент счетчика байтов 100 brne m8 , Если не конец, продолжаем запись 101 rjmp mil ; К процедуре открывания замка 102 103 104 105 т9: ldi rcall cP brne addre, klen ее rd count, data m13 ; Адрес хранения длины кода , Чтение длины кода из EEPROM , Сравнение с новым значением ; Если не равны, к началу 106 ldi addre, bufe , В YL начало буфера в EEPROM 107 ldi ZH, high(bufr) , В регистровую пару Z записываем 108 ldi ZL, low(bufr) ; адрес начала буфера в ОЗУ 109 тЮ: rcall ее rd ; Читаем очередной байт из EEPROM 110 Id temp, Z+ ; Читаем очередной байт из ОЗУ 111 cp data, temp ; Сравниваем два байта разных кодов 112 brne m13 ; Если не равны, переходим к началу 113 dec count ; Уменьшаем содержимое счетчика байтов 114 brne m10 ; Если не конец, продолжаем проверку Процедура открывания замка 115 mil sbi PORTB, 4 ; Команда "Открыть замок" 116 ldi data, 3 ; Вызываем задержку третьего типа 117 rcall wait 118 cbi P0RTB.4 ; Команда "Закрыть замок" 119 m13- rjmp main ; Перейти к началу Вспомогательные процедуры — ----------------- В ВО д | 120 incod- push count 121 ldi XL, 0 122 ldi XH,0 123 id : ldi count, kandr 124 mov drebL, XL 125 mov drebH, XH 126 ic2: in XL,PIND 127 cbr XL, 0x80 128 in XH.PINB 129 cbr XH,0xF8 130 ісЗ. cp XL, drebL 131 brne ic1 132 cp XH, drebH 133 brne ic1 134 ic4: dec count 135 brne ic2 136 cp XL, codL 137 brne ic5 138 cp XL, codH проверка 2 байтов с клавиатуры Обнуление регистровой пары X ; Константа антидребезга , Старое значение младший байт ; Старое значение старший байт ; Вводим код (младший байт) ; Накладываем маску ; Вводим код (старший байт) ; Накладываем маску ; Сверяем младший байт ; Если не равен, начинаем с начала ; Сверяем старший байт ; Если не равен, начинаем с начала ; Уменьшаем счетчик антидребезга ; Если еще не конец, продолжаем ; Сравнение с временным буфером ; Если не равно, заканчиваем сравнение ; Сравниваем старшие байты
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==