Ревич, Ю.В. Программирование микроконтроллеров 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, мы
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==