Как настроить порты для ввод вывод

Как настроить разряды PORTD на ввод и на вывод?

Порты ввода/вывода (ПВВ) – предназначены для общения микроконтроллера с внешними устройствами. С их помощью мы передаем информацию другим устройствам и принимаем информацию от них. В зависимости от типа, микроконтроллер может иметь на своем борту от одного до семи ПВВ. Каждому порту ввода/вывода присвоено буквенное обозначение – A, B, C, D, E, F, G. Все порты в микроконтроллере равнозначные, восьмиразрядные (содержат восемь линий, они же выводы, они же разряды, они же биты) и двунаправленные – могут как передавать, так и принимать информацию. ПВВ в микроконтроллере обслуживают все его устройства, в том числе и периферийные. Поэтому, в зависимости от того какое устройство будет работать с портом он может принимать и передавать или цифровую информацию, или аналоговую. Как и переключатель Sin, Sout – это регистр ввода/вывода под названием PORTx, где “х” – буквенное обозначение порта (к примеру для порта D регистр будет иметь вид – PORTD).

В семейств МК Mega имеется дополнительный переключатель – PUD, — 2-й разряд регистра ввода/вывода SFIOR (он называется “Регистр специальных функций”). С помощью этого PUD осуществляется общее управление подтягивающими резисторами:

— при записи в этот разряд “1” – все подтягивающие резисторы для всех портов отключаются;

– при записи в этот разряд “0” – состояние подтягивающих резисторов определяется регистром PORTx.

Зачем нужно общее отключение резисторов, да и этот PUD заодно, мы сегодня рассматривать не будем.

В режиме работы разрядов порта на вывод, задача регистра PORTx очень проста – то, что мы в него запишем, то и будет на выходе. Запишем одни “нули” – на выходах буду логические нули, запишем “единицы” – на выходе буду логические “единицы”.

Если разряд порта настроен на ввод информации, то с его помощью подключается так называемый “подтягивающий резистор” – Rup, или “внутренний нагрузочный резистор”. Благодаря этому резистору упрощается подключение внешних кнопок и переключателей, т.к. обычно контакты требуют внешнего резистора.

Настраиваем порт В на вывод информации:

Idi R20, 0b11111111

Выводим в разряды 0-3 логический ноль, а в разряды 4-7 логическую единицу:

Idi R20, 0b11110000

Что выполняет инструкция BTFSS PORTD, 2?

BTFSS — Проверить бит b в регистре f, пропустить, если b = 1.

Синтаксис: [label] BTFSS f, b.

Операнды: 0£f£127; 0£b£7.

Изменяемые флаги: Нет.

Описание: Если бит b в регистре f равен ‘1’, то следующая инструкция программы пропускается.

Что выполняет инструкция BTFSC PORTD, 2?

BTFSC — Проверить бит b в регистре f, пропустить следующую инструкцию, если b=0.

Синтаксис: [label] BTFSC f, b.

Операнды: 0£f£127; 0£b£7.

Изменяемые флаги: Нет.

Описание: Если бит b в регистре f равен 0, то следующая инструкция программы пропускается.

93Что записано в файле p16F877.inc?
Карта памяти данных PIC16F87x.В МК этого семейства существует память программ и память данных. Память данных состоит из четырех банков, нумеруемых 0, 1, 2 и 3 (приложение Б). Информация в банках хранится в регистрах, состоящих из 8 разрядов (бит). Они делятся на регистры общего назначения (РОН), которые может использовать программист для хранения констант, и регистры специального назначения (РСН), выполняющие определенные функции управления работой микроконтроллера. Банки имеют нумерацию в двоичной системе: 00 – банк ‘0’, 01 – банк ‘1’, 10 – банк ‘2’, 11 – банк ‘3’.

Читайте также:  Почему сейфом не работает

В каждом банке находится 128 регистров.

Адреса регистров нумеруются в шестнадцатеричной системе, начиная с адреса 00h, который находится в нулевом банке и кончая адресом 1FFh, который находится в 3-м банке. К РСН обычно обращаются по его имени. Программист, используя РОН для хранения констант или промежуточных данных, обычно присваивает им имена, названия которых позволяют легче реализовывать разработанный алгоритм.

Порядок отладки программы.

Чтобы проверить работоспособность созданной программы и увидеть результаты ее работы (если не использован вывод на дисплей), применяют программу отладчик. Тестирование и отладка исполняемой программы выполняется отладчиком TD или DEBUG.

Отладчик td.exe, разработанный фирмой Borland International представляет собой оконную среду отладки программ на уровне исходного текста на языках Pascal, C, ассемблер. Основные возможности отладчика, наиболее широко используемые студентами — это:

— выполнение трассировки программы в прямом направлении, при котором за 1 шаг выполняется одна машинная инструкция;

— просмотр и изменения состояния аппаратных ресурсов микропроцессора во время командного выполнения программы.

Управлять работой отладчика можно с помощью системы меню двух типов:

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

— локального, учитывающего особенности окон и становящегося активным щелчком правой мыши или нажатием клавиш Alt+F10.

Назначение РСН INTCON?

Регистр INTCON доступен для чтения и для записи. Он содержит

биты масок прерываний и флаги прерываний. Флаги прерываний

должны сбрасываться программно. Регистр показан в таблице Ж.3.

Назначение битов регистра INTCON приведено ниже.

Бит 7: GIE – Общее (глобальное) управление прерываниями.

1=все немаскируемые прерывания разрешены.

0=все прерывания запрещены.

Примечание: Если происходит прерывание, то бит GIE сбрасывается. По команде выхода из подпрограммы (RETFIE) этот бит устанавливается.

Бит 6: PEIE – маска прерываний от периферийных устройств 1=все немаскируемые прерывания периферийных устройств разрешены

0=все прерывания периферийных устройств запрещены

Бит 5: T0IE – маска прерывания по переполнению TMR0

1=прерывание TMR0 разрешено

0= прерывание TMR0 запрещено

Бит 4: INTE – маска внешнего прерывания по входу RB0/INT

1=прерывание по входу RB0/INT разрешено

0=прерывание по входу RB0/INT запрещено

Бит 3: RBIE – маска прерывания по изменению состояния на

входах RB7: RB4 PORTB

1=прерывание по изменению уровня сигнала на входах RB7: RB4 PORTB разрешено

0=прерывание по изменению уровня сигнала на входах RB7: RB4 PORTB запрещено

Бит 2: T0IF – флаг прерывания при переполнении TMR0

1=устанавливается, если регистр TMR0 переполнен (очищается

0=если регистр TMR0 не переполнен

Бит 1: INTF – флаг внешнего прерывания по входу RB0/INT

1=устанавливается, если происходит прерывание по входу

0=если прерывание по входу RB0/INT не произошло

Бит 0: RBIF – флаг прерывания по изменению уровня сигнала на входах RB7: RB4 PORTB

1=устанавливается, если изменился уровень сигнала на одном из входов RB7:RB4 PORTB (очищается программно)

0=если уровень сигнала на входах RB7:RB4 не изменились.

Источник

StartMilandr

Инструменты пользователя

Инструменты сайта

Содержание

GPIO — Настройка портов ввода-вывода

GPIO — General Purpose Input Output это выводы микроконтроллера, которые можно настраивать под свои цели. Они могут использоваться просто как порты на вывод и вход, например логических «0» и «1». Могут иметь дополнительные, например аналоговые функции для работы с АЦП. Могут использоваться аппаратно для реализации различных интерфейсов взаимодействия, например UART, SPI и т.д. Количество портов в каждом процессоре разное, как и распределение по ним дополнительных функций. Информацию по данному вопросу необходимо смотреть в спецификации в разделе «Порты ввода вывода MDP_PORTx»

Читайте также:  Что делать если новое ашкьюди не работает

Работа порта ближе к схемотехнике рассмотрена в «Схемотехника портов GPIO».

Управление портами на примере функций SPL.

Функции SPL реализуют настройку и управление портами через именованные поля, структуры и значения. Каждый параметр настройки имеет свое отдельное поле в структуре, в большинстве своем имеет перечислимый тип значения этого поля и краткое описание в комментариях. Это очень удобно и позволяет избежать ошибок при работе. Кроме этого, одна и та же функция SPL реализует одинаковое поведение для всех поддерживаемых SPL процессоров. То есть поля в регистрах или сами регистры, их адреса могут отличаться, от процессора к процессору, но функция вызванная с одинаковым аргументом выполнит одинаковое действие. Таким образом реализуется стандартное поведение функций при различии реализации в железе.

Минусом использования SPL является больший размер программы (прошивки) и сниженное быстродействие. Зато сводится к минимуму возможность совершить ошибку. Поэтому для освоения программирования рекомендуется начинать работу с функциями SPL, добиваться работоспособности проекта, а затем модифицировать критические куски кода к регистровому исполнению.

Настройку порта рассмотрим на примере использования порта PORT_C вывод pin_0, сокращенно PC0. Этот вывод используется в программе «Hello World — светодиод».

Инициализация порта

Первым действием всегда включается тактирование. Подробнее — Тактирование процессора.

Функция PORT_StructInit заполняет структуру конфигурации порта значениями по умолчанию.

PORT_Pin

Это маска выбора выводов для которых будет применена данная конфигурация. Возможны варианты PORT_Pin_0 .. PORT_Pin_15, PORT_Pin_All и всевозможные варианты масок из этих значений. Например, для применения конфигурации к выводам 0 и 1 используется PORT_Pin = PORT_Pin_0 | PORT_Pin_1.

В процессоре 1986ВЕ92У есть 6 портов ввода вывода (A, B, C, D, E, F). Обычно каждый порт имеет по 16 выводов (ножек), которые можно настроить по отдельности. Но количество выводов у микросхемы может быть сокращено в целях экономии, например у данного процессора в корпусе LQFP64 порт А имеет только выводы PA0 — PA7. Название вывода берется из названия порта и номера вывода.

PORT_OE

Это поле настраивает порт на вывод данных или на вход. Возможные варианты PORT_OE_OUT и PORT_OE_IN, в первом случае мы будем писать в порт, а во втором считывать из порта.

PORT_PULL_UP и PORT_PULL_DOWN

Эти параметры задают подтяжку вывода к линии питания или земли. Обычно это используется когда вывод используется как вход. Резистор подтяжки составляет порядка

50КОм, точное значение необходимо уточнять в спецификации на микропроцессор.

Возможные варианты значений для PORT_PULL_UP это PORT_PULL_UP_OFF и PORT_PULL_UP_ON, а для PORT_PULL_DOWN соответственно PORT_PULL_DOWN_OFF и PORT_PULL_DOWN_ON. Важно не путать эти значения, нельзя например сделать так PORT_PULL_DOWN = PORT_PULL_UP_OFF. Очень часто значения являются определенными битовыми масками, которые в итоге должны расположиться в по нужному смещению в регистре. Поэтому PORT_PULL_UP_OFF не равно PORT_PULL_DOWN_OFF, и важно их не путать.

PORT_PD_SHM

Этот параметр включает — выключает использование триггера Шмитта. Этот триггер известен тем, что имеет гистерезис и при некотором отклонении напряжения dU от заданного логического уровня на входе сохраняет текущее логическое значение на выходе. Например, если если ножка настроена на вход и напряжение на ней равно напряжению питания, то микроконтроллер трактует это, как наличие логической «1» на входе. Если в какой-то момент на линии появится помеха, или наводка такая, что напряжение на входе просядет меньше чем на dU, то микропроцессор будет по прежнему трактовать это как логическая «1». С логическим нулем ситуация аналогичная.

Читайте также:  Как настроить варзону что бы не лагало

Это поле может принимать следующие значения, при PORT_PD_SHM_OFF dU = 200 мВ, а при PORT_PD_SHM_On = 400 мВ.

PORT_PD

Параметр определяет подключение вывода как управляемый драйвер PORT_PD_DRIVER, либо как открытый сток — PORT_PD_OPEN.

PORT_PD_DRIVER — обычный режим работы, его еще называют тяни-толкай (push-pull). Это режим с двумя устойчивыми состояниями «0» и «1». Когда мы пишем «1» то вывод через полевые транзисторы подключается к цепи питания и отключается от земли, таким образом на выходе появляется напряжение питания. Когда записывается в порт логический «0», то отключается питание и подключается земля, так формируется 0 на выводе.

В режиме PORT_PD_OPEN вывод отключается от транзистора коммутирующего его с цепью питания, то есть мы может только просаживать внешнюю линию на 0, а при записи 1 это «просаживание» отключается. В таком режиме подразумевается, что используется внешняя подтяжка к питанию, как это происходит например на шине I2C.

PORT_GFEN

Режим работы входного фильтра PORT_GFEN_OFF — выключен и PORT_GFEN_ON — фильтрация импульсов до 10 нс.

PORT_MODE

Параметр определяет в каком режиме будет работать вывод контроллера в аналоговом PORT_MODE_ANALOG или в цифровом PORT_MODE_DIGITAL. Аналоговый режим используется, например, когда через ножку заводится аналоговый сигнал для оцифровки внутренним АЦП. При выводе аналогового сигнала от встроенного ЦАП используется такой же режим.

Назначение ножек при использовании в аналоговом режиме следует смотреть в спецификации раздел «Порты ввода — вывода». Например, в семействе 1986ВЕ9х вывод РЕ9 (Port_E, вывод порта 9) является выводом встроенного DAC1.

PORT_FUNC

Данный параметр задает какую функцию будет исполнять порт в цифровом режиме. Есть четыре варианта значений этого параметра. Основная функция это PORT_FUNC_PORT — вывод используется как стандартный порт ввода-вывода. В этом режиме мы сами пишем и читаем состояние вывода микроконтроллера. В остальных режимах PORT_FUNC_MAIN, PORT_FUNC_ALTER, PORT_FUNC_OVERRID вывод используется в аппаратно реализованных алгоритмах, например UART, SPI и прочих.

Как будет использоваться вывод при задании определенной функции необходимо смотреть в спецификации раздел «Порты ввода — вывода». Например, для 1986ВЕ9х вывод РЕ12 в функции MAIN является 28-й линией шины адреса, в функции ALTER — линией RXD в аппаратной реализации SPI, в функции OVERRID — линией RXD в аппаратной реализации UART1.

Вывод Analog DIGITAL
PORT MAIN ALTER OVERRID
РЕ12 — РЕ12 ADDR28 SSP1_RXD UART1_RXD

В аналоговом режиме данный порт не имеет применения.

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

PORT_SPEED

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

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

Работа порта ближе к схемотехнике рассмотрена в «Схемотехника портов GPIO».

Управление портами через регистры.

SPL делает настройку портов более читаемой, и предохраняет нас от случайных ошибок. В конечном итоге функции SPL задают наши параметры в регистры настроек выводов портов. Эти регистры представлены на следующей картинке, описание же находится в «Схемотехника портов GPIO».

Источник

Оцените статью