单片机引脚作为输入和输出是由程序来决定的,与外围电路和端口状态无关。
比如你想做输出,就直接给P1口赋值。P1 = 0xFE; MOV P1,#0FEH
如果你想让P1口做输入,直接读取P1口就行了 A=P1; MOV A,P1
不用考虑IO口状态,直接读就是了。
你想判断外部是否是高电平,比如p1.0读到一个高电平的时候p2.2输出0:
if(p1_0)
p2_2 = 0;
明白了吗?
51单片机的p1/p2口内部有上拉,你直接输入高电平,应该可以识别到。
如果程序判断不出,你可以测试一下端口电压,如果电压过低导致单片机无法识别,那就需要接外部上拉了,保证输入高电平的时候能够被识别出来。
当IO口出现高电平的时候就可以读取了,高于3.6伏就是高电平了。程序中可以使用if判断当PI或者p2等于FFH的时候执行某种操作。
51不用设置方向,这样的话就看外部电平的拉高拉低的能力了,如果是强上拉,就能拉高端口,如果比较弱,就拉不上来了