Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава б. Основы программирования МКАVR 147 установка уровня на выводе осуществляется функцией digitalWrite ( ) , то частота не выйдет за пределы 70--80 кГц. Но что же это такое, в самом деле? В Arduino контроллер работает на частоте 1 6 мегагерц, и 70-80 кwюгерц - это максимум того, что он может выдать в таком простом алгоритме? ! Убедиться, что виноват в этом случае чересчур навороченный язык Arduino несложно, даже не выходя за рамки среды Arduino, если использовать прямое программирование порта на С. Тот же самый скетч, но напрямую обра щающийся к портам контроллера, будет выглядеть для Arduino так (листинг 6 . 1 О) . void setup ( ) { DDRD = Ох2 0 ; while ( t rue ) PORTD Ох2 0 ; PORTD О ; } void loop ( ) { } Цифровой вывод 5 - это бит номер 5 порта О (см. таблицу соответствия выводов ATmega328 и плат Arduino, которая имеется на любом официальном сайте Arduino), и маска Ох2 0 ( = ОЬ00 1 00000), приложенная к порту DDRD, установит этот вывод на выход. Этот скетч выдаст на выводе 5 частоту, почти равную 4 МГц, что куда больше похоже на работу 1 6-мегагерцевого контроллера. Теперь повторим то же самое на ассемблере, выбрав в качестве «подопытного кро лика» АTmega8 . Хотя с таким же успехом могли бы выбрать любой другой кон троллер, в котором присутствует 5-й вывод порта О (а у тех, у которых порт О от сутствует или его выводов меньше пяти, можно заменить его на любой другой вы вод любого порта). Тактовую частоту можно установить любую желаемую, от внутреннего генератора или внешнего кварца, как удобнее (см. по этому поводу разд. «Конфигурационные ячейки» главы 5). Ассемблерная программа, соответст вующая последнему скетчу, будет состоять из следующих строк (листинг 6 . 1 1 ) . . include "m8def . inc " ldi r l б , ObO O l O O O O O ; регистр r l б = Ох20 out DDRD , rl б ; вывод PDS на выход clr rl 7 ; регистр rl 7 = О Gcykle : out PortD, r l б ; PDS=l - 1 такт out PortD , rl 7 ; PDS=O - 1 такт rjmp Gcykle ; переход обратно 2 такта
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==