Для работы с портами ввода вывода необходимо разобраться как эти потами управлять.
В описываемом контроллере PIC32MX795F512H присутствует 6 портов, доступны следующие порты
Порт RB доступные разряды 0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15
Порт RC доступные разряды 12-13-14-15
Порт RD доступные разряды 0-1-2-3-4-5-6-7-8-9-10-11
Порт RE доступные разряды 0-1-2-3-4-5-6-7
Порт RF доступные разряды 0-1-3-4-5
Порт RG доступные разряды 2-3-6-7-8-9
Регистры управления и контроля, по умолчанию (состояние при подаче описания) необходимо смотреть в описании конкретного контроллера.
TRISх – регистр управления направлением передачи цифровых данных. Пример инициализации, все выводы на передачу данных из микроконтроллера, кроме RB0 на ввод информации, представления в двоичном виде более наглядно дает представление какой разряд настроен на какое направление. И в таком варианте мы одной командой настраиваем сразу весь порт.
1 |
TRISB = 0b0000000000000001; // регистр направления данных |
PORTх – регистр информации о состоянии сигналов на выводах порта микроконтроллера. Считывая информацию с этого регистра мы можем увидеть какие сигналы реально присутствуют на выводах порта. Пример инициализации порта. В порт можно писать, при этом компилятор переопределяет запись в регистр LAT.
1 |
PORTB = 0; // регистр приема данных |
LATх – регистр управления состоянием выходного буфера, регистр передаваемых данных. Запись 1 в этот регистр позволяет установить высокий уровень на выходе порта, 0 – в низкий. Пример инициализации порта:
1 |
LATB = 0; // регистр передаваемых данных |
ODCх – регистр управления для переключение порта для функции “открытого коллектора” или стока. Многие приложения требуют для подключения в варианте “замыкания” внешнего сигнала на массу, без возможности подачи в линию высокого уровня.
1 |
ODCB = 0; // регистр настройки открытого коллектора |
CNPUE – регистр подключения к выводу порта подтягивающего резистора. При установки соответствующего разряда в 1 на соответствующем входе подключается подтягивающий резистор и соответственно при чтение данных с этого порта будет считываться высокий уровень. инициализация регистра – отключить все резисторы.
1 |
CNPUE = 0; // регистр управления подтягивающими резисторами |
Внимание, как определить какой бит регистра соответствует какому выводу. На схеме микроконтроллера при описании выводов есть обозначение CN. Например, соответствие обозначение CNPUE2 соответствует на схеме CN2.
1 |
CNPUE = 0b0000000000000100; // установить подтягивающий резистор на входе RB0 |
Нововведением – это регистры установки, сброса и инверсии бита порта SET, INV, CLR. Эти регистры позволяют одной операций выполнить необходимую функцию, подобными регистрами обладают многие регистры микроконтроллера, для установки, сброса или инверсии необходимо использовать маску, значение в маске “1” оказывает воздействие на текущий бит, если “0” значение бита не изменяется.
Написание регистров на примере регистра порта В – LATBSET, LATBCLR, LATBINV.
Например, установить в 1 на выводе порта RB13, биты в состоянии 1 устанавливаются, в состоянии 0 не изменяются.
1 |
PORTBSET = 0b0010000000000000; // установить RB13 -> 1 |
Сбросить в 1 на выводе порта RB13, биты в состоянии 1 устанавливаются, в состоянии 0 не изменяются.
1 |
LATBCLR = 0b0010000000000000; // сбросить RB13 -> 1 |
Инвертировать в 1 на выводе порта RB13, биты в состоянии 1 устанавливаются, в состоянии 0 не изменяются.
1 |
LATBINV = 0b0010000000000000; // инвертировать RB13 -> 1 |
Пример:
1 2 3 4 5 6 7 |
//например описываем бит расположения светодиода #define LED01 0x1000 //включаем его на порту В LATBSET = LED01 |
Регистр контроля изменения состояния на порту микроконтроллера.
CNCON регистр управления
В этом регистре все го два бита управления. Бит ON – включает или выключает функцию контроля, бит SIDL – разрешает работу функции в режиме ожидания (idle). например, в программе
1 2 3 |
//регистр контроля - функция по изменению состояния на входах CNCONbits.ON=0; // отключен CNCONbits.SIDL=0; // в режиме ожидания не активна |
CNEN регистр разрешения по активации функции по изменения состояния по конкретным входам. Для нашего микроконтроллера это выводы (для других контроллеров смотрите описание) по умолчанию все отключены, запись – 1 активирует функцию контроля.
CNPUE – регистр разрешения подтягивающих резисторов на входах
название – вывод
CN0 48
CN1 47
CN2 16
CN3 15
CN4 14
CN5 13
CN6 12
CN7 11
CN8 4
CN9 5
CN10 6
CN11 8
CN12 30
CN13 52
CN14 53
CN15 54
CN16 55
CN17 31
CN18 32
продолжение следует…