打印
[ZLG-ARM]

准双向口

[复制链接]
1719|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
思行合一|  楼主 | 2011-1-31 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机标准双向I/O口和准双向I/O口的区别为双向口有高阻态,输入为真正的外部信号,准双向口内部有上拉,故高电平为内部给出不是真正的外部信号!软件做处理时都要先向口写“1”!  我们常说51单片机的I/O口是准双向I/O口,那么什么是准双向口,它与双向口有什么区别?

       我们来看51单片机的P1口结构示意图,


  从图中可以看出P1口有固定的内部上拉电阻,当用作输出口时,通过写0或1使“开关”FET2导通或断开,从而达到输出高低电平的目的。而当作为输入使用时,由于内部固定上拉电阻的存在,如果直接读取端口状态的话,读出来的结果将一直是1(即高电平),只有先写入1,将“开关”FET2断开,这样端口与上拉电阻不再有联系,这时读出来的值才是端口的真正状态。也就是说,如果想读端口的状态,必须先对端口进行写1(输出高电平)操作。

  “准”就是“基本上的意思”,也就是“准双向口”不是正真的双向口。


  有时候我们会看到说51单片机的P0口是双向口,这样的说法不是很准确.

  P0口是双向指的是它被用作地址/数据端口时,只有在这个时候,P0口才处于两个开关管推挽状态,当两个开关管都关闭时,才会出现高阻状态.当P0口用于一般I/O口时,内部接Vcc的那个开关管是与引脚(端口)脱离联系的,这个时候,只有拉地的那个开关管其作用,P0口作为输出,是必须外接上拉电阻的,不然就无法输出高电平;


  如果P0口作为输入,则必须先对端口写1,使拉地的开关管断开,这个时候,如果不接上拉电阻,则是高阻状态,就是一个双向口,如果接上拉电阻,则本身输出高电平,对输入信号的逻辑无影响(注意是对逻辑无影响,对实际参数有无影响我不确定,但是我认为是有的).


  双向与准双向,根本原则是双向包含了高阻这个状态,而不在于是否需要先写1或者不写,P1~P3口因为有内部上拉电阻,因此无论如何不是双向;P0口内部无上拉电阻,在处于数据/地址功能时,自动完成3态的转换,是双向,处于一般I/O口时,如果不接外部上拉,而且先向端口写了1,那么就处于高阻状态,此时,它也是一个人为的双向口,这与它处于地址/数据功能时的自动双向有区别,以及与P1~P3处于输入时输出锁存器为1是有区别的跟I2C总线上那种漏极开路或者集电极开路结构差不多. 通过上拉电阻(或者下拉电阻)来提供一种电平的驱动.


  当作为输入使用时,就将开关断开,这样就只剩下上拉(或者下拉)电阻,因而阻抗比较高,


  可以由其它设备驱动该IO口。准双向口在做为输入使用时,实际上还是一种输出状态.


  只是该输出状态的内阻比较大而已. 而真正的双向IO口,有方向控制寄存器,作为输入


  使用时输出部分被断开.


  双向口与准双向口的区别为双向口有高阻态,输入为真正的外部信号,准双向口内部有上拉,故高电平为内部给出不是真正的外部信号!软件做处理时都要先向口写“1”!


  P0口为真正的双向口,其余为准双向口!

相关帖子

沙发
coco11| | 2011-2-9 17:36 | 只看该作者
顶一个。

使用特权

评论回复
板凳
6019赵文| | 2011-2-9 23:01 | 只看该作者
现在所有的处理器都是标准的双向口吧

使用特权

评论回复
地板
diny| | 2011-2-10 17:42 | 只看该作者
呵呵,适合我。谢谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

215

主题

1391

帖子

2

粉丝