Краткие теоретические сведения. Практически ни один проект с микроконтроллерами не обходится без операций ввода/вывода через цифровые порты

Практически ни один проект с микроконтроллерами не обходится без операций ввода/вывода через цифровые порты. Микроконтроллеры семейства PIC33F предоставляют разработчику широкие возможности по работе с дискретными сигналами благодаря наличию достаточного количества портов ввода/вывода и некоторым функциям, расширяющим функциональность самих портов.

Порты ввода/вывода общего назначения — это простейшие периферийные устройства, с помощью которых PIC микроконтроллер может получать цифровые данные и управлять другими устройствами (рисунок 23). Дополнительную гибкость при работе с портами ввода/вывода обеспечивает и то, что их можно настроить для выполнения альтернативных функций.

Рисунок 23 – Структура линии порта, объединенной с выводами периферийных функций

Все выводы микроконтроллера (кроме выводов питания Vdd, Vss, AVdd, AVss, VCap и вывода сброса MCLR) могут использоваться как периферийными модулями, так и параллельными портами ввода/вывода. Все вводные линии портов имеют триггер Шмидта по входу для исключения влияния электромагнитных помех и шумов.

Линии ввода/вывода микроконтроллера разделены на три порта: RA, RB, RC. Подавляющее большинство линий ввода/вывода всех портов имеют дополнительные функции и могут использоваться различными периферийными модулями микроконтроллера.

Мультиплексор выбирает, каким образом функционирует линия порта (в качестве части периферийного модуля, либо в качестве линии параллельного порта ввода/вывода). Таким образом, перед использованием таких линии в качестве линий порта ввода/ вывода необходимо предварительно отключить соответствующие периферийные устройства. Например, при использовании порта RA2 как линии ввода, необходимо отключить дополнительную функцию порта RA2 (выход тактирующего сигнала внутреннего генератора) следующей директивой:

_FOSC(OSCIOFNC_ON & POSCMD_NONE)

Для работы с портами каждый из них имеет 3 специальных регистра:

1 TRISx1 – регистр направления данных – задаёт каким образом используется линия порта (как вход либо как выход). При установке соответствующего бита в 1 линия порта будет сконфигурирована как вход.

Действительные названия регистров получаются подстановкой названия порта вместо символа х.Соответственно, регистры порта А называются TRISA, LATA, PORTA, порта В - TRISB, LATB, PORTB, порта C -TRISC, LATC, PORTC.

2 LATx – регистр выводов порта – при установке соответствующего бита в 1 данного регистра позволяет установить высокий уровень сигнала на выходе линии порта, при установке соответствующего бита в 0 – низкий уровень сигнала.

3 PORTx – регистр состояния порта – чтение соответствующего бита из данного регистра позволяет получить состояние сигнала (высокий либо низкий уровень) на входе линии порта.

Примечание – Для того, чтобы установка бита регистра LATx приводила к соответствующему изменению состояния линии вывода порта, необходимо чтобы эта линия была предварительно сконфигурирована как выход установкой требуемого бита в регистре TRISx. Аналогично, чтобы чтение бита регистра PORTx отображало действительное состояние линии ввода порта, необходимо чтобы эта линия была предварительно сконфигурирована как вход установкой требуемого бита в регистре TRISx.

Таким образом, настройка линии 2 порта RA на вход осуществляется следующим образом:

TRISA |= (1 << 2);

а настройка линии 15 порта RB на выход осуществляется следующим образом:

TRISB &= ~(1 << 15).

Так же MPLAB позволяет обращаться напрямую к битам регистров портов. Используя такой приём, вышеприведённые примеры будут выглядеть следующим образом:

TRISAbits.TRISA2 = 1;

TRISBbits.TRISB15 = 0;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: