Регистры портов ввода/вывода
Обращение к портам производится через регистры ввода/вывода. Под каждый порт в адресном пространстве ввода/вывода зарезервировано по 3 адреса, по которым размещены следующие регистры: регистр данных порта PORT x, из которого выдается предварительно записанные данные на выводы, регистр направления передачи DDR x, состояние которого определяет направление передачи и регистр ввода порта PIN x. В котором записываются принимаемые из выводов данные. Действительные названия регистров получаются подстановкой названия порта вместо символа «x», соответственно регистры порта A называются PORTA, DDRA, PINA, порта B — PORTB, DDRB, PINB и т. д. Поскольку с помощью регистров PIN x осуществляется доступ к физическим значениям сигналов на выводах порта, они доступны только для чтения, тогда как остальные два регистра доступны и для чтения, и для записи.
Конфигурирование портов ввода/вывода
Каждому выводу порта соответствуют по одному разряду трех регистров ввода/вывода: PORT xn (регистр PORT x), DD xn (регистр DDR x) и PIN xn (регистр PIN x). Действительные названия разрядов регистров получаются подстановкой названия порта вместо символа «x» и номера разряда вместо символа «n». Порядковый номер вывода порта соответствует порядковому номеру разряда регистров этого порта. Поэтому, если разрядность порта меньше восьми, в регистрах порта используется соответствующее число младших разрядов. Не задействованные старшие разряды регистров доступны только для чтения и всегда содержат «0». Разряд DD xn регистра DD x определяет направление передачи данных через контакт ввода/вывода. Если этот разряд установлен в «1», то n _й вывод порта является выходом, если же сброшен в «0» — входом. Если вывод функционирует как выход (DD xn = «1»), этот разряд определяет состояние вывода порта (вывод данных). Если выводимый разряд регистра PORT xn установлен в «1», на выводе устанавливается напряжение ВЫСОКОГО уровня. Если разряд сброшен в «0», на выводе устанавливается напряжение НИЗКОГО уровня. Если вывод функционирует как вход (DD xn= «0»), то данные заносятся в разряд регистра PIN xn для дальнейшего чтения програмой. В заключение отметим, что подавляющее большинство контактов ввода/вывода имеют дополнительные функции и могут использоваться различными периферийными устройствами микроконтроллеров. При этом возможны две ситуации. В одних случаях пользователь должен самостоятельно задавать конфигурацию вывода, а в других — вывод конфигурируется автоматически при включении соответствующего периферийного устройства. Об этом будет сказано при рассмотрении соответствующих периферийных устройств. .
Глава5. Таймеры Общие сведения Микроконтроллер Atmega 128 имеет в своем составе четыре таймера/счетчика общего назначения. Таймер/счетчик T0 имеет минимальный набор функций,. Он может использоваться для отсчета и измерения временных интервалов или как счетчик внешних событий, генерации сигналов с широтно_импульсной модуляцией (ШИМ) фиксированной разрядности, а также возможность работать в асинхронном режиме в качестве часов реального времени. Таймер/счетчик T1 тоже может использоваться для отсчета временных интервалов и как счетчик внешних событий. Кроме того, он может выполнять запоминание своего состояния по внешнему сигналу. Как и таймер/счетчик T0, он может работать в качестве широтно_импульсного модулятора, но уже переменной разрядности. Таймер/счетчик T2 полностью аналогичен таймеру/счетчику T0. Один из них может работать в асинхронном режиме, а другой — в качестве счетчика внешних событий. Таймер/счетчик T3 по функциональным возможностям идентичен таймеру/счетчику T1. В составе микроконтроллера имеется также сторожевой таймер, являющийся непременным атрибутом всех современных микроконтроллеров. Этот таймер позволяет избежать несанкционированного зацикливания программы, возникающего по тем или иным причинам.
|