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

В 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, очистить бит (перейти, если бит, затем очистить)