P2.0/P2.1与P3.0/P3.1有什么区别,为什么P2做输入就正常?

2019-07-15 10:04发布

各位大神,我有个疑惑想请教下:

我需要使用两个端口作为输入,根据电平高低对变量OC赋值,先前使用

P3端口,一直无法正常输入,换成P2就完全正常了(事先都置1了)。
难道P3.0/P3.1具有第二功能Tx/Rx,就不能作为普通的输入口,可是很

多教材上不是都写了任何Port口都能做I/O吗?

期待大神解答。

以下是能够正常工作的代码(使用P2口):
uchar ocscan(void)
{
        uchar oc;
        switch(P2)
        {
        case(0xff): oc=1;break;
        case(0xfe): oc=2;break;
        case(0xfd): oc=3;break;
        default:break;
        }
        return(oc);
}

以下是不能工作的代码(使用P3口):
uchar ocscan(void)
{
        uchar oc;
        switch(P3)
        {
        case(0xff): oc=1;break;
        case(0xfe): oc=2;break;
        case(0xfd): oc=3;break;
        default:break;
        }
        return(oc);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
YouTeng
1楼-- · 2019-07-15 17:38
hobbye501 发表于 2017-7-28 13:53
如果你用的是51单片机的话 建议不要这样写哦   P3口好多复用功能  想用P3.0 P3.1的话 建议单独用这两个IO口 而不是P3 这样子

谢版主回复。

您说的意思,就是说如如果想用P3.0 P3.1,就在代码里面明确写出P3.0=1或P3.1=0这样吗?
飞翔的梦想
2楼-- · 2019-07-15 21:22
 精彩回答 2  元偷偷看……
w289273442
3楼-- · 2019-07-15 23:48
这个问题经常遇到
兮_c03
4楼-- · 2019-07-16 03:26
P2口:I/O与P1口一样,当有片外存储器时,作地址线使用,寻址64K片外数据存储器。能驱动4个TTL负载。  P3口:I/O与P1口一样,但无论输入输出都要先置1。具有很多复用功能。 口的一般使用方法:做复用时一般不要加上拉和下拉电阻。但单输出驱动负载时都应加1K左右的上拉电阻,单输入时要加10K左右的下拉电阻,且输入为低电平触发。希望对你有帮助
人中狼
5楼-- · 2019-07-16 08:45
试试在switch(P3)前加一个P3 = 0XFF;
houjue
6楼-- · 2019-07-16 12:02
      因 P3.0 和 P3.1 是下载程序必须要用到的I/O口,所以不是必须需要的话最好不要用!实在要用请单独赋值即可。

一周热门 更多>