Реферат: Микроконтроллеры семейства AVR фирмы Atmel

--PAGE_BREAK--3. Порты ввода-вывода
Все порты микроконтроллеров AVRв режиме цифрового ввода-вывода представляют собой полноценные двунаправленные порты, у которых каждый из выводов может работать как в режиме ввода, так и в режиме вывода. Это означает, что каждый отдельный разряд порта может быть настроен либо как вход, либо как выход, независимо от настройки всех остальных разрядов того же порта.

Настроить разряды порта можно при помощи команд сброса и установки бита SBIи CBI. То же самое касается изменения значения на выходе (если разряд сконфигурирован как выход) или включения/ отключения внутреннего резистора нагрузки (если разряд сконфигурирован как вход).

Все эти настройки выполняются отдельно для каждого вывода порта. Выходной буфер каждого из выводов порта содержит симметричный выходной каскад с высокой нагрузочной способностью. Нагрузочная способность каждого вывода любого порта достаточна для непосредственного управления светодиодным дисплеем.

Все выводы любого порта имеют индивидуально подключаемые резисторы нагрузки, которые в случае необходимости могут подключаться между этим выводом и источником питания. Входные схемы каждой линии порта имеют по два защитных диода, подключённых к цепи питания и к общему проводу, как это показано на рис. 7.


<img width=«517» height=«332» src=«ref-1_1614072252-16494.coolpic» v:shapes="_x0000_i1031">

Рис. 7 — Эквивалентная схема входных цепей одного разряда порта ввода-вывода
Буква “x” в описании имён регистра означает название порта, сточная буква “n” означает номер разряда. При использовании этого имени в программе вместо этих символов нужно подставлять конкретную букву названия порта и конкретный номер разряда.

Например, PORTB3 – для бита номер 3 порта B, если в документации этот бит назывался PORTxn.

Для каждого порта ввода-вывода в микроконтроллере имеется три специальных регистра:

♦ PORTx – регистр данных;

♦ DDRx – регистр управления;

♦ PINx – регистр непосредственного чтения состояния линий порта.

Регистр непосредственного чтения состояния линий порта доступен только для чтения, в то время как регистр данных и регистр управления доступны как для чтения, та и для записи.

Однако тоже возможна  запись логической единицы в любой разряд регистра PINx. Она приведёт к переключению соответствующего разряда регистра данных (PORTx). Каждый разряд регистра PORTx управляет включением и отключением резистора внутренней нагрузки, если соответствующий разряд порта находится в режиме ввода.
3.1 Использование портов для цифрового ввода-вывода
Каждый разряд порта представляет собой двунаправленную линию ввода-вывода с возможностью подключение внутреннего сопротивления нагрузки. На рис. 8 показана, функциональна схема одной линии порта ввода-вывода. Выходной контакт этой линии обозначен на схеме Pxn.
<img width=«491» height=«436» src=«ref-1_1614088746-24647.coolpic» v:shapes="_x0000_i1032">

Рис. 8 — Упрощённая схема одной линии цифрового ввода-вывода
Конфигурация выводов

Каждый разряд порта связан с тремя разрядами трёх специальных регистров: DDxn; PORTxn; PINxn.

Как уже говорилось:

♦ бит DDxn – это разряд номер n регистра DDRx;

♦ бит PORTxn – это разряд номер n регистра PORTx;

♦ бит PINxn – это разряд номер n регистра PINx.

Бит DDxn регистра DDRx выбирает направление передачи информации соответствующего разряда. Если в DDxn записана логическая единица, разряд Pxn работает как выход. Если в DDxn записан логический ноль, разряд Pxn работает как вход.

Если разряд порта сконфигурирован как вход, установка бита PORTxn в единицу включает внутренний резистор нагрузки. Для отключения резистора нагрузки нужно в PORTxn логический ноль. Сразу после системного сброса все выводы всех портов переходят в третье (высокоимпендансное) состояние.

Если разряд порта сконфигурирован как выход (установка бита PORTxn в единицу), то эта единица появится на выходе порта. Если в разряд PORTxn записан логический ноль, то и на выходе будет ноль.


4. Внешние прерывания

4.1 Назначение и режимы работы
Для вызова внешних прерываний используются входы INT0, INT1 или любой из входов PCINT7-0. Если прерывания разрешены, то они будут вызваны, даже если выводы INT0, INT1 и PCINT7-0 сконфигурированы как выходы.

Эта особенность обеспечивает возможность генерировать прерывания программным путём. Прерывание PCI1 – это прерывание по изменению сигнала на любом из выводов PCINT7-8. Прерывание PCI0 – это прерывание по изменению любого сигнала PCINT7-0. Причём как для прерыванияPCI1, так и для прерывания PCI0 можно произвольно исключить из работы любой из закреплённых за ним входов.

Управляющие регистры PCMSK1 и PCMSK0 определяют, какие из входов будут вызывать соответствующие прерывание. Прерывание по изменению на контактах PCINT7-0 работает асинхронным образом. Поэтому данный вид прерываний может использоваться для пробуждения изо всех спящих режимов, кроме режима Idle.

Прерывания INT0 и INT1 поддерживают несколько режимов. Они могут быть вызваны по переднему фронту, по заднему фронту или по статическому сигналу низкого логического уровня. Выбор одного из этих режимов производится при помощи регистра управления внешними прерываниями – EICRA.

Когда одно из прерываний INT0 или INT1 разрешено и сконфигурировано как прерывание по низкому входному уровню, запрос на прерывание будет вырабатываться всё время, пока на входе присутствует низкий уровень.

Вызов прерываний INT0 и INT1 по низкому уровню осуществляется в асинхронном режиме. Это означает, что такое прерывание может быть использовано для пробуждения из любого спящего режима за исключением Idle.

Время запуска микроконтроллера определяется при помощи fuse-переключателей SUT и CKSEL.


5. Восьмиразрядный таймер/счётчик с поддержкой режима ШИМ

5.1 Назначение и особенности
Таймер/счётчик T0 – это универсальный восьмиразрядный счётный модуль с двумя независимыми модулями совпадения и с поддержкой ШИМ (PWM). Он позволяет формировать заданные промежутки времени (для работы в режиме реального времени). А также может служить генератором периодических сигналов.

Рассмотрим основные характеристики таймера/счётчика.
5.2 Упрощенная блок-схема
Упрощенная блок-схема восьмиразрядного таймера/счётчика приведена на рис. 9. Доступные для центрального ядра регистры и цепи передачи данных на схеме показаны полужирными линиями.
<img width=«374» height=«310» src=«ref-1_1614113393-18185.coolpic» v:shapes="_x0000_i1033">

Рис. 9 — Блок-схема 8-разрядного таймера/счётчика


5.3 Регистры
Как счётный регистр таймера/счётчика (TCNT0), так и оба регистра совпадения (OCR0A, и OCR0B) представляют собой восьмиразрядные регистры. Наличие запроса на прерывание (на рис.10 он сокращённо обозначен «выз. прерыв.») всегда можно определить по состоянию соответствующее флага прерываний в регистре TIFR.

Каждое прерывание может быть индивидуально замаскировано при помощи регистра маски прерываний таймера TIMSK. Регистры TIFR и TIMSK на рис. 9 не показаны.

Таймер/счётчик может работать как от внутреннего тактового генератора через предварительный делитель, так и от внешнего тактового сигнала, поступающего на вход T0. Схема выбора источника тактового сигнала пропускает тактовые импульсы выбранного источника на вход таймера/счётчика, и каждый импульс этого сигнала увеличивает (или уменьшает) его значение.

Если не выбран ни один из источников тактового сигнала, таймер/счётчик останавливается.

Сигнал на выходе схемы выбора источника тактового сигнала (clkT0) называется сигналом синхронизации таймера.

Содержимое регистров OCR0Aи OCR0Bпостоянно сравнивается со значением таймера/счётчика. Результат сравнения может использоваться генератором для генерации сигнала ШИМ или прямоугольных импульсов переменной частоты на одном из выходов OC0Aили OC0B.

В момент совпадения в одном из каналов устанавливается соответствующий флаг OCF0Aили OCF0B, который может использоваться для генерации запроса на прерывание по совпадению.


5.4 Используемые обозначения
При описании счётчиков используются специальные обозначения для всех его важных состояний. Эти обозначения приведены в табл. 1.

Обозначения для основных состояний 8-разрядного счётчика
Таблица 1

BOTTOM

Счётчик достигает значения BOTTOM (начало), когда его содержимое равно 0x00

MAX

Счётчик достигает значения MAX (максимум), когда его содержимое равно 0xFF (десятичное 255)

TOP

Счётчик достигает значения TOP(вершина), когда его содержимое достигает самого высокого значению в данном режиме работы. В зависимости от режима значение TOP может быть равно либо 0xFF (MAX), либо значению, записанному в регистре OCR0A (режим сброса по совпадению)



5.5 Модуль счёта
Основой восьмиразрядного таймера/счётчика является программируемый реверсивный счётный модуль. На рис. 10 показана блок-схема счётного модуля и его управляющие сигналы.
<img width=«455» height=«141» src=«ref-1_1614131578-8858.coolpic» v:shapes="_x0000_i1034">

Рис. 10 — Блок-схема счётного модуля
Рассмотрим внутренние сигналы:

♦ count – увеличивает или уменьшает содержимое TCNT0 на 1;

♦ direction – выбор между уменьшением и увеличением;

♦ clear – очистка TCNT0 (установка всех битов в ноль);

♦ clkT0 – тактовая частота таймера/счётчика;

♦ top – возникает при достижении TCNT0 максимального значения;

♦ bottom – возникает при достижении TCNT0 минимального значения (нуля).

В зависимости от режима работы таймера, каждый импульс тактового сигнала (clkT0) очищает, увеличивает или уменьшает значение счётчика. Сигнал clkT0может быть получен как от внешнего, так и от внутреннего источника тактового сигнала. Это определяется битами выбора тактового сигнала (CS02:0). Когда не выбран ни один источник тактового сигнала (CS02:0 = 0), таймер останавливается.

Центральный процессор может обращаться к значению регистра TCNT0 независимо от того, присутствует ли сигнал clkT0 или нет. Команда записи, поступающая от центрального процессора, имеет приоритет над всеми другими операциями (очистки счётчика или операциями счёта).

Режимы работы таймера определяются установкой битов WGM01 и WGM00 регистра TCCR0Aи битом WGM02 регистра TCCR0B. Есть тесная связь между выбранным режимом работы счётчика и частотой сигнала на выходе OC0A.

Флаг переполнения таймера/счётчика (TOV0) устанавливается в соответствии с режимом работы, выбранным при помощи битов WGM01:0. Флаг TOV0 может использоваться для генерации прерываний центрального процессора.
5.6 Модуль совпадения
Основа модуля – восьмиразрядный компаратор, который непрерывно сравнивает содержимое регистра TCNT0 с содержимым каждого из двух регистров совпадения (OCR0Aили OCR0B). Каждый раз, когда содержимое TCNT0 оказывается равным содержимому OCR0Aили OCR0B, компаратор вырабатывает сигнал совпадения. Этот сигнал устанавливает соответствующий флаг совпадения (OCF0Aили OCF0B) в следующем тактовом цикле.

Если соответствующее прерывание разрешено, установка флага совпадения вызывает прерывание. Флаг совпадения автоматически сбрасывается при запуске процедуры обработки прерывания. Флаг также может быть очищен программно путём записи в него логической единицы.

В режиме генератора частот сигнал совпадения используется для генерации выводного сигнала совпадения используется для генерации выводного сигнала в соответствии с выбранным режимом работы, который определяется битами WGM02:0, а также битами выбора режима сравнения (COM0x 1:0). Сигналы max и bottom используются генератором частот в некоторых случаях для получения критических значений в отдельных режимах работы. На рис. 11 показана блок-схема модуля совпадения. На рисунке буква x – это условное обозначение. Для разных модулей совпадения x равно либо A либо B.
<img width=«476» height=«334» src=«ref-1_1614140436-17837.coolpic» v:shapes="_x0000_i1035">

Рис. 11 — Блок-схема модуля совпадения


Регистры OCR0xимеют двойную буферизацию в любом режиме широтно-импульсной модуляции (ШИМ). В режиме Normal и режиме СТС (Сброс при совпадении) двойная буферизация отключается. Двойная буферизация синхронизирует момент обновления регистра OCR0xс моментом достижения таймером верхнего или нижнего пределов. Синхронизация предотвращает возникновение ассиметричных ШИМ-импульсов, то есть импульсов, длина которых равна нечётному количеству тактов. Таким образом обеспечивается высокое качество сигналов ШИМ.

Доступ к регистру OCR0xможет показаться слишком сложным. На самом деле это не так. Если двойная буферизация разрешена, центральный процессор обращается к регистрам OCR0xчерез буфер. Если буферизация отключена, центральный процессор обращается к регистрам OCR0xнепосредственно.
5.7 Принудительное изменение состояния выхода совпадения
Во всех не-ШИМ-режимах таймера сигнал на любом из выходов совпадения может быть изменён принудительно путём записи единицы в специальный бит FOC0x. Принудительное изменение выхода совпадения не устанавливает флаг OCF0xи не перезагружает таймер.

Сигнал на выходе OC0xбудет изменяться таким же образом, как при реальном совпадении. То есть поведение выхода OC0xбудет зависеть от установки битов COM0x1:0. В зависимости от значения этих битов сигнал на выходе будет либо установлен в единицу, либо сброшен в ноль, либо изменит своё значение на противоположное.


5.8 Блокировка режима совпадения в момент записи регистра TCNT0
При записи значения в регистр TCNT0 операция сравнения блокируется в течение одного такта входного сигнала таймера. Это происходит даже в том случае, если таймер остановлен. Эта особенность позволяет записывать в регистр OCR0x то же самое значение, что и в регистр TCNT0, не вызывая прерывания при поступлении на вход таймера/счётчика тактового сигнала.
5.9 Использование модуля прерывания
Как уже говорилось, в любом режиме работы таймера в момент записи регистра TCNT0 работа модуля сравнения приостанавливается на один период тактового сигнала. Это может привести к ошибкам при изменении содержимого регистра TCNT0 независимо от того, запущен таймер/счётчик или нет.

Если значение, записанное в TCNT0, равно значению, записанному в OCR0x, операция сравнения будет пропущена, что приведёт к неправильной работе таймера в режиме генератора частоты.

По той же причине нельзя записывать в TCNT0 значение равное BOTTOM, когда счётчик работает в режиме обратного счёта.

Настройка режимов работы выхода OC0xдолжна быть произведена перед тем, как соответствующая линия порта будет сконфигурирована как выход. Самый простой способ установить нужное значение на выходе OC0x – использовать принудительную установку (бит FOC0x) в режиме Normal. Регистры OC0x сохраняю своё значение при переключении режимов генерации сигналов.


5.10 Модуль вывода сигнала совпадения
Разряды COM0x1:0 выполняют две функции. Генератор частот использует биты COM0x1:0 для того, чтобы определить, как изменится сигнал на выходе модуля совпадения (OC0x) в момент обнаружения факта совпадения. В то же время биты COM0x1:0 управляют источником сигнала на выходе OC0x.

На рис. 12 показана упрощённая схема, демонстрирующая логику работы разрядов COM0x1:0.
<img width=«463» height=«332» src=«ref-1_1614158273-15031.coolpic» v:shapes="_x0000_i1036">

Рис. 12 — Схема вывода сигнала совпадения
Как видно из рисунка, значение COM0x1:0 влияет на состояние порта ввода вывода микросхемы, не зависимо от главных регистров управления этим портом (DDR и PORT). Причём когда мы говорим о статусе OC0x, нужно понимать, что внутренний регистр OC0x не то же самое, что контакт микросхемы OC0x. Сразу после системного сброса в регистр OC0x записывается ноль.

Если любой из битов COM0x1:0установлен, то основная функция порта ввода-вывода отменяется, и на выход проходит сигнал совпадения (OC0x) с генератора частот. При этом, направление передачи информации контакта OC0x (вход он или выход) всё ещё зависит от соответствующего бита регистра DDR.

Значение бита, определяющего направление передачи информации для вывода OC0x в случае, если он должен работать как выход, должно быть установлено до того, как значение регистра OC0x поступит на этот выход. Альтернативные функции порта не зависят от режима работы генератора сигналов.
5.11 Режимы работы
Режим работы, то есть поведение таймера/счётчика и выхода сигнала совпадения, определяется как режимом работы генератора сигналов (WGM02:0), так и режимом вывода сигнала совпадения (COM0x1:0). Состояние битов, определяющих режим вывода сигнала совпадения, не  влияет на последовательность подсчёта, которая определяется только состоянием битов конфигурации генератора сигналов.

Биты COM0x1:0 определяют, должен ли выходной сигнал ШИМ быть инвертирован или нет (инвертированный или не инвертированный ШИМ). Для не-ШИМ-режимов содержимое битов COM0x1:0 определяет, должен ли сигнал на выходе быть установлен в единицу, сброшен в ноль либо переключён в противоположное состояние в момент совпадения.
5.12 Режим «Normal»
Режим «Normal» (WGM02:0 = 0) – это самый простой из режимов работы таймера. В этом режиме направление счёта всегда вперёд (содержимое увеличивается), и принудительный сброс счётчика не выполняется. Счётчик просто переполняется, когда достигает максимально для восьми разрядов значения (TOP = 0xFF), а затем перезапускается сначала (0x00).

При нормальной работе флаг переполнения таймера/счётчика (TOV0) будет установлен в тот момент, когда TCNT0 станет равно нулю. Флаг TOV0 в этом случае ведёт себя как девятый бит, а затем исключением, что он только устанавливается, но не сбрасывается.

Используя прерывание по переполнению таймера, которое автоматически очищает флаг TOV0, можно увеличить коэффициент пересчёта программы путём. Режим Normal не имеет никаких особенностей, на которых стоило бы заострять внимание. Новое значение счётного регистра может быть записано в любой момент времени.

Модуль совпадения иногда может использоваться для вызова прерываний. Использование сигнала совпадения для генерации сигналов в режиме Normal не рекомендуется, так как это будет сильно тормозить работу процессора.
5.13 Режим сброса при совпадении (СТС)
В режиме сброса при совпадении или, по-другому, в режиме СТС (при WGM02:0 = 2) регистр OCR0A используется для того, чтобы управлять коэффициентом пересчёта счётчика. В режиме СТС счётчик сбрасывается в ноль при совпадении содержимого счётчика регистра (TCNT0) и регистра OCR0A.

Регистр OCR0A, таким образом, определяет максимальное значение для счётчика, а, следовательно, и его коэффициент пересчёта.

Этот режим позволяет максимально контролировать частоту сигнала на выходе модуля. Упрощается также и подсчёт внешних событий. Значение счётчика регистра (TCNT0) увеличивается до момента, пока не происходит совпадение между TCNT0 и OCR0A, и затем содержимое счётчика (TCNT0) очищается.

Прерывание может вызываться каждый раз, когда счётчик достигает значения TOP. При этом используется флагOCF0A. Если прерывание разрешено, вызывается процедура обработки прерывания, которая может использоваться для того, чтобы обновить значение TOP.

Установка TOP чересчур близко к значению BOTTOM в тот момент, когда счётчик не работает или при низком коэффициенте предварительного деления, должна выполняться осторожно, так как режим СТС не имеет двойной буферизации.

Если новое значение, записанное в OCR0A, будет ниже, чем текущее значение TCNT0, то источник пропустит момент совпадения. В результате счётчик продолжит счёт до своего максимального значения (0xFF), затем перейдёт через ноль и лишь затем произойдёт момент совпадения.

Для генерации выходного сигнала в режиме СТС выход OC0Aможет быть установлен в режим переключения выходного уровня каждый раз в момент совпадения. Для этого нужно установить в соответствующее положение биты режима вывода сигнала совпадения (COM0A1:0 = 1). Значение регистра OC0A не поступит на соответствующий внешний контакт порта, если он не сконфигурирован как выход. Сгенерированный сигнал будет иметь максимальную частоту fOC0 = fclk_I/O/2, когда в регистр OCR0A записан ноль (0x00). Частота сигнала может быть рассчитана при помощи следующего уравнения:
<img width=«186» height=«48» src=«ref-1_1614173304-1125.coolpic» v:shapes="_x0000_i1038">
где переменная N – это коэффициент предварительного деления (1, 8, 64, 256 или 1024).

Как и в режиме Normal, флаг TOV0 устанавливается каждый раз, когда счётчик досчитывает до MAX и переходит в ноль.
5.14 Режим FastPWM (быстрый ШИМ)
Микроконтроллер имеет несколько режимов широтно-импульсной модуляции (ШИМ). По-английски это звучит как Pulse Width Modulation (PWM).Быстрый ШИМ (fastPWM) выбирается при WGM02:0 = 3 или 7. В этом режиме формируется самый высокочастотный сигнал ШИМ. Быстрый ШИМ отличается от других режимов ШИМ тем, что для формирования сигнала счётчик формирует только возрастную последовательность. То есть изменение значение счётчика имеет вид пилообразного сигнала с односторонним наклоном.

Счёт начинается со значения BOTTOM и заканчивается значением TOP. После этого счётчик перезапускается (снова устанавливается значение BOTTOM). Значение TOP равно 0xFF при WGM2:0 = 3.

Если же WGM2:0 = 7, значение TOP определяется содержимым регистра OCR0A. В режиме неинвертирующего выхода сигнал совпадения (OC0x) сбрасывается в момент совпадения значений TCNT0 иOCR0xи перехода к BOTTOM.

В инвертирующем режиме сигнал на выходе устанавливается в момент совпадения и перехода в BOTTOM. Благодаря тому, что счётчик работает всегда только в одном направлении, частота сигнала в режиме fast PWM может быть в два раза выше, чем в режиме phasecorrect PWM, который использует пилообразный сигнал с двумя наклонами.

Благодаря высокой частоте выходного сигнала режим fast PWM хорошо подходит для создания систем регулировки мощности, для построения выпрямителей и цифро-аналоговых преобразователей. Высокая частота позволяет применять внешние компоненты (катушки, конденсаторы) небольших размеров, и тем самым, уменьшать общую стоимость системы.

В режиме fast PWM значение счётчика увеличивается до тех пор, пока не достигнет значения TOP. В следующем цикле тактового сигнала таймера счётчик очищается.

Флаг переполнения таймера/счётчика (TOV0) устанавливается каждый раз, когда счётчик достигает значения TOP. Если прерывание разрешено, то вызывается процедура обработки прерывания, которая может быть использована для обновления уровня совпадения.

В режиме fast PWM модуль совпадения используется для генерации сигнала ШИМ на выходах OC0x. Установка битов COM0x1:0 = 2 произведёт к генерации на выходе неинвертированного сигнала ШИМ. Для генерации инвертированного сигнала ШИМ необходимо установить COM0x1:0 = 3. При установке битов COM0A1:0 = 1сигнал на выходе AC0A в момент совпадения переключается в противоположное состояние при условии, что бит WGM02 = 1.

Эта опция не доступна для выхода OC0B. Фактическое значение OC0x поступит на внешний контакт микросхемы только в том случае, если он будет сконфигурирован как выход.

Сигнал ШИМ формируется путём установки (сброса) регистра OC0x в момент совпадения значений OCR0xи TCNT0, и сброса (установки) этого регистра в первом тактовом цикле, после перезагрузки счётчика (изменении его значения с TOP на BOTTOM). Частота сигнала ШИМ на выходе может быть рассчитана при помощи следующего выражения:
<img width=«132» height=«46» src=«ref-1_1614174429-966.coolpic» v:shapes="_x0000_i1040">.
Переменная N представляет собой коэффициент предварительного деления (1, 8, 64, 256 или 1024). Отдельно нужно рассмотреть несколько случаев при генерации сигнала ШИМ, когда в регистр OCR0Aзаписывается значение, близкое к предельному.

Если в регистре OCR0Aбудет установлено значение, равное BOTTOM, то выходной сигнал будет представлять собой короткий выброс для каждого MAX + 1тактового импульса таймера.

Если в регистр OCR0Aзаписать значение MAX, то это приведёт к тому, что на выходе будет постоянно присутствовать либо высокий, либо низкий логический уровень (в зависимости от значения битов COM0A1:0).

Частота выходного сигнала в режиме fast PWM (при уровне регулирования 50%) может быть достигнута, если заставить регистр OC0x переключать свой логический уровень при каждом совпадении (COM0x1:0 = 1).

Сформированный таким образом сигнал будет иметь максимальную частоту fOC0 = fclk_I/O/2 в том случае, когда в регистре OCR0A записан ноль. Эта особенность позволяет переключать регистр OCR0A таким же образом, как в режиме СТС, но при этом использовать все преимущества двойной буферизации, которая применяется в режиме fast PWM.
    продолжение
--PAGE_BREAK--5.15 ШИМ, корректный по фазе (PhaseCorrectPWM)
Режимphase correct PWM (WGM02:0 = 1или5). Формирование сигнала ШИМ происходит с большим коэффициентом пересчёта и корректного по фазе. Корректность по фазе обеспечивается благодаря работе счётчика в режиме пилообразного сигнала с двухсторонним наклоном.

Счётчик периодически изменяет направление своего счёта. Сначала он считает от BOTTOM до TOP, затем направление счёта меняется, и счётчик считает TOP до BOTTOM. Затем направление пересчёта снова меняется, и всё повторяется сначала.

Значение TOP равно 0xFF при WGM2:0 = 1 и определяется регистром OCR0Aпри WGM2:0 = 5.

В режиме неинвертирующего вывода сигнал на выходе OCR0x сбрасывается в ноль в момент совпадения содержимого регистров TCNT0 и OCR0x, если счётчик работает в прямом направлении (на увеличение). Значение устанавливается в единицу в момент совпадения, если счётчик работает на уменьшение.

В режиме инвертированного вывода картина меняется на противоположную. Режим двухстороннего наклона характеризуется более низкой максимальной частотой выходного сигнала по сравнению с предыдущим случаем, где применяется пила с односторонним наклоном. Благодаря симметричности по фазе при двустороннем наклоне такие режимы предпочитаются при создании систем управления электродвигателями.

В режиме phase correct PWM значение счётчика увеличивается, пока не достигнет значения TOP. Когда значение счётчика достигает TOP, направление счёта изменяется. Содержимое TCNT0 будет равно TOP в течение одного периода тактового сигнала таймера. Флаг переполнения таймера/счётчика (TOV0) устанавливается каждый раз, когда счётчик достигает значения BOTTOM. Флаг прерывания может использоваться для генерации запроса на прерывание. Такое прерывание будет вызвано каждый раз, когда содержимое счётчика достигнет значения BOTTOM.

В режиме phasecorrect PWM модуль совпадения используется для генерации сигнала ШИМ на выходе OC0x. При установке битов COM0x1:0 = 3. Установка битов COM0A0 = 1заставляет сигнал на выходе OC0A инвертироваться каждый раз в момент совпадения, если бит WGM02 установлен. Эта опция не доступна для вывода OC0B. Фактическое значение OC0x поступает на внешний вывод порта только в том случае, если он сконфигурирован как выход.

Сигнал ШИМ сгенерируется путём сброса (установки) OC0xв момент совпадения содержимого регистров OCR0xи TCNT0, когда счётчик работает на увеличение, и устанавливается (сбрасывается) в момент совпадения, если счётчик работает на уменьшение. Частота выходного сигнала ШИМ в режиме phase correct PWM может быть вычислена по следующей формуле:


<img width=«147» height=«47» src=«ref-1_1614175395-1009.coolpic» v:shapes="_x0000_i1042">,
Где переменная N представляет собой коэффициент предварительного деления (1, 8, 64, 256, 1024).

Крайние значения содержимого регистра OCR0A при генерации сигналов ШИМ в режиме phase correct PWM представляют собой специальные случаи. Для неинвертирующего режима при записи в регистр OCR0Aзначения BOTTOM на выходе установиться низкий логический уровень. При записи в OCR0Aзначения MAX на выходе установится логическая единица. Для инвертирующего режима сигнал на выходе будет иметь противоположные значения.


6. Описание системы команды

6.1 Система команд. Общие сведения о системе команд
В семействе AVR система команд у микроконтроллеров разных типов содержат от 89 до 130 команд. У микроконтроллеров типа 2323, 2343, 2313, 4433, 8515 и 8535 в систему команд входят 118 команд. Эту систему команд будем называть базой.

В табл. 2.1 – 2.13 описаны операции, выполняемые по командам базовой системы, и приведены мнемокоды команд, используемые при разработке программы на языке AVR Ассемблера. В таблицах дана сквозная нумерация команд, используемая далее в тексте.

Базовая система команд содержит:

▪ 33 команды регистровых операций, при выполнении которых используются только регистры общего назначения (команды №№ 1-33);

▪ 26 команд с обращением по адресу в адресном пространстве SRAM (команды №№ 34-59);

▪ 2 команды с обращением к регистрам ввода-вывода (команды №№ 60 и 61);

▪ 1 команда с обращением к FlashROM (команда № 62);

▪ 22 команды операций с битами в разрядах регистров общего назначения и регистров ввода-вывода (команды №№ 63-84);

▪ 34 команды управления ходом программы (команды №№ 85-118).

В систему команд микроконтроллеров типа t11, t12, t15, 1200, и t28, у которых нет SRAM, не входят команды с обращением по адресу в адресном пространстве SRAM за исключением команд с мнемокодами LDRd, Z (№ 40) и STZ, Rr (№ 41), по которым производится обращение к регистрам общего назначения и регистрам ввода-вывода с использованием косвенной адресации. В систему команд у этих микроконтроллеров не входят также 2 команды регистровых операций (№№ 32 и 33) и две команды управления ходом программы (№№ 86 и 88). У микроконтроллеров типа 1200 в систему команд не входит также команда с обращением к FlashROM, а у микроконтроллера типа m163, кроме того, с наличием аппаратного умножителя.
Таблица 2



Операция

Мнемокод команды

Признаки результата

H

S

V

N

Z

C

1

<img width=«20» height=«2» src=«ref-1_1614176404-75.coolpic» v:shapes="_x0000_s1026">$00→Rd ((Rd)      (Rd) →Rd)

CKR Rd









1



2

(Rd) → Rd((Rd)^( Rd) → Rd)

TST Rd



+



+

+



3

<img width=«14» height=«2» src=«ref-1_1614176479-74.coolpic» v:shapes="_x0000_s1027">(Rd) → Rd($FF-( Rd) → Rd)

COM Rd



+



+

+

1

4

— (Rd) → Rd($00-( Rd) → Rd)

NEG Rd

+

+

+

+

+

+

5

(Rd)+1→ Rd

INC Rd



+

+

+

+



6

(Rd)-1→ Rd

DEC Rd



+

+

+

+



7

0→( Rd) →C

LSR Rd



+

+



+

+

8

C←( Rd) ←0

LSL Rd

+

+

+

+

+

+

9

C→( Rd) →C

ROR Rd



+

+

+

+

+

10

C←( Rd) ←C

ROL Rd

+

+

+

+

+

+

11

Rd.7→( Rd.6- Rd.0) →C

ASR Rd



+

+

+

+

+

12

Rd.4-7↔ Rd.0-3

SWAP Rd













13

(Rr) → Rd

MOV Rd, Rr













14

(Rd)+(Rr) → Rd

ADD Rd, Rr

+

+

+

+

+

+

15

(Rd)+(Rr)+C→ Rd

ADC Rd, Rr

+

+

+

+

+

+

16

(Rd)-(Rr) → Rd

SUB Rd, Rr

+

+

+

+

+

+

17

(Rd)-(Rr)-C→ Rd

SBC Rd, Rr

+

+

+

+

+

+

18

(Rd)-(Rr)

CP Rd, Rr

+

+

+

+

+

+

19

(Rd)-(Rr)-C

CPC Rd, Rr

+

+

+

+

+

+

20

(Rd) ^(Rr) → Rd

AND Rd, Rr



+



+

+

+

21

(Rd)˅(Rr) → Rd

OR Rd, Rr



+



+

+



22

<img width=«2» height=«18» src=«ref-1_1614176553-75.coolpic» v:shapes="_x0000_s1028"><img width=«20» height=«2» src=«ref-1_1614176404-75.coolpic» v:shapes="_x0000_s1029">(Rd)      (Rr) → Rd

EOR Rd, Rr



+



+

+



 
d=0-31; r=0-31



Таблица 3



Операция

Мнемокод команды

Признаки результата

H

S

V

N

Z

C

23

$FF→ Rd

SER Rd













24

K→ Rd

LDI Rd, K













25

(Rd)-K→ Rd

SUBI Rd, K

+

+

+

+

+

+

26

(Rd)-K-C→ Rd

SBCI Rd, K

+

+

+

+

+

+

27

(Rd)-K

CPI Rd, K

+

+

+

+

+

+

28

(Rd) ^K→ Rd

ANDI Rd, K



+



+

+



29

<img width=«14» height=«2» src=«ref-1_1614176703-74.coolpic» v:shapes="_x0000_s1030">(Rd) ^K→ Rd

CBR Rd, K



+



+

+



30

(Rd) ˅K→ Rd

ORI Rd, K



+



+

+



31

(Rd) ˅K→ Rd

SBR Rd, K



+



+

+



d=16-31(!); K=0-255



Таблица 4



Операция

Мнемокод команды

Признаки результата

H

S

V

N

Z

C

32

(Rd+1, Rd)+K→ Rd+1,Rd

ADIWRd, K



+

+

+

+

+

33

(Rd+1,Rd)-K→ Rd+1,Rd

SBIW Rd, K



+

+

+

+

+

d=24, 26, 28,30; K=0-63



    продолжение
--PAGE_BREAK--6.2 Система команд
Таблица 5



Операция

Мнемокод команды



Операция

Мнемокод команды

34

(Ячk) → Rd

LDS Rd, K

35

(Rr) →Ячk

STS k, Rr

d, r=0-31; k – адрес из адресного пространства SRAM

 


Таблица 6



Операция

Мнемокод команды



Операция

Мнемокод команды

36

(Яч(X)) → Rd

LD Rd, X

37

(Rr) →Яч(X)

ST X, Rr

38

(Яч(Y)) → Rd

LD Rd, Y

39

(Rr) →Яч(Y)

ST Y, Rr

40

(Яч(Z)) → Rd

LD Rd, Z

41

(Rr) →Яч(Z)

ST Z, Rr

42

1.(Яч(X)) → Rd2. (X)+1→X

LD Rd, X+

43

1.(Rr)→Яч(X) 2.(X)+1→X

ST X+, Rr

44

1.(Яч(Y)) → Rd2. (Y)+1→Y

LD Rd, Y+

45

1.(Rr)→Яч(Y) 2.(Y)+1→Y

ST Y+, Rr

46

1.(Яч(Z)) → Rd2. (Z)+1→Z

LD Rd, Z+

47

1.(Rr)→Яч(Z) 2.(Z)+1→Z

ST Z+, Rr

48

1.(X)-1→X              2. (Яч(X))→ Rd

LD Rd, -X

49

1.(X)-1 →X 2.(Rr)→Яч(X)

ST -X, Rr

50

1.(Y)-1→Y              2. (Яч(Y))→ Rd

LD Rd, -Y

51

1.(Y)-1 →Y 2.(Rr)→Яч(Y)

ST -Y, Rr

52

1.(Z)-1→Z              2. (Яч(Z))→ Rd

LD Rd, -Z

53

1.(Z)-1 →Z 2.(Rr)→Яч(Z)

ST -Z, Rr

54

(Яч(Y)+q) → Rd

LDD Rd, Y+q

55

(Rr)→Яч(Y)+q

STDY+q, Rr

56

(Яч(Z)+q) → Rd

LDD Rd, Z+q

57

(Rr)→Яч(Z)+q

STDZ+q, Rr

58

1.(SP)+1→SP              2. (СТЕК)→ Rd

POP Rd

59

1.(Rr)-1→СТЕК 2.(SP)-1→SP

PUSH Rr

d, r = 0-31; q=0-63



Таблица 7



Операция

Мнемокод команды



Операция

Мнемокод команды

60

(PrP) → Rd

IN Rd, P

61

(Pr) →PrP

OUT P,Pr

d, r = 0-31; P=0-63=S00-$3F

 


Таблица 8



Операция

Мнемокод команды

(Z.15-1) – адрес в FlashROM

Z.0 = 0 – мл. байт; Z.0 =1 –ст. байт

62

(Яч(Z))→ R0

LPM



Таблица 9



Операция

Мнемокод команды



Операция

Мнемокод команды

63

T→ Rd.b

BLD Rd, b

64

Rr.b →T

BSTRr, b

65

0→ PrP.b

CBI P, b

66

1→PrP.b

SBI P, b

67

0→ SREG.b

BLSR b

68

1→SREG.b

SSET b

d, r = 0-31; P=0-31 (!); b= 0-7

 

Таблица 10



Операция

Мнемокод команды



Операция

Мнемокод команды

69

0→I

CLI Rd, X

70

1 →I

SEI

71

0 →T

CLT

72

1 →T

SET

73

0→H

CLH

74

1 →H

SEH

75

0→S

CLS

76

1→S

SES

77

0→V

CLV

78

1→V

SEV

79

0→N

CLN

80

1→N

SEN

81

0→Z

CLZ

82

1→Z

SEZ

83

0→C

CLC

84

1→C

SEC



Таблица 11



Операция

Мнемокод команды



Операция

Мнемокод команды

85

(PC)+1+k→PC

RJMP k

86

(Z) →PC

IJMP

87

(PC)+→СТЕК

(SP)-2→SP

(PC)+1+k→PC

RCALL k

88

(PC)+1→СТЕК

(SP)-2→SP

(Z) →PC

ICALL

89

(SP)+2→ SP

(СТЕК) →PC

RET

90

(SP)+2→SP

(СТЕК) →PC

1→I

RETI

k= -2048 — +2047

 


Таблица 12



Условие

Мнемокод команды



Условие

Мнемокод команды

91

I = 0

BRID k

92

I = 1

BRIE k

93

T = 0

BRTC k

94

T = 1

BRTS k

95

H = 0

BRHC k

96

H = 1

BRHS k

97

S = 02. (X)+1→X

BRGE k

98

S = 1

BRLT k

99

V = 0

BRVC

100

V = 1

BRVS k

101

N = 0

BRPL k

102

N = 1

BRMI k

103

Z = 0

BRNE k

104

Z = 1

BREQ k

105

C = 0

BRCC k

106

C = 1

BRCS k

107

C = 0

BRSH k

108

C = 1

BRLO k

109

SREG.b = 0

BRBC b, k

110

SREG.b = 1

BRBS b, k

k= -64 — +63; b = 0 — 7



Таблица 13



Условие

Мнемокод команды



Условие

Мнемокод команды

111

Rr.b = 0

SBRC Rr, b

112

Rrb = 1

SBRS Rr, b

113

PrP.b = 0

SBIC P, b

114

PrP.b = 1

SPIS P, b

115

(Rd) = (Rr)

CPSE Rd, Rr







d, r= 0 – 31; P = 0 – 31 (!); b = 0 — 7



Таблица 14



Операция

Мнемокод команды

116

MK → режим энергосбережения

SLEEP

117

Перезапуск WDT

WDR

118

Нет

NOP



    продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по коммуникациям