一、三态
单片机IO的三态是指:高电平(1)、低电平(0)、高组态(Z)。
二、高阻态
高阻i是一种电路状态.既不是高电平,也不是低电平,以高阻态对下级电路输出,下级电路什么影响也没有.高阻态的IO电平高低,随下级电路变化而变,下级为高,它就是高,下级是低它就是低.可以看成是悬空状态.
所以,高阻状态的作用就是你不会影响其他,这在总线通讯中特别重要
像通用的51单片机,IO口都有这样的标注(下图是CMS5880的IO引脚配置截图)
当你设置成输入时,此时引脚状态就是高组态。有些单片机规格书翻译不太准确,
应该要翻译成:0= 引脚被配置为输入(高阻抗)
翻译成“高阻抗”应该是比较准确的,
翻译成“三态”容易引起误解
三、IO模式的内部结构
现在我们拿我们入门学得at89c51来分析其引脚端口结构。
1.P0口双向八位三态IO
P0口大家肯定不陌生,想当初第一次画最小系统板,在P0口接上拉电阻,从而点灯点不亮。那为什P0口要加上拉电阻呢?
这是P0口内部结构图,首先P0口的上面那个三极管D0是在进扩展存储器或扩展总线时使用MOVX指令时才会控制它的导通和截止,在不用此指令时都是截止的。也就是我们平常使用如:P0_1=0 P0_1=1这些语句时控制的都是下面那个三极管D1。
当P0=0时,等效图是中间的,三极管D1导通,P0点的电位为0。
而当P0=1时,等效图是右边的,三极管D1截止,而上面的三极管D0始终是截止的,这样P0点就等效于悬空了,所以要外接上拉电阻,才能有高电平。
所以,当你置1时,由于内部没有上拉电阻,所以为高组态,不能正常输出高、低(高组态输出的电平不确定)
2.P1口准双向IO
内带上拉电阻
当P1=0时,三极管D导通,见中间的等效图
当发出P1=1的指令后,三极管D截止,见右边等效
那为什么叫准双向IO,因为当IO口要设置为输入时,需要先想该端口写“1”,单片机才能正确读取外部的高低电平。
也就是要现有个准备过程,所以叫“准双向3”.P2 P3也是。
双向口与准双向口的区别主要是:准双向口I/O口操作时做数据输入时需要对其置1,否则若前一位为低电平,后一位输入的电平为高则MOS管拉不起来导致出错。而双向口则不需要做此动作,因为双向口有悬浮态。
准双向口就是做输入用的时候要有向锁存器写1的这个准备动作,所以叫准双向口。
真正的双向口不需要任何预操作可直接读入读出。
1:准双向一般只能用于数字输入输出,输入时为弱上拉状态(约50K上拉),端口只有两种状态:高或低。
2:双向除用于数字输入输出外还可用于模拟输入输出,模拟输入时端口通过方向控制设置成为高阻输入状态。双向端口有三种状态:高、低或高阻