P2.0/P2.1与P3.0/P3.1有什么区别,为什么P2做输入就正常?
我需要使用两个端口作为输入,根据电平高低对变量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);
}
P0口:真正的双向口,输出锁存,输入缓冲,输入前要先置1(KEIL包含的头文件已经有动作了,如果用汇编,要人工置1),输出为漏极开路,输出一般都要上拉电阻。输入为高阻态,能驱动8个TTL负载。当有片外存储器时,作数据线使用。 P1口:是最简单的口,输入也要先置1,无高阻态,只能是输出或者输入。能驱动4个TTL负载。 P2口:I/O与P1口一样,当有片外存储器时,作地址线使用,寻址64K片外数据存储器。能驱动4个TTL负载。 P3口:I/O与P1口一样,但无论输入输出都要先置1。具有很多复用功能。 口的一般使用方法:做复用时一般不要加上拉和下拉电阻。但单输出驱动负载时都应加1K左右的上拉电阻,单输入时要加10K左右的下拉电阻,且输入为低电平触发。希望对你有帮助
如果你用的是51单片机的话 建议不要这样写哦 P3口好多复用功能 想用P3.0 P3.1的话 建议单独用这两个IO口 而不是P3 这样子
谢小编回复。
您说的意思,就是说如如果想用P3.0 P3.1,就在代码里面明确写出P3.0=1或P3.1=0这样吗?
我看贴,也是带着疑惑来的··给p3.2 p3.2 p3.4输入按键信号都正常··
给p3.5输入就是没反应····
这个问题经常遇到
P2口:I/O与P1口一样,当有片外存储器时,作地址线使用,寻址64K片外数据存储器。能驱动4个TTL负载。 P3口:I/O与P1口一样,但无论输入输出都要先置1。具有很多复用功能。 口的一般使用方法:做复用时一般不要加上拉和下拉电阻。但单输出驱动负载时都应加1K左右的上拉电阻,单输入时要加10K左右的下拉电阻,且输入为低电平触发。希望对你有帮助
试试在switch(P3)前加一个P3 = 0XFF;
因 P3.0 和 P3.1 是下载程序必须要用到的I/O口,所以不是必须需要的话最好不要用!实在要用请单独赋值即可。
在把p3口作普通io口用,要确定第二功能关了
已将“兮”的回答选为最佳回答,不过小编及其他几位的回答应该也是要注意的,总结下:
除非是使用第二功能或做复用,P3一般不建议使用,如果必须用作普通I/O口:
1、要确定第二功能关了;
2、做输入端口置1;
3、单独赋值;
4、做输出加1K左右上拉,做输入加10K左右下拉(低电平触发);
感谢!
6666666
唯一的区别就是P3空那俩引脚可以用作中断
这个问题值得探讨
你一回复我又有点迷糊了。
做外部中断的应该是P3.2/P3.3端口吧,本例中用的是P3.0/P3.1。
并且在本程序中,我并没有进行中断模式声明啊。