Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 323 В строках 6 — 11 находится блок описания переменных и массивов. Все переменные и массивы имеют свои аналоги в программе на Ассемблере. В строке 6 описывается переменная f lz, которая используется как флаг задержки. В строке 7 описывается массив для оперативного хранения ключевой комбинации. Все значения этого массива будут размещены в ОЗУ (буфер в ОЗУ). Длина массива выбирается равной bsize. В строках 9,10 описываются переменная и массив, которые будут хра ниться в EEPROM. Переменная klen предназначена для хранения длины кодовой комбинации. Массив bu f е предназначен для хранения самой этой комбинации. При описании переменных и массивов, которые будут размещаться в EEPROM, данная версия языка СИ требует обязательной их инициали зации. То есть требует указать значение всех элементов по умолчанию. Указанные таким образом значения в процессе «прошивки» микрокон троллера попадают непосредственно в EEPROM. Если соблюдать ука занные выше требования, то строки 9 и 10 нашей программы должны выглядеть примерно так: eeprom unsigned char klen=0x4; eeprom unsigned int bufe[bsize]={0x76F, 0x77F, 0x7FE, 0x7 7F} ; Если мы воспользуемся данной редакцией команд описания, то мы полу чим программу электронного кодового замка. В ней уже на стадии изготов ления заложена некоторая начальная ключевая кодовая комбинация, кото рую, впрочем, в любой момент владелец замка может изменить на новую. Но мне интересно показать, что можно сделать, если закладывать код заранее нежелательно. Если вы не стали указывать начальные зна чения для переменной и массива, то это не является критической ошиб кой. Программа будет успешно оттранслирована, а результирующий код полностью работоспособен. Единственное неудобство — сообщение о некритичной ошибке. По-английски оно называется «Warning» (пред упреждение). Оно будет возникать каждый раз при трансляции про граммы. Можно, конечно, просто не обращать на него внимание. Однако более правильно будет временно отключить сообщение при помощи директивы #pragma и команды warn, как это и сделано в про грамме на листинге 5.20. В строке 8 вывод предупреждений отключается, а в строке 11 включается снова. Отключать предупреждения навсегда не реко мендуется. Так можно пропустить другие, более важные предупреждения. Далее в программе начинается описание всех составляющих ее функ ций. Данная программа состоит из пяти функций: ♦ две функции обработки прерываний (строки 12,13 и 14,15); ♦ функция ввода кода состояния клавиатуры (строки 16— 26);
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==