Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
196 Микроконтроллеры AVR от азов программирования... о том, что программа создана при помощи CodeWizardAVR. Далее в заго ловок включен блок информации из вкладки «Project Information». Эту информацию мы с вами набирали собственноручно. Далее заголовок сооб щает тип процессора, его тактовую частоту, модель памяти (Tiny — озна чает малая модель), размер используемой внешней памяти и размер стека. В строке 1 находится команда include, присоединяющая файл описа ний. После команды include мастер поместил сообщение для программи ста. Сообщение предупреждает о том, что именно в этом месте програм мисту нужно поместить описание всех глобальных переменных (если, конечно, они вам понадобятся). В данном конкретном случае глобальные переменные нам не нужны. Поэтому мы добавлять их не будем. Теперь перейдем к функции main . Функция main содержит в себе набор команд, настройки системы (строки 3 — 30) и заготовку главного цикла программы (строка 31). Это полезно запомнить. Настройка системы — это запись требуемых значений во все управ ляющие регистры микроконтроллера. листинг 5.1) мы тоже производили подоб- В программе на ную настройку. Однако там мы ограничились инициализацией портов ввода-вывода и отключением компаратора. Состояние всех остальных служебных регистров микроконтроллера программа на Ассемблере не меняла. То есть оставляла значения по умолчанию. На языке СИ можно было бы поступить точно так же. Но мастер- построитель программы поступает по-другому. Он присваивает значения всем без исключения служебным регистрам. И тем, значения которых должны отличаться от значений по умолчанию, и тем, значения которых не изменяются. В последнем случае регистру присваивается то же самое значение, какое он и так имеет после системного сброса. Такие, на первый взгляд, избыточные действия имеют свой смысл. Они гарантируют правильную работу программы в том случае, если в результате ошибки в программе управление будет передано на ее начало. Лишние команды при желании можно убрать. В нашем случае доста точно оставить лишь команды инициализации портов (строки 7, 8 для порта РВ и строки 9,10 для порта PD). А также команду инициализации компаратора (строка 30). Теперь посмотрим, как же происходит присвоение значений. В строке 3 регистру CLKPR присваивается значение 0x80. Для присвоения зна чения используется хорошо знакомый нам символ «=» (равно). В языке СИ такой символ называется оператором присвоения. Таким же самым образом присваиваются значения и всем остальным регистрам.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==