Как установить один конкретный вывод в качестве входа или выхода в 8051? - PullRequest
0 голосов
/ 24 марта 2019

Я знаю, если я дам P0 = 0xFE;, то получится один вывод в качестве выхода, а остальные в качестве входа.

Но что, если я хочу сделать только один вывод в качестве вывода или ввода. Как, например, в PIC Microcontroller:

TRISABITS.TRISA0 = 0; // for setting A0 as output

Пожалуйста, уточните

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Контакты на 8051 не могут быть переключены на вход или выход. Нет направления управления. Каждый вывод имеет сильный драйвер для GND и слабый драйвер для VCC. На переднем фронте (изменение уровня от 0 [GND] до 1 [VCC]) вывод будет подведен к VCC немного сильнее в течение двух тактов; это для лучшего края.

Чтобы использовать вывод в качестве входа , необходимо установить его в 1 и оставить там. Источник возбуждения за пределами 8051 теперь может выводить вывод на GND, давая 0 при чтении. Если внешний источник выводит вывод на VCC или позволяет ему плавать, вывод будет читаться как 1.

Чтобы использовать вывод в качестве выхода , вы установите его на 0 и 1, как вам нужно. Убедитесь, что ведомая нагрузка имеет достаточно высокое полное сопротивление.

0 голосов
/ 24 марта 2019

В зависимости от того, какой компилятор вы используете. На Keil C вы можете получить доступ к битам так же, как к обычным структурам полей, используя расширение для регистров с битовой адресацией

P0.1 = 1; // set P0.1 as input
P0.5 = 0; // set P0.5 as output

В противном случае установить один бит с побитовыми операциями

char inoutReg = P0;
inoutReg &= ~(1 << n); // clear bit n in P0, i.e. set P0.n as output
inoutReg |= 1 << m;    // set bit m in P0, i.e. set P0.m as input

См. Как установить, очистить и переключить один бит?

...