Обычно вы используете тип данных сбит для P2_0 для определения бита в регистре специальной функции (SFR).
С C51: ЧТЕНИЕ С ПОРТА ВВОДА (изменено)
sfr P2 = 0xA0;
sbit P2_0 = P2^0;
...
P2_0 = 1; /* set port for input */
var = P2_0; /* read P2_0 into var */
Важно отметить, что переменные sbit не могут быть объявлены внутри функции. Они должны быть объявлены вне тела функции.
Другим вариантом может быть чтение всех 8 выводов P2, а затем маскирование нежелательных битов.
char var; /* define 8 bit variable */
P2 = 0xFF; /* set P2 for input */
var = P2; /* read P2 into var */
var &= 0x01; /* mask off unwanted bits */
Вместо того, чтобы считать P2 или вывод P2_0 в без знака int (16 бит), вы можете использовать char ( 8 бит) или один бит для экономии памяти.
char var;
...
var = P2;
или
bit var;
...
var = P2_0;
Другим вариантом может быть char с битовой адресацией .
char bdata var; /* bit-addressable char */
sbit var_0 = var^0; /* bit 0 of var */
...
var = P2; /* read P2 into var */
if(var_0 == 0) /* test var_0 (bit 0 of var char) */
{
...
}
Дополнительную полезную информацию можно найти в руководстве пользователя по компилятору *1051* и связанных с ним ссылках.
Примечание: большая часть моего опыта 8051 в сборке. Приведенные выше примеры С могут быть не на 100% правильными.