Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование микроконтроллеров AVR. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
формируемое как сокращение от полного названия регистра. Полное название регистра соответствует его назначению, например:
– Watchdog Timer Control Register (сокращенное название – WDTCR). Этот регистр предназначен для управления сторожевым таймером, его
адрес $21 или 0x21.
Функция регистров МК состоит в том, чтобы управлять режимом ра­боты периферийных устройств и хранить данные, характерные для данно­го периферийного устройства, например: результат отдельного преобразо­вания аналогово-цифрового преобразователя (АЦП) сохраняется в состав­ном регистре ADCH, L (допустим, результат преобразования имеет раз­рядность 10 бит и не помещается в один регистр).
Такой же принцип соблюдается в именовании отдельных битов реги­стров.
Регистры целиком либо отдельные биты могут иметь начальное зна­чение и быть доступны:
а) только для чтения;
б) только для записи;
в) для чтения и записи.

1.2. ПОРТЫ ВВОДА/ВЫВОДА

Каждый порт микроконтроллеров состоит из определенного числа выводов, через которые микроконтроллер может осуществлять прием и передачу цифровых сигналов. Структурная схема контакта порта вво­да/вывода показана на рис. 1.3 [1].
Изменение направления передачи данных через любой контакт вво­да/вывода может быть произведено программно в любой момент времени, не влияя на другие выводы порта. Выходные буферы всех портов обеспе­чивают высокую нагрузочную способность, достаточную для непосред­ственного управления светодиодными индикаторами.
11
Рис. 1.3. Схема контакта порта ввода/вывода микроконтроллера,
использующая следующие управляющие сигналы:
PUD – выключение подтягивающего резистора; SLEEP – управление
спящим режимом; clki/o – тактовый сигнал подсистемы ввода/вывода;
WDx – запись регистра DDRx; RDx – чтение регистра DDRx;
WPx – запись регистра PORTx; RRx – чтение регистра PORTx;
RPx – чтение выводов порта PORTx;
AIOxn – аналоговый выход вывода n порта PORTx
Входные буферы всех выводов построены по схеме триггера Шмитта
и для всех входов есть возможность подключения внутреннего подтягива­ющего резистора между входом и шиной питания VCC. Большинство кон­тактов ввода/вывода всех микроконтроллеров семейства имеют дополни­тельные функции и могут использоваться различными периферийными устройствами микроконтроллеров. При этом возможны две ситуации: в одних случаях пользователь должен самостоятельно задавать конфигу­рацию вывода, а в других – вывод конфигурируется автоматически при включении соответствующего периферийного устройства [1].
Обращение к портам осуществляется через регистры ввода-вывода.
12
В микроконтроллерах AV R каждому параллельному порту ввода­вывода поставлены в соответствие три регистра:
DDRx – регистр направления передачи данных – определяет, является тот или иной вывод порта входом или выходом; если некоторый разряд ре­гистра DDRx содержит логический 0, то соответствующий вывод порта сконфигурирован как вход, если логическую 1, то – как выход.
PORTx – регистр данных порта – если вывод выполняет роль выхода, то в соответствующий разряд записывается значение, предназначенное для вывода; если вывод выполняет роль входа, то логическому 0 в некотором разряде регистра PORTx соответствует высокоомный вход, а логической 1 – вход, нагруженный подтягивающим сопротивлением.
PINx – регистр выводов порта – в отличие от регистров DDRx и PORTx доступен только для чтения и позволяет считать входные данные порта на внутреннюю шину микроконтроллера.
При работе с входами и выходами микроконтроллеров AVR обычно используют двоичную систему счисления, при этом каждый входной или выходной контакт соответствует конкретному биту в составе регистра определенного порта.

1.3. ПЕРИФЕРИЙНЫЕ УСТРОЙСТВА

Микроконтроллеры семейства Mega имеют наиболее богатый набор периферийных устройств (ПУ). При этом в большинстве моделей имеются все ПУ, которые встречаются в составе микроконтроллеров AVR. Этими устройствами являются [1]:
• 8-разрядные таймеры/счетчики (таймеры ТС0 и ТС2). В ряде моде-
лей эти таймеры/счетчики могут работать в качестве часов реального вре­мени (в асинхронном режиме);
• 16-разрядные таймеры/счетчики (таймеры ТС1 и ТС3);
13
• сторожевой таймер WDT;
• генераторы сигнала с ШИМ разрядностью 8 бит (один из режимов
работы 8-разрядных таймеров/счетчиков ТС0 и ТС2);
• одно-, двух- и трехканальные генераторы сигнала с ШИМ регули-
руемой разрядности (один из режимов работы 16-разрядных таймеров ТС1 и ТС3). Разрешение ШИМ-сигнала для разных моделей составляет
8...10 бит или 1...16 бит;
• аналоговый компаратор;
• многоканальный 10-разрядный АЦП как с несимметричными, так
и с дифференциальными входами;
• полнодуплексный универсальный асинхронный приемопередатчик
(UART);
• полнодуплексный универсальный синхронный/асинхронный прие-
мопередатчик (USART);
• последовательный синхронный интерфейс SPI;
• последовательный двухпроводной интерфейс TWI (аналог интер-
фейса I2С).

1.3.1. Таймеры/счетчики

Микроконтроллеры AVR содержат в своем составе как 8-, так и 16-
разрядные таймеры/счетчики. Разрядность влияет на момент переполнения счетчика, при котором происходит его обнуление. Например, для 8­разрядного счетчика ТС0 (ТС2) переполнение наступает, когда счет импуль­сов достигает значения 255, а для 16-разрядного счетчика ТС1 – 65535.
Если таймер/счетчик используется в качестве счетчика, то он должен подсчитывать число импульсов, поступающих на определенный вход микроконтроллера. При использовании его в качестве таймера, он должен в режиме реального времени формировать заданные временные проме­жутки, а также может работать генератором периодических сигналов.
14
Функциональная схема восьмиразрядного таймера/счетчика показана
на рис. 1.4.
Рис. 1.4. Функциональная схема восьмиразрядного таймера/счетчика
Счетный регистр таймера/счетчика (TCNT0), а также оба регистра
совпадения (OCR0A, OCR0B) представляют собой восьмиразрядные реги­стры. Появление запроса на прерывание всегда можно определить по наличию соответствующего флага прерываний в регистре TIFR.
15
Содержимое регистров OCR0A и OCR0B таймера/счетчика должно непрерывно сравниваться со значением счетного регистра. Результат сравнения может использоваться для генерации прямоугольных импуль­сов переменной частоты (сигнал ШИМ) на одном из выходов ОС0А или ОС0В. В момент сравнения на одном из каналов устанавливается соответ­ствующий флаг OCF0A или OCF0B, который может использоваться для генерации запроса на прерывание по совпадению.
Таймер/счетчик запускается или от внутреннего, или от внешнего ис­точников тактового сигнала. Определение источника тактового сигнала осуществляется при помощи управляющей логики, которая производит выбор источника в соответствии со значениями битов CS02:0 регистра
TCCR0B.
Коэффициент деления предделителя устанавливается для каждого из таймеров с применением мультиплексора, который управляется разрядами CSn(0..2) из регистра управления таймера/счетчика TCCRn (табл. 1.1). С помощью этих же битов устанавливается режим работы таймера.
Таблица 1.1
Выбор режима и входного такта для ТС0 и ТС1 микроконтроллера
CSn2 CSn1 CSn0 Описание
0 0 0 Останов 0 0 1 Таймер, такт = такт системной синхронизации 0 1 0 Таймер, такт = такт системной синхронизации / 8 0 1 1 Таймер, такт = такт системной синхронизации / 64 1 0 0 Таймер, такт = такт системной синхронизации / 256 1 0 1 Таймер, такт = такт системной синхронизации / 1024 1 1 0 Счетчик, такт – внешний, ниспадающий фронт сигнала 1 1 1 Счетчик, такт – внешний, нарастающий фронт сигнала
Модуль совпадения содержит в своем составе восьмиразрядный ком­паратор, который непрерывно сравнивает содержимое регистра TCNT0
16
с содержимым каждого из двух регистров совпадения (OCR0A или OCR0B). Всякий раз, когда содержимое TCNT0 при сравнении совпадает с содержимым OCR0A или OCR0B, компаратор вырабатывает сигнал сов­падения. В следующем тактовом цикле этот сигнал устанавливает соот­ветствующий флаг совпадения (OCF0A или ОCF0B).
С помощью регистра маски прерываний таймера TIMSK прерывание для любого устройства может быть замаскировано. Если для этого устройства прерывание индивидуально разрешено, установка флага сов­падения вызывает прерывание. Флаг совпадения автоматически сбрасыва­ется при запуске процедуры обработки прерывания. Флаг может быть очищен путем записи в него логической единицы. На рис. 1.5 показана блок-схема модуля совпадения.
Рис. 1.5. Блок-схема модуля совпадения
17
Таймер успешно используется для оценки временных интерва­лов. Для этого в ходе выполнения программы в регистр TCNT заносит­ся исходное значение. После этого таймер запускается с требуемым входным тактом. Программа ожидает появления в регистре TIFR фла­га переполнения TOV, указывающего на то, что требуемое время ис­текло [1].
Все микроконтроллеры семейства Mega имеют в своем составе сто­рожевой таймер, который является обязательным атрибутом всех совре­менных микроконтроллеров. Этот таймер позволяет предотвратить зацик­ливание программы, возникающее по тем или иным причинам.
Установка режима работы таймера/счетчика ТС0 (ТС2) определяется состоянием разрядов WGMnl: WGMn0 регистра TCCR0 (TCCR2). Режимы работы таймеров от состояния этих разрядов показаны в табл. 1.2.
Таблица 1.2
Режимы работы таймеров/счетчиков ТС0 и ТС2
Номер
режима
0 0 0 Normal 1 0 1 Phase correct PWM 2 1 0 СТС (сброс при совпадении) 3 1 1 Fast PWM
Примечание: п = 0 или 2.
WGMul
(CTCn)
WGMiiO
Режим работы таймера/счетчика Тл
(PWMn)
Режим Normal – это самый простой режим работы таймеров/счет­чиков. В таймере/счетчике ТС0 моделей ATmega8x и ATmega163x это во­обще единственный режим. Счетный регистр в этом режиме функциони­рует как простой суммирующий счетчик. При поступлении на вход каж­дого тактового импульса в счетчике происходит накопление итогового
18
значения, т. е. содержимое счетчика только увеличивается, и принуди­тельный сброс при совпадении не выполняется. При достижении макси­мального значения $FF возникает переполнение, а счет продолжается со значения $00.
В режиме СТС (сброс при совпадении) счетный регистр также функ-
ционирует как обычный суммирующий счетчик, итоговый результат ко­торого подсчитывается по приходу каждого тактового импульса. Однако максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяются регистром совпадения OCR0А (OCR2А).
В режиме СТС счетчик сбрасывается в ноль при совпадении содер-
жимого счетного регистра (TCNT0) и регистра OCR0A.
Таким образом, регистр OСR0A определяет максимальное значение
для счетчика и его коэффициент пересчета.
Этот режим позволяет контролировать частоту сигнала на выходе мо­дуля. Упрощается также и подсчет внешних событий. Значение счетного регистра (TCNT0) увеличивается до момента, пока не происходит совпа­дения между TCNT0 и OCR0A, и затем содержимое счетчика (TCNT0) очищается.
Прерывание может вызываться каждый раз, когда счетчик достигает значения ТОР. При этом используется флаг OCF0A. Если прерывание раз­решено, вызывается процедура обработки прерывания, которая может ис­пользоваться для того, чтобы обновить значение ТОР.
Микроконтроллеры ATmega8 имеют в своем составе три таймера/ счетчика общего назначения – два 8-разрядных и один 16-разрядный.
Любой таймер – это счетчик, однако в режиме таймера его счетный вход подключен к генератору импульсов, который формирует импульсы через равные промежутки времени, а в режиме счетчика он подсчитывает импульсы, поступающие на его счетный вход.
19
Как отмечалось выше, каждый таймер микроконтроллера ATmega8
может работать в различных режимах:
а) в режиме счетчика внешних сигналов; б) в режиме обычного таймера (задержка времени на включение); в) в режиме ШИМ. Для каждого таймера существует ряд регистров, которые и управляют
состоянием таймеров.
Рассмотрим теперь таймер/счетчик ТС1.
Шестнадцатиразрядный таймер/счетчик ТС1 входит в состав всех мо­делей микроконтроллеров семейства Mega. Как и таймеры/счетчики ТС0 и ТС2, он имеет возможности: формирования временных интервалов, под­счета числа внешних событий и генерации сигналов с ШИМ. В составе каждого таймера/счетчика ТС1 присутствуют следующие регистры вво­да/вывода [1]:
• 16-разрядный счетный регистр TCNT1;
• 16-разрядный регистр захвата ICR1;
• два 16-разрядных регистра сравнения OCR1A, OCR1B;
• два 8-разрядных регистра управления TCCR1A, TCCR1B.
Каждый из 16-разрядных регистров физически размещается в двух регистрах ввода/вывода, названия которых получаются добавлением к на­званию регистра буквы «Н» (старший байт) и «L» (младший байт). Счет­ный регистр таймера/счетчика TCNT1, например, размещается в регистрах
TCNT1H:TCNT1L.
Таймер/счетчик ТС1 может генерировать прерывание при наступле­нии следующих событий:
• при переполнении счетного регистра;
• при равенстве счетного регистра и регистра сравнения (по одному
прерыванию на каждый блок сравнения);
• при сохранении счетного регистра в регистре захвата.
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]