Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 305 166 ret ; Выход из подпрограммы 139 140 1с5. pop ret count , — ------------------------- Подпрограмма задержки 141 wait : cpi data, 1 , Проверяем код задержки 142 brne w1 143 ldi temp, 0x40 ; Разрешаем прерывание по совпадению 144 rjmp w2 145 w1: ldi temp, 0x80 ; Разрешаем прерывания по переполнению 146 w2- out TIMSK.temp ; Записываем маску 147 148 clr out temp TCNT1H, temp ; Обнуляем таймер 149 out TCNT1L,temp 150 ldi flz, 0 , Сбрасываем флаг задержки 151 sei ; Разрешаем прерывания 152 cpi data, 2 ; Если это задержка 2-го типа 153 breq w4 ; Переходим к концу подпрограммы 154 w3 cpi flz, 1 , Ожидание окончания задержки 155 brne w3 156 Oil ; Запрещаем прерывания 157 w4: ret ; Завершаем подпрограмму ------------------------- Запись байта в ячейку EEPROM 158 eewr cli , Запрещаем прерывания 159 sbic EECR, EEWE , Проверяем готовность EEPROM 160 rjmp eewr , Если не готов ждем 161 out EEAR, add re ; Записываем адрес в регистр адреса 162 out EEDR, data ; Записываем данные в регистр данных 163 sbi EECR, EEMWE , Устанавливаем бит разрешения записи 164 sbi EECR, EEWE , Устанавливаем бит записи 165 inc add re ; Увеличиваем адрес в EEPROM --------------------------------------------------------- Чтение байта из ячейки EEPROM 167 eerd cli Запрещаем прерывания 168 sbic EECR, EEWE i Проверяем готовность EEPROM 169 rjmp eerd ; Если не готов ждем 170 out EEAR, add re ; Устанавливаем бит инициализации чтения 171 sbi EECR, EERE ; Устанавливаем бит инициализации чтения 172 in data, EEDR Помещаем прочитанный байт в data 173 inc add re Увеличиваем адрес в EEPROM 174 ret Выход из подпрограммы ,******* ************ **********************: ************* ;* Процедура обработки прерываний * * * ************ **********************, , ---------------- Прерывание по совпадению 175 propr • ldi flz,1 ; Установка флага задержки 176 reti Завершаем обработку прерывания Если учитывать, что записи подлежит каждое изменение кода состо ­ яния, а его изменение происходит как при нажатии кнопки, так и при ее отпускании, то после нажатия и отпускания одной из кнопок в буфер запишется два кода. Значит, объема буфера нам хватит на 15 последовательных нажатий. Этого вполне достаточно, так как типичная кодовая комбинация состоит обычно из 4 — 5 цифр. Если вы считаете, что этого недостаточно, вы можете увеличить размер буфера, просто поменяв значение константы

RkJQdWJsaXNoZXIy MTExODQxMg==