Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

ГЛ А ВА 9 Программирован ие таймеров С таймером-счетчиком, одним из важнейших компонентов микроконтроллеров, мы уже в общих чертах познакомились в главе 3. Из главы 6 вать мы узнали, как реализо­ простые задержки с помощью таймера и без него. В этой главе мы резюмиру­ ем полученную информацию и познакомимся с некоторыми более сложными функциями, которые позволяют осуществлять таймеры. 8- и 1 6 -разрядные таймеры Таймер в МК- это, по сути дела, двоичный счетчик. 8-разрядный таймер может ч сч е и ст т ь а ть от О до 255 , а 1 6-разрядный - от О до 65 5 3 5 . Результат счета можно про­ в любой момент (в том числе и не прекращая работу таймера) из счетного регистра, носящего общее наименование TCNTx, где х- номер таймера (для 8-разрядных это номера о и 2, для 1 6-разрядных - нечетные 1, з и т. д. ) . В 1 6-разрядных таймерах счетный регистр состоит из двух 8-разрядных регистров с общим наименованием тсNтхн (старший) и TCNTxL (младший). В счетные регистры также в любой момент можно записывать любое значение, что позволяет начинать счет не с нуля и регулировать интервалы счета. Мы в дальнейшем будем иметь дело с моделями, в которых один (AТtiny23 1 3 ) или два (ATmega8, ATmega8535 ) 8-разрядных таймера: TimerO и Тimer2, и один 1 6-разрядный Timer l . Ровно те же таймеры имеются и в базовом Arduino. Большее количество доступно в старших Mega, но мы их здесь, как договорились, не рас­ сматриваем. Поэтому далее в наименовании регистров вместо буквы х будем ука­ зывать номер конкретного таймера, но надо иметь в виду, что те же закономерно­ сти в основном действуют и для таймеров с большими номерами. При чтении регистров 1 6-разрядных таймеров их содержимое может измениться в промежутке между чтением отдельных 8-разрядных «половиною> . Например, ес­ ли содержимое младшего байта составляет $ FF, то мы прочтем именно это значе­ ние, но до выполнения команды на чтение старшего байта общее состояние тайме­ ра может стать на единицу больше, а младший байт в это время обнулится . В ре­ зультате при реальном числе, записанном в счетных регистрах, равном $ 0 1 0 0, мы

RkJQdWJsaXNoZXIy MTExODQxMg==