返回该小组首页 回复主题
chaoren_baobao

chaoren_baobao

小组等级:     E币:385  (E币换礼)

#1楼主:问圈圈单片机的问题。。。

文章发表于:2008-05-04 09:11

虽然我学单片机很久了,也写了很多单片机的程序。但我心中一直有一个疑惑,困扰了很久。

书上说,P1,P2,P3是准双向口,在读取数据之前,必须先向它们写1,即比如要读取P1口的数据到变量tmp,则:

P1=0xFF;
tmp=P1;

我一直是这么做的,但我确实很疑惑的是,执行了这句话P1=0xFF后,P1口的数据不会变成0xFF吗,然后再读进来,tmp不就一直等于0xFF了吗?

而且P0口,书上说它是双向口,并没有说在读取P0口数据之前要不要写1,但我在P0口置1后再读取P0的数据,也能得到正确的结果,那到底P0口要不要读取前先写1呢。

我最近在看一个原理图时,看见P0口接了上接电阻,但看很多书上外接芯片时,P0口都没有接上拉电阻,我的第三个疑惑是,P0口什么时候才要接上拉呢?接PDIUSBD12芯片要不要接上拉呢?

我一般使用的是STC的51单片机芯片。比如STC89C52.

channlv

   小组等级:    E币:342  (E币换礼)

#2

文章发表于:2008-05-04 23:48

如果你向p1写0xff 如果p1.0是0的话 与的关系 0 &1 =0 如果是1的话 1& 1=1;你的明白?

hemanzi

   小组等级:    E币:329  (E币换礼)

#3

文章发表于:2008-05-05 00:41

建议把任意一个p口的硬件电路看一下,你就会很明白。课本上有很详细的解释为什么输入时要写1。

简单的说,引脚内部输出数据和读入数据的硬件路径是不同的,输入时先写1将场效应管截止,此时,引脚的电平就可以被外部的信号控制,然后从不同于输出的令一路径读入内部总线。

如果有张图就容易了。

chaoren_baobao

   小组等级:    E币:385  (E币换礼)

#4

文章发表于:2008-05-05 09:26

谢谢大家的回答,有一点明白了。

P口的引脚图我有,就是有点看不明白。读和写的路径不同这一点我知道,可能是我没有把我的疑问完全表述清楚。

我的疑问是,假如我要向P1口输出数据0xFF,我使用的语句是P1=0xFF;
而我要从P1口读入数据,也是要先使用语句P1=0xFF,然后再tmp=P1;

我不明白的就是单片机遇到这句话P1=0xFF时,它怎么能区分我是要往外输出数据0xFF,还是要准备读P1口的数据呢?

chaoren_baobao

   小组等级:    E币:385  (E币换礼)

#5

文章发表于:2008-05-05 09:27

大家只回答了我第一个疑惑啊,还有其它疑惑呢,大家都来看一看啊。

jizzll

   小组等级:    E币:3775  (E币换礼)

#6

文章发表于:2008-05-05 13:04

我也不是很明白

computer00

   小组等级:    E币:9834  (E币换礼)

#7

文章发表于:2008-05-05 16:52

P1=0xFF并不是告诉单片机等下要输入了,它始终是将P1口设置为全1状态。51的IO口有个特点,就是高电平驱动能力弱。将当IO口设置为高电平之后,那么它就很容易被驱动(也就是输入阻抗高)。如果设置为0状态,当输入高电平时,就需要很大的电流,强行将IO口拉高。例如你将51的IO口直接接到5V VCC上,然后程序写P1=0xFE,你会发现再对进来就是1了。但是这时流进IO口的电流就很大,因为低电平驱动能力较强。在做为输入使用时,只要它处于高电平状态就行了,不用每次输入前都写这个语句。有时写这个语句,是不确认它现在处于什么状态,所以事先写一下0xFF,让它处于高电平状态。
至于P0口,作为总线方式使用时,是有高电平驱动能力的。如果作为普通IO口使用,并且要输出高电平时能够提供输出电流,那么就需要接上拉电阻了。上拉电阻负责提供输出的电流。

chaoren_baobao

   小组等级:    E币:385  (E币换礼)

#8

文章发表于:2008-05-05 22:02

谢谢圈圈详细的解答!!!!我还要理解理解.

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

设计资源与分销