В 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 кОм.
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-битного адреса, и его нельзя использовать для ввода-вывода, и именно так адресуется любой программный код внешнего ПЗУ.
Двойная роль порта 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 МГц.
V cc — контакт 40 обеспечивает питание для чипа и составляет +5 В.
Gnd — контакт 20 обеспечивает заземление для ссылки.
XTAL1, XTAL2 (контакт № 18 и № 19) — 8051 имеет встроенный генератор, но для его работы требуются внешние часы. Кристалл кварца подключен между выводами XTAL1 и XTAL2 микросхемы. Этот кристалл также нуждается в двух конденсаторах 30 пФ для генерации сигнала желаемой частоты. Одна сторона каждого конденсатора соединена с землей. Микросхема 8051 доступна с различными скоростями, и все зависит от этого кварцевого кристалла, например, для микроконтроллера 20 МГц требуется кристалл с частотой не более 20 МГц.
-
RST (контакт № 9) — это входной контакт и активный верхний контакт. После подачи высокого импульса на этот вывод, то есть 1, микроконтроллер сбросит и завершит все действия. Этот процесс известен как Сброс при включении питания . Активация сброса при включении питания приведет к потере всех значений в регистре. Это установит программный счетчик на все 0. Чтобы обеспечить действительный вход сброса, высокий импульс должен быть высоким в течение как минимум двух машинных циклов, прежде чем ему будет разрешено опуститься, что зависит от значения конденсатора и скорости, с которой он заряжается. ( Машинный цикл — это минимальная частота, требуемая для выполнения одной инструкции).
-
EA или внешний доступ (контакт № 31) — это входной контакт. Этот вывод является активным низким выводом; после применения низкого импульса, он активируется. В случае микроконтроллера (8051/52), имеющего встроенное ПЗУ, вывод EA (стержень) подключается к V cc . Но в микроконтроллере 8031, который не имеет встроенного ПЗУ, код сохраняется во внешнем ПЗУ и затем выбирается микроконтроллером. В этом случае мы должны подключить советник (контакт № 31) к Gnd, чтобы указать, что программный код хранится извне.
RST (контакт № 9) — это входной контакт и активный верхний контакт. После подачи высокого импульса на этот вывод, то есть 1, микроконтроллер сбросит и завершит все действия. Этот процесс известен как Сброс при включении питания . Активация сброса при включении питания приведет к потере всех значений в регистре. Это установит программный счетчик на все 0. Чтобы обеспечить действительный вход сброса, высокий импульс должен быть высоким в течение как минимум двух машинных циклов, прежде чем ему будет разрешено опуститься, что зависит от значения конденсатора и скорости, с которой он заряжается. ( Машинный цикл — это минимальная частота, требуемая для выполнения одной инструкции).
EA или внешний доступ (контакт № 31) — это входной контакт. Этот вывод является активным низким выводом; после применения низкого импульса, он активируется. В случае микроконтроллера (8051/52), имеющего встроенное ПЗУ, вывод EA (стержень) подключается к V cc . Но в микроконтроллере 8031, который не имеет встроенного ПЗУ, код сохраняется во внешнем ПЗУ и затем выбирается микроконтроллером. В этом случае мы должны подключить советник (контакт № 31) к Gnd, чтобы указать, что программный код хранится извне.
-
Включение PSEN или хранилища программ (вывод № 29) — это также активный низкий вывод, т. Е. Он активируется после подачи низкого импульса. Это выходной вывод, который используется вместе с выводом EA в системах на основе 8031 (т.е. ROMLESS) для хранения программного кода во внешнем ПЗУ.
-
ALE или (Address Latch Enable) — это выходной контакт, который активен на высоком уровне. Он особенно используется для 8031 IC для подключения к внешней памяти. Его можно использовать при принятии решения, будут ли контакты P0 использоваться в качестве шины адреса или шины данных. Когда ALE = 1, контакты P0 работают как шина данных, а когда ALE = 0, контакты P0 действуют как шина адреса.
Включение PSEN или хранилища программ (вывод № 29) — это также активный низкий вывод, т. Е. Он активируется после подачи низкого импульса. Это выходной вывод, который используется вместе с выводом EA в системах на основе 8031 (т.е. ROMLESS) для хранения программного кода во внешнем ПЗУ.
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.