单片机怎么实现三态输出?需要加什么器件
有没有办法呀?有没有哪种单片机本身就可以实现这样的功能呀?或是加一个什么三态门或是三态寄存器之类的器件来实现呀?给个高分啦,大伙帮帮忙
请注意,我是需要单独控制某个引脚为高阻态输入,比如说P0,,我想让p0.1输出1,p0.2输出0,然后p0.3为高阻输入,这要怎么实现? 展开
首颤岁悔先,要选择有这种功能的单片机,因为很老的单片机没有这个功能,也只能从外部实现,但是现在流行的单片机基本都有这个功能,只是在编写单片机控制代码的时候就可以用软件设置。
不同类型的单片机设置方法茄正稍有区别,这里随便选一个51单片机,STC15系列单片机来说明,下图是雀败芯片数据文档中的一个小截图:
举个例子来说明一下:
假如要对P1口的第1个引脚P1.0进行设置,从文档中可以看出它有4种状态可以选择。
第一种:准双向口 (老的51单片机例如TA98C51单片机的P1口只能这个状态,不能设置其它状态)。
单片机上电就默认这个状态,不用设置,如果从别的状态设置回这个状态,就用下面指令对寄存器P1M1和P1M0进行设置:
P1M1 &= 0xfe; // 0xfe #11111110B
P1M0 &= 0xfe; // 0xfe #11111110B
以上指令的目的是符合上图表格,把设置P1.0端口的寄存器P1M1和P1M0相应位元设置为0.
第二种:推挽输出
P1M1 &= 0xfe; // 0xfe #11111110B
P1M0 |= 0x01; // 0x01 #00000001B
以上指令的目的是符合上图表格,把设置P1.0端口的寄存器P1M1和P1M0相应位元设置为0和1.
第三种:仅为输入
P1M1 |= 0x01; // 0x01 #00000001B
P1M0 &= 0xfe; // 0xfe #11111110B
第四种: 开漏
P1M1 |= 0x01; // 0x01 #00000001B
P1M0 |= 0x01; // 0x01 #00000001B
通过对寄存器的不同设置,就可以正常使用管脚的不同状态。
PS:对于P0口的设置相同,只是寄存器换成P0M1和P0M0.
首先,你要理解高阻态这碧前个概念:
高阻态是一种电路状态.既不是高电平,也不是升汪低电平,以高阻态对下级电路输出,下级电路什么影响也没有.高阻态的IO电平高低,随下级电路变化而变,下级为高,它就是高,下级是低它就是低.可以看成是悬空状态.
P0,想要输出高电平,必须接上拉电阻.
现在你要的状态都出现了,接上拉电阻的可以输出高电电吵慧仔平,不接上拉电阻的可以输出低电平与高阻态.
高阻态是什么状态我很清楚,你说的不接上拉电阻就是高阻态我也明白,
但是,我是需要在程序运行中不断地变化成高阻态或是高电平或是低电平,所以不可以用不接上拉电阻的方法去变成高阻态
那你就控制一下上拉电阻就成了.比如你控制P0.0 你把它的上拉电阻接到三极管上,把三极管基极接到别的IO上.
比如74LS245,用于电平转换或者信号驱动提高带负载能力。它有一个管脚是OE,就是输出使能端,当使能端电平信号有效时,输出为输入的转换电平;当使能端电平处于无效状态时,输出为高阻。则输出有三种形式:高、低、高阻,即为三态输出
另外,有的单片机具备三孙兄态输出功能,那么在其管脚负载范围内就不需要增加器件来控制输出了。
你说的具备三态输出功能的单片机,能举例几个型号吗
问题是,我需要的是可以单独设置某一位为高阻输入,stc的我看过资料, 是把某个I/O口的8个位同时设置成高阻输入模式,
另外就是,单片机的指令里好像并没有哪句指令可以让某个I/O引脚输出高阻状态。
好好看看吧。