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条回答
xdf11
1楼-- · 2019-07-16 12:58
 精彩回答 2  元偷偷看……
YouTeng
2楼-- · 2019-07-16 18:00
已将“兮”的回答选为最佳回答,不过版主及其他几位的回答应该也是要注意的,总结下:

除非是使用第二功能或做复用,P3一般不建议使用,如果必须用作普通I/O口:

1、要确定第二功能关了;
2、做输入端口置1;
3、单独赋值;
4、做输出加1K左右上拉,做输入加10K左右下拉(低电平触发);

感谢!
@曲终人散@
3楼-- · 2019-07-16 21:06
唯一的区别就是P3空那俩引脚可以用作中断
ELECFANS@355
4楼-- · 2019-07-17 01:24
这个问题值得探讨
YouTeng
5楼-- · 2019-07-17 03:49
@曲终人散@ 发表于 2017-8-1 19:46
唯一的区别就是P3空那俩引脚可以用作中断

你一回复我又有点迷糊了。

做外部中断的应该是P3.2/P3.3端口吧,本例中用的是P3.0/P3.1。
并且在本程序中,我并没有进行中断模式声明啊。

一周热门 更多>