- •1.4. Типовые периферийные модули микроконтроллеров
- •1.4.1. Модули параллельных портов ввода-вывода
- •1.4.2. Модули таймеров/счетчиков и процессоров событий
- •1.4.3. Модули последовательного обмена
- •1.4.4. Модуль аналого-цифрового преобразователя
- •1.4.5. Модуль цифроаналогового преобразователя
- •1.4.6. Модуль аналогового компаратора
- •1.5. Система команд микроконтроллера
- •1.5.1. Формат команд
- •1.5.2. Система команд
- •1.5.2. Методы адресации
- •1.6. Разработка прикладных программ
1.4. Типовые периферийные модули микроконтроллеров
1.4.1. Модули параллельных портов ввода-вывода
Данные, представленные в виде двоичных логических сигналов, являются одним из типов данных, наиболее часто используемых МК для обмена информацией с внешними объектами. Поэтому практически каждый МК имеет линии ввода-вывода таких данных, подключенные к внешним выводам. С помощью этих линий МК взаимодействует с внешними датчиками и управляет исполнительными устройствами.
Помимо обмена логическими данными через одиночные линии в МК используется и широко распространенный параллельный обмен информацией. Для этого одиночные линии ввода-вывода объединяются в параллельные порты ввода-вывода, подключенные к системной магистрали МК. Разрядность параллельных портов может быть различной, но чаще всего она равна 8.
По направлению передачи сигнала различают следующие типы параллельных портов:
однонаправленные порты, предназначенные только для ввода или только для вывода информации;
двунаправленные порты, направление передачи информации в которых определяется предварительной программной настройкой схемы;
порты с альтернативной функцией. Отдельные линии этих портов связаны со встроенными модулями, такими как таймер/счетчик, модуль прерываний, последовательный приемопередатчик и т. п.
Схемотехника портов весьма разнообразна. Она различна не только у МК одного семейства, но даже и у разных портов одного МК. Поэтому в данном разделе мы рассмотрим только общие принципы построения и функционирования параллельных портов ввода-вывода, оставляя подробности до изучения конкретного МК.
В большинстве современных МК поддерживается как независимое управление каждой линией параллельного порта, так и групповое управление всеми его разрядами. Поскольку схемотехника отдельных линий порта одинакова, то будем рассматривать устройство и функционирование только одного разряда.
Однонаправленные порты. Однонаправленные порты используются в МК не очень часто и по направлению передачи разделены на порты ввода и порты вывода.
Порты ввода. Схема входного однонаправленного порта, показанная на рис. 1.8, достаточно проста и ее основой является трехстабильный буферный усилитель B, который при подаче разрешающего сигнала чтения RDinp передает входной сигнал с вывода МК PX.Y на шину данных системной магистрали. В отсутствие RDinp усилитель находится в высокоомном состоянии (z-состоянии) и отключается от шины.
|
|
|
Рис. 1.8. Однонаправленный порт ввода |
С целью защиты от помех к входу PX.Y также могут подключаться так называемые «подтягивающие резисторы» Rpup (Pullup – «подтяжка» до логической 1) и Rpdn (Pulldown – «подтяжка» до логического 0). Эти резисторы предназначены для перевода входа в устойчивое состояние логического 0 или логической 1 и предотвращения произвольных переключений от помех в моменты, когда на входы не подается внешний сигнал. Посредством управляющего регистра DD1 «подтягивающие резисторы» могут быть включены в режим Pullup или Pulldown установкой управляющего сигнала Rpup/Rpdn с последующей активизацией стробом WRr.
Порты вывода. В зависимости от реализации выходного транзисторного каскада (драйвера) порты вывода подразделяются на двухтактные и однотактные.
|
|
|
Рис. 1.9. Однонаправленный двухтактный порт вывода |
Верхний по схеме триггер DD2, стробируемый сигналом WRen, управляет разрешением выхода. Если на вход этого триггера Разрешение выхода записан логический 0, то при любых сигналах с регистра-защелки DD1 на оба транзистора силового драйвера VT1 и VT2 подается запирающее напряжение, они закрываются и схема переводится в «высокоомное» состояние. В таком состоянии выходное сопротивление порта очень высоко и он фактически отключен от внутренних схем МК. Это часто бывает необходимо, когда к выходному порту подключены выходы других схем и МК необходимо разделять с ними общие линии передачи данных.
Если выход разрешен, то выходные данные с линии шины данных системной магистрали записываются в регистр-защелку DD1 по внутреннему сигналу записи WRout и через простейшую логическую схему управляют выходными транзисторами силового драйвера VT1 и VT2. Если в регистр записано значение логической 1, то транзистор VT2 закрыт, а VT1 открыт, подключая к выходу Vcc и фиксируя состояние логической 1. При записи значения логического 0 ситуация обратная и выход соединен с минусовой шиной питания, устанавливая на нем состояние логического 0.
Порты вывода с однотактной выходной схемой могут быть реализованы с внутренней или внешней нагрузкой и имеют более простую внутреннюю схему по сравнению с двухтактными портами. Схемы таких портов представлены на рис. 1.10.
|
|
|
Рис. 1.10. Однонаправленные однотактные порты вывода: а – с внутренней, б – с внешней нагрузкой |
Когда в регистр-защелку DD1 по линии шины данных записано стробом WRout значение логической 1, то транзистор VT1 закрыт и на выход через внутренний (рис. 1.10, а) или внешний (рис. 1.10, б) резистор R подается напряжение питания Vcc или Vext, устанавливая тем самым значение логической 1. Когда же в регистр-защелку записано значение логического 0, то транзистор открывается и соединяет выход с минусовой шиной питания, устанавливая значение логического 0. При этом резистор R оказывается подключенным между шинами питания и для ограничения тока через резистор его сопротивление делают достаточно высоким – 10…100 кОм.
В портах вывода с внешней нагрузкой (открытым коллектором или стоком) внешнее напряжение питания Vext может быть отличным от напряжения питания МК. Это делает подобный порт удобным средством для сопряжения схем с различными логическими уровнями или подключения высоковольтной нагрузки.
Двунаправленные порты. Двунаправленные порты являются самыми распространенными, и их различные модификации используются в МК практически всех семейств.
Самой простой схемой двунаправленного порта является квазидвунаправленный порт со схемой, аналогичной схеме порта вывода с однотактным выходным каскадом.
|
|
|
Рис. 1.11. Квазидвунаправленный порт ввода-вывода |
Режим чтения данного порта подобен тому, который был рассмотрен при описании однонаправленного входного порта. Однако имеется одна особенность, связанная с тем, что в нем нет схем переключения вход-выход.
Перед считыванием входных данных необходимо предварительно записать значение логической 1 в регистр-защелку выходных данных. Это закроет транзистор выходного каскада и исключит влияние схемы вывода на входной сигнал. При открытом транзисторе вывод МК «заземляется» и будет шунтировать входной сигнал. Естественно, что в режиме ввода резистор R останется подключенным к источнику входного сигнала, и будет являться для него дополнительной нагрузкой, но так как сопротивление резистора достаточно велико, то данная нагрузка не окажет заметного влияния даже на маломощный входной сигнал.
Второй особенностью является наличие буферного усилителя B1, с помощью которого можно считать состояние регистра-защелки DD1. Его применение позволяет исключить возможность ошибки при считывании информации с вывода порта, когда его состояние искажается подключаемой внешней нагрузкой. Подача логической 1 на вывод порта подключает его к нагрузке и возможна ситуация, при которой низкое входное сопротивление нагрузки шунтирует выход порта. Если после этого из прикладной программы считать состояние на выводе порта, то будет считан неверный результат – 0 вместо 1. Чтение же выхода триггера-защелки даст верный результат.
|
|
|
Рис. 1.12. Двунаправленный порт ввода-вывода |
Она объединяет описанные выше схемы порта ввода и порта вывода с двухтактной выходной схемой. Переключение между режимами ввода и вывода осуществляется триггером-защелкой DD1, состояние которого задается сигналом Ввод-вывод. Режим ввода задается записью логического 0. В этом случае оба транзистора переводятся в закрытое состояние, не зависящее от сигнала на линии вывода. При записи в DD1 логической 1 транзисторы управляются через регистр-защелку DD2 сигналами с линии шины данных, транслируя их значения на выход порта PX.Y.
В двунаправленных портах «подтягивающие» резисторы подключаются только в режиме ввода, и это должно учитываться логикой управления порта. На рис. 1.13 показан один из вариантов двунаправленного порта ввода-вывода с возможность программного подключения в режиме ввода «подтягивающего» резистора.
|
|
|
Рис. 1.13. Двунаправленный порт ввода-вывода с «подтягивающим» резистором |
Программное подключение «подтягивающего» резистора Rpup в этой схеме производится подачей сигнала логической 1 на вход PUP, причем нетрудно проследить, что логика управления обеспечивает это подключение только в режиме ввода.
Порты с альтернативной функцией. Ранее упоминалось, что кроме исполнения стандартных функций параллельного порта ввода-вывода, внешние выводы микросхемы могут быть задействованы и для работы с внутренними системными и функциональными периферийными модулями МК. Данные функции называются альтернативными и при их включении основные схемы порта переводятся в состояние ввода или вообще отключаются. Пример подобной схемы двунаправленного порта с возможностью переключения на альтернативную функцию показан на рис. 1.14.
|
|
|
Рис. 1.14. Двунаправленный порт ввода-вывода с альтернативной функцией |
Здесь переключение на альтернативную функцию производится с помощью триггера DD1 подачей сигнала Разрешение альтернативной функции и его стробированием сигналом WRa. При этом затворы транзисторов выходного каскада переключаются на обработку альтернативной функции выхода. Перед использованием альтернативной функции входа буферный усилитель B переводится в отключенное состояние, препятствующее прохождению альтернативного сигнала на линию шины данных.







