51单片机的P1 P2 P3 P4口有什么区别

比如这个程序,用P0 P1 P2都没法达到流水灯的效果,但用p3就可以(程序和硬件都改),这是为什么呢
#include <reg51.h>
#include <intrins.h>
void delay(unsigned char n)
{
int i,j,k;
for (i=0;i<n;i++)
for (j=0;j<100;j++)
for (k=0;k<100;k++);
}
void main()
{
P2=0x01;
while(1)
{
int i;
for(i=0;i<7;i++)
{
P2=_crol_(P2,1);
delay(10);
}
for(i=0;i<7;i++)
{
P2=_cror_(P2,1);
delay(10);
}
}
}

第1个回答  2015-02-09
p0'1'2'3口,忘记了,好像P0数据总线,p0+p1/p2?忘记了是地址总线,驱动外部电路时,需要加上拉电阻,反正p3口内部就有电阻,所以它的驱动能力要大於其它俩个端口,驱动大负载时,如不加同相驱动器需采取灌电流方式
第2个回答  2015-02-12
四个并行接口,驱动 IO 外设的能力,显然是不同的。
不应该随便乱用。

P2=_crol_(P2,1);--这条指令,在编程思路上,有错误。
你弄混了 P2 的功能,它究竟是输入,还是输出?

你这是把 P2 当成存储器来用的,其实,他是接口。
第3个回答  推荐于2016-11-27
首先,你确定LED灯的接法是一样吗?
四个口是没有区别的。
程序要这么写,就一样了。
void main()
{
unsigned char light=0x01;
unsigned char i; //在这比较好
P2=light;
while(1)
{
//int i; 删掉
for(i=0;i<7;i++)
{
light=_crol_(light,1); //P2不能直接移位
P2=light;
delay(10);
}
for(i=0;i<7;i++)
{
light=_cror_(light,1);
P2=light;
delay(10);
}
}
}本回答被提问者和网友采纳
第4个回答  2015-02-09
p3最好别用,有串口。外带负载的话,有时程序会烧不进去
第5个回答  2015-02-09
可以在p0口接上拉排阻后再接流水灯,这样就亮了
相似回答