Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
306 Микроконтроллеры AVR от азов программирования... bsize в строке 12. Максимально возможный размер ограничен объемом ОЗУ и равен примерно 100 байтам (полный размер ОЗУ 128 байт). Учтите, что буфер не может занимать весь объем ОЗУ, так как в верх них адресах необходимо обязательно оставить пространство, которое будет использовать стековая память. Обращаю ваше внимание, что кон станта bsize используется для задания размера не только буфера в ОЗУ, но и для задания размера буфера в EEPROM, который предназначен для долговременного хранения кодовой комбинации. Константа kzad (строка 13) определяет длительность защитной паузы. Назначение защитной паузы подробно описано выше. Константа представляет собой коэффициент пересчета для таймера, при котором величина сформированной задержки будет равна 48 мс. Константа kandr (строка 14) — это константа антидребезга. Она используется в специальной антидребезговой процедуре. Константа определяет, сколько раз подряд должен повториться один и тот же код состояния клавиатуры, чтобы программа прекратила цикл антидребезга и перешла к обработке считанного кода. После определения констант начинается блок резервирования опе ративной памяти (строки 15 — 17). В строке 15 выбирается соответству ющий сегмент памяти, в строке 16 устанавливается указатель на адрес 0x60. Соображения для выбора именно этого адреса уже приводились в предыдущем примере. Собственно резервирование ячеек производится в строке 17. Директива byte резервирует необходимое количество ячеек ОЗУ, начи ная с адреса, определяемого меткой buf г. В данном случае buf г будет равен 0x60. Количество резервируемых ячеек определяется константой bsize. Далее, в строках 18 — 21 происходит резервирование ячеек в энергоне зависимой памяти (EEPROM). В строке 18 выбирается сегмент EEPROM. В строке 19 устанавливается текущее значение указателя этого сегмента. Указателю присваивается значение 0x08. То есть размещение данных в памяти EEPROM будет начинаться с восьмой ячейки. Вообще-то в дан ном случае можно было начинать с нулевой ячейки. Это не сделано лишь из соображений надежности работы. Фирма Atmel не рекомендует без особой необходимости использовать ячейку с нулевым адресом, так как именно она подвергается наибольшему риску потери информации при недопустимых перепадах напряжения питания, особенно если перепады напряжения возникают в момент записи информации в EEPROM. Так как EEPROM не работает со стеком, у нас есть запас по ячейкам. Поэтому мы отступили на целых восемь ячеек. Собственно команды резервирования занимают строки 20 и 21. В строке 20 резервируется одна ячейка, в которой будет храниться длина
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==