请问51单片机P3口作为数据接收口时,书上写要先将口置1,不懂什么意思?请教 20

请问51单片机P3口作为数据接收口时,书上写要先将口置1,不懂什么意思?比方说我要把10101010发送给单片机,是只用刚开始时把那个口置1,还是每发送一个字节前都要置1... 请问51单片机P3口作为数据接收口时,书上写要先将口置1,不懂什么意思?比方说我要把10101010发送给单片机,是只用刚开始时把那个口置1,还是每发送一个字节前都要置1?那这8个字节岂不是要置八次1????我把遥控器配对的接收模块接在单片机学习板上,但是只要下载完程序,把数据口往上一接,单片机上的灯就乱闪,怎么回事?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit data0=P1^4;
sbit p1=P1^0;
sbit p2=P1^1;
sbit p3=P1^2;
sbit p4=P1^3;
sbit dula=P2^6;
sbit wela=P2^7;
uchar i,a0,a2,x0,a1,a,x1,y0,b,b1,b2,c,c1,c2,z0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=6;y>0;y--); //当z=3时,刚好184微秒
}
void main()
{
dula=0;
wela=0;
//data0=1; //数据输入打开!一会再换成data0试一试!
delay(20); //延时一下,防止读数据没读上。
do
{
a0=data0; //不断从P3^0口读数据
if(a0==0)
{
delay(3);
i++;
}
}
while(i<=10);
//下面是检测8位地址的程序
while(a2<=7)
{
do
{
a0=data0;
if(a0==1)
{
delay(1);
x0++;
}
a1++;
}
while(a1<=10);
if(x0>3)
{
x1=1;
a<<1;
a=a||x1;
a2++;
}
else
{
x1=0;
a<<1;
a=a||x1;
a2++;
}
}
展开
 我来答
百度网友7ecdbdad54
2011-08-09 · 超过13用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:40.7万
展开全部
因为51的IO口是准双向IO口 准双向IO在作为输入数据时 先要把IO口置全部置1 然后读取外部数据 ,外部数据某位为1,读进来就是1,某位为0,读进来和1相&就是0了,所以读进来是什么就是什么,但是做为输出就不用置1了 直接输出
lgyytu0
2011-08-08
知道答主
回答量:10
采纳率:0%
帮助的人:4.2万
展开全部
只要你输入,不管你输入的是0还是1,都要对P3(P2P1P0也一样)的相应位置1,这是单片机的内部结构决定的。这是单片机最基本的知识,建议你先看下单片机的输入输出。你要是P3口输入的话就要先输出:P3=0xff;
还有不建议你使用P3口,P3口有很多特殊定义引脚,如果你其他口还没使用的话建议使用其他口。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
威武又清冽的好汉3869
2011-08-15 · TA获得超过7万个赞
知道大有可为答主
回答量:4.8万
采纳率:0%
帮助的人:7052万
展开全部
单片机标准双向I/O口,只有先给置1读出来的数据才准确,如果I/O口送0的话,无论怎么读都是0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-08-06
展开全部
不用了吧 开发板初始都是外接高电平的 不用在置位了 ; 灯乱闪 是不是你程序出问题了俄
更多追问追答
追问
应该是程序出问题,但是程序都没有错误啊。那我写数据的话是不是直接往口里写就行了?
追答
你是用单片机C的话 可以直接往P3口写数据 不能直接往位写数据;
汇编不能直接写的;要寄存器寻址
我也是个初学者 希望能帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爬行的山羊
2011-08-06 · TA获得超过3026个赞
知道大有可为答主
回答量:6449
采纳率:70%
帮助的人:1179万
展开全部
是在初始化的时候吧P3口置1,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式