Встроенные системы - программирование ввода / вывода

В 8051 операции ввода / вывода выполняются с использованием четырех портов и 40 контактов. Следующая диаграмма выводов показывает детали 40 выводов. Порт операций ввода / вывода резервирует 32 контакта, где каждый порт имеет 8 контактов. Другие 8 контактов обозначены как V cc , GND, XTAL1, XTAL2, RST, EA (полоса), ALE / PROG (полоса) и PSEN (полоса).

Это 40-контактный PDIP (пластиковый двойной встроенный пакет)

ПИН-схема

Примечание. В пакете DIP вы можете распознать первый и последний контакты по разрезу в середине микросхемы. Первый штифт находится слева от этой метки реза, а последний штифт (т.е. в данном случае 40- й штифт) находится справа от метки реза.

Порты ввода / вывода и их функции

Четыре порта P0, P1, P2 и P3, каждый использует 8 контактов, делая их 8-битными портами. После СБРОСА все порты настраиваются как входы, готовые для использования в качестве входных портов. Когда первый 0 записывается в порт, он становится выходом. Чтобы перенастроить его как вход, 1 должен быть отправлен в порт.

Порт 0 (контакт № 32 - контакт № 39)

Он имеет 8 контактов (от 32 до 39). Может использоваться для ввода или вывода. В отличие от портов P1, P2 и P3, мы обычно подключаем подтягивающие резисторы P0 к 10 кОм, чтобы использовать их в качестве входного или выходного порта с открытым стоком.

Он также обозначен как AD0-AD7, что позволяет использовать его как адрес и данные. В случае 8031 (т. Е. Чипа без ROM), когда нам нужно получить доступ к внешнему ROM, тогда P0 будет использоваться как для адреса, так и для шины данных. ALE (контакт № 31) указывает, есть ли у P0 адрес или данные. Когда ALE = 0, он предоставляет данные D0-D7, но когда ALE = 1, он имеет адрес A0-A7. В случае отсутствия подключения к внешней памяти, P0 должен быть подключен извне к нагрузочному резистору на 10 кОм.

Схема порта 0
MOV A,#0FFH  ;(comments: A=FFH(Hexadecimal  i.e. A=1111 1111)  

MOV P0,A     ;(Port0 have 1's on every pin so that it works as Input)

Порт 1 (контакт 1-8)

Это 8-битный порт (контакты с 1 по 8) и может использоваться как вход или выход. Это не требует подтягивающих резисторов, потому что они уже подключены внутри. После сброса порт 1 настраивается как входной порт. Следующий код можно использовать для отправки чередующихся значений 55H и AAH в порт 1.

;Toggle all bits of continuously 
MOV     A,#55 
BACK:    

MOV     P2,A 
ACALL   DELAY 
CPL     A      ;complement(invert) reg. A 
SJMP    BACK

Если порт 1 настроен для использования в качестве выходного порта, то для повторного использования его в качестве входного порта запрограммируйте его, записав 1 во все его биты, как показано в следующем коде.

;Toggle all bits of continuously 

MOV     A ,#0FFH    ;A = FF hex 
MOV     P1,A        ;Make P1 an input port                     
MOV     A,P1        ;get data from P1 
MOV     R7,A        ;save it in Reg R7 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R6,A        ;save it in R6 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R5,A        ;save it in R5

Порт 2 (контакты с 21 по 28)

Порт 2 занимает всего 8 контактов (контакты с 21 по 28) и может использоваться как для операций ввода, так и для вывода. Как и P1 (порт 1), P2 также не требует внешних подтягивающих резисторов, поскольку они уже подключены внутри. Он должен использоваться вместе с P0 для предоставления 16-битного адреса для внешней памяти. Поэтому он также обозначен как (A0 – A7), как показано на схеме контактов. Когда 8051 подключен к внешней памяти, он обеспечивает путь для старших 8 бит 16-битного адреса и не может использоваться как ввод / вывод. После сброса порт 2 настраивается как входной порт. Следующий код может использоваться для отправки чередующихся значений 55H и AAH на порт 2.

;Toggle all bits of continuously 
MOV     A,#55 
BACK: 
MOV     P2,A 
ACALL   DELAY 
CPL     A         ; complement(invert) reg. A 
SJMP    BACK

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

;Get a byte from P2 and send it to P1 
MOV    A,#0FFH    ;A = FF hex 
MOV    P2,A       ;make P2 an input port 
BACK: 
MOV    A,P2       ;get data from P2 
MOV    P1,A       ;send it to Port 1
SJMP   BACK       ;keep doing that

Порт 3 (контакты с 10 по 17)

Он также имеет 8 битов и может использоваться как вход / выход. Этот порт обеспечивает некоторые чрезвычайно важные сигналы. P3.0 и P3.1 - это RxD (приемник) и TxD (передатчик), соответственно, и совместно используются для последовательной связи. Контакты P3.2 и P3.3 используются для внешних прерываний. P3.4 и P3.5 используются для таймеров T0 и T1 соответственно. P3.6 и P3.7 - это контакты записи (WR) и чтения (RD). Это активные нижние контакты, то есть они будут активны, когда им дается 0, и они используются для обеспечения операций чтения и записи во внешнее ПЗУ в системах на базе 8031.

Бит P3 функция Штырь
P3.0 RxD 10
P3.1 < TxD 11
P3.2 < Дополнение к INT0 12
P3.3 < INT1 13
P3.4 < T0 14
P3.5 < T1 15
P3.6 < WR 16
P3.7 < Дополнение RD 17

Двойная роль порта 0 и порта 2

  • Двойная роль порта 0 - порт 0 также обозначен как AD0 – AD7, поскольку его можно использовать как для обработки данных, так и для обработки адресов. При подключении 8051 к внешней памяти, порт 0 может предоставлять как адрес, так и данные. Микроконтроллер 8051 затем мультиплексирует вход в качестве адреса или данных, чтобы сохранить контакты.

  • Двойная роль порта 2 - Помимо работы в качестве ввода-вывода, порт P2 также используется для предоставления 16-разрядной адресной шины для внешней памяти наряду с портом 0. Порт P2 также обозначается как (A8– A15), в то время как порт 0 обеспечивает младшие 8 бит через A0 – A7. Другими словами, мы можем сказать, что когда 8051 подключен к внешней памяти (ПЗУ), которая может быть максимально до 64 КБ, и это возможно по 16-битной адресной шине, потому что мы знаем 216 = 64 КБ. Порт 2 используется для старшего 8-битного 16-битного адреса, и его нельзя использовать для ввода-вывода, и именно так адресуется любой программный код внешнего ПЗУ.

Аппаратное соединение контактов

  • V cc - контакт 40 обеспечивает питание для чипа и составляет +5 В.

  • Gnd - контакт 20 обеспечивает заземление для эталона .

  • XTAL1, XTAL2 (контакт № 18 и № 19) - 8051 имеет встроенный генератор, но для его работы требуются внешние часы. Кристалл кварца подключен между выводами XTAL1 и XTAL2 микросхемы. Этот кристалл также нуждается в двух конденсаторах 30 пФ для генерации сигнала желаемой частоты. Одна сторона каждого конденсатора соединена с землей. Микросхема 8051 доступна с различными скоростями, и все зависит от этого кварцевого кристалла, например, для микроконтроллера 20 МГц требуется кристалл с частотой не более 20 МГц.

Диаграмма XTAL1, XTAL2
  • RST (контакт № 9) - это входной контакт и активный верхний контакт. После подачи высокого импульса на этот вывод, то есть 1, микроконтроллер перезагрузится и завершит все действия. Этот процесс известен как сброс при включении питания . Активация сброса при включении приведет к потере всех значений в регистре. Это установит программный счетчик на все 0. Чтобы обеспечить действительный вход сброса, высокий импульс должен быть высоким в течение как минимум двух машинных циклов, прежде чем ему будет разрешено опуститься, что зависит от значения конденсатора и скорости, с которой он заряжается. ( Машинный цикл - это минимальная частота, требуемая для выполнения одной инструкции).

  • EA или внешний доступ (контакт № 31) - это входной контакт. Этот вывод является активным низким выводом; после применения низкого импульса, он активируется. В случае микроконтроллера (8051/52), имеющего встроенное ПЗУ, вывод EA (полоса) подключается к V cc . Но в микроконтроллере 8031, который не имеет встроенного ПЗУ, код сохраняется во внешнем ПЗУ и затем выбирается микроконтроллером. В этом случае мы должны подключить советник (контакт № 31) к Gnd, чтобы указать, что программный код хранится извне.

RST, диаграмма EA
  • Включение PSEN или хранилища программ (вывод № 29) - это также активный низкий вывод, т. Е. Он активируется после подачи низкого импульса. Это выходной вывод, который используется вместе с выводом EA в системах на основе 8031 (т.е. ROM LESS ) для хранения программного кода во внешнем ПЗУ.

  • ALE или (Address Latch Enable) - это выходной контакт, который активен на высоком уровне. Он особенно используется для 8031 IC для подключения к внешней памяти. Его можно использовать при принятии решения, будут ли контакты P0 использоваться в качестве шины адреса или шины данных. Когда ALE = 1, контакты P0 работают как шина данных, а когда ALE = 0, контакты P0 действуют как шина адреса.

Порты ввода / вывода и битовая адресация

Это наиболее широко используемая функция 8051 при написании кода для 8051. Иногда нам нужно получить доступ только к 1 или 2 битам порта вместо целых 8 бит. 8051 обеспечивает возможность доступа к отдельным битам портов.

При доступе к порту однобитным способом мы используем синтаксис «SETB X. Y», где X - номер порта (от 0 до 3), а Y - номер бита (от 0 до 7) для битов данных D0-D7. где D0 - LSB, а D7 - MSB. Например, «SETB P1.5» устанавливает старший бит 5 порта 1.

Следующий код показывает, как мы можем непрерывно переключать бит P1.2.

AGAIN: 
SETB    P1.2
ACALL   DELAY    
CLR     P1.2      
ACALL   DELAY 
SJMP    AGAIN

Одноразрядные инструкции

инструкции функция
Бит SETB Установите бит (бит = 1)
Бит CLR очистить бит (бит = 0)
Бит CPL дополнить бит (бит = НЕ бит)
JB бит, цель перейти к цели, если бит = 1 (перейти, если бит)
Бит JNB, цель перейти к цели, если бит = 0 (перейти, если нет бита)
Бит JBC, цель перейти к цели, если бит = 1, сбросить бит