Встроенные системы - Программирование ввода-вывода
В 8051 операции ввода-вывода выполняются с использованием четырех портов и 40 контактов. На следующей схеме контактов подробно показаны 40 контактов. Операционный порт ввода-вывода резервирует 32 контакта, из которых каждый порт имеет 8 контактов. Остальные 8 контактов обозначены как V cc , GND, XTAL1, XTAL2, RST, EA (полоса), ALE / PROG (полоса) и PSEN (полоса).
Это 40-контактный PDIP (пластиковый двухрядный корпус)
Note- В корпусе DIP вы можете распознать первый и последний вывод по прорези в середине IC. Первый штифт находится слева от этой отметки разреза, а последний штифт (т. Е. В данном случае 40- й штифт) - справа от метки разреза.
Порты ввода-вывода и их функции
Четыре порта P0, P1, P2 и P3, каждый из которых использует 8 контактов, что делает их 8-битными портами. После СБРОСА все порты настраиваются как входы, готовые к использованию в качестве входных портов. Когда первый 0 записывается в порт, он становится выходом. Чтобы перенастроить его как вход, на порт необходимо отправить 1.
Порт 0 (контакт № 32 - контакт № 39)
Он имеет 8 контактов (с 32 по 39). Его можно использовать для ввода или вывода. В отличие от портов P1, P2 и P3, мы обычно подключаем P0 к подтягивающим резисторам на 10 кОм, чтобы использовать его как входной или выходной порт, являющийся открытым стоком.
Он также обозначается как AD0-AD7, что позволяет использовать его как для адреса, так и для данных. В случае 8031 (т.е. микросхемы без ПЗУ), когда нам нужно получить доступ к внешнему ПЗУ, то 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 < | Т1 | 15 |
P3.6 < | WR | 16 |
P3.7 < | Дополнение RD | 17 |
Двойная роль порта 0 и порта 2
Dual role of Port 0- Порт 0 также обозначается как AD0 – AD7, так как он может использоваться как для обработки данных, так и для обработки адресов. При подключении 8051 к внешней памяти порт 0 может предоставлять как адрес, так и данные. Затем микроконтроллер 8051 мультиплексирует вход как адрес или данные, чтобы сохранить контакты.
Dual role of Port 2- Помимо работы в качестве ввода-вывода, порт P2 также используется для обеспечения 16-битной адресной шины для внешней памяти вместе с портом 0. Порт P2 также обозначается как (A8– A15), а порт 0 обеспечивает младшие 8-битные через A0 – A7. Другими словами, мы можем сказать, что когда 8051 подключен к внешней памяти (ПЗУ), максимальный размер которой может составлять до 64 КБ, и это возможно по 16-битной адресной шине, потому что мы знаем, что 216 = 64 КБ. Порт 2 используется для старших 8-ми битов 16-битного адреса и не может использоваться для ввода-вывода, и таким образом адресуется любой программный код внешнего ПЗУ.
Аппаратное соединение контактов
Vcc - Контакт 40 обеспечивает питание микросхемы и составляет +5 В.
Gnd - Контакт 20 обеспечивает заземление для ссылки.
XTAL1, XTAL2 (Pin no 18 & Pin no 19)- 8051 имеет встроенный генератор, но для его работы требуются внешние часы. Кристалл кварца подключен между выводами XTAL1 и XTAL2 микросхемы. Этому кристаллу также нужны два конденсатора по 30 пФ для генерации сигнала нужной частоты. Одна сторона каждого конденсатора подключена к земле. 8051 IC доступна с различной скоростью, и все зависит от этого кварцевого кристалла, например, микроконтроллеру на 20 МГц требуется кристалл с частотой не более 20 МГц.
RST (Pin No. 9)- Это входной контакт и активный высокий контакт. При подаче высокого импульса на этот вывод, то есть 1, микроконтроллер перезагрузится и прекратит все действия. Этот процесс известен какPower-On Reset. Активация сброса при включении приведет к потере всех значений в регистре. Он установит программный счетчик на все 0. Чтобы обеспечить действительный вход сброса, импульс высокого уровня должен быть высоким как минимум в течение двух машинных циклов, прежде чем он станет низким, что зависит от емкости конденсатора и скорости его зарядки. (Machine Cycle минимальная частота, необходимая для выполнения одной инструкции).
EA or External Access (Pin No. 31)- Это входной контакт. Этот вывод является активным нижним выводом; при подаче слабого импульса он активируется. В случае микроконтроллера (8051/52), имеющего встроенное ПЗУ, вывод EA (bar) подключен к V cc . Но в микроконтроллере 8031, который не имеет встроенного ПЗУ, код сохраняется во внешнем ПЗУ, а затем загружается микроконтроллером. В этом случае мы должны подключить EA (контакт № 31) к Gnd, чтобы указать, что программный код хранится извне.
PSEN or Program store Enable (Pin No 29)- Это также активный низкий вывод, то есть он активируется после подачи низкого импульса. Это выходной вывод, который используется вместе с выводом EA в системах на базе 8031 (т. Е. Без ПЗУ), чтобы обеспечить хранение программного кода во внешнем ПЗУ.
ALE or (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 - младший бит, а D7 - старший разряд. Например, «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, очистить бит (перейти, если бит, затем очистить) |