Ревич, Ю.В. Программирование микроконтроллеров 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 такта

RkJQdWJsaXNoZXIy MTExODQxMg==