微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机的I/0口输入和输出,1和0是怎么回事。

单片机的I/0口输入和输出,1和0是怎么回事。

时间:10-02 整理:3721RD 点击:

本人自己编过一个时钟程序,用过中断,如不入门就不知道,但现在实习了,遇到I/0口的问题,以前编程都没注意过,我一直以为1就是输出,0就是输入,是不是?今天我百了一下,置1是输入,0是输出,那么和0,1是什么关系?一个是状态一个是电平么?电平又是怎么回事?怎么说呢,那你输出0就是低电平,接一个发光二极管会亮吧,那换成输入的话会亮吗?我也看过内部结构,什么集电极开路,输入是高阻态吗?是不是就不亮了,如果高阻态单片机怎么检测输入电平的?
如果觉得懒得解析,请告诉我知识点,等我自己看看也好。谢谢

置1和置0不是自己规定的吗?输入输出都可是1和0 啊?

看你外设啊

对点评来说,1是高0是低。对输入输出来说,你就要看规格书了,1是输入也可能使输出吧,具体我忘记了,每次都看规格书,然后定义成macro,这样就不用记是1还是0了。

作为输入端口,前提条件就是端口的状态能随外部电平变化而变化,如果外部拉低,端口应该被拉低,如果外部拉高,端口应该被拉高。再看一下51端口的结构,你会发现,如果内部将端口置0,那么端口直接被内部MOS管强拉到0电位,这时外部端口即使接了高电平也不会被拉高(相当于端口被一根线接到了地,你怎么也无法拉高地电位吧),所以此时你当然可以读端口,但读到的只会是0.但是,如果你将端口置1,那么相当于端口接了个上拉电阻,此时端口的电平是随外部信号变化而变化的,这样就能读取到0和1.所以,对于51单片机来说,为了准确读取0和1,只能先将端口置1.

小编想复杂了,单片机或者是其他控制芯片,作为IO口,内部基本上都是门电路,单片机只是多了寄存器可以能动配置,配置正确了就没有问题了

得弄清楚两个概念。一个概念是现在的单片机内部都有一个配置寄存器,可以用来对每个端口是输入还是输出进行配置,譬如设为1的话指明该端口是输出,设为0的话只能是输入(也可能用两位指明更多的状态,如OC、弱上拉、强上拉、推挽输出等,可仔细阅读芯片说明书);另一个概念是常规的概念,端口置为输出时,可能输出0,也可能输出1,同理端口置为输入时,可能输入0,也可能输入1。

是置1是为输入状态吧?这就能读取外部电平了,那你说的置0为输出状态,端口电平不随外接电平改变,就等于高组态了吧,我记得电路是置1,三极管通,右边的三极管就不同啦,等于接了上拉电阻,是不是就是这个意思?
那置0的时候是输出状态,我矛盾的地方就在这里,怎么输出低和高电平?他接上拉电阻,应该等于输出高电平了吧?其实是怎么控制的呢?看规格书我又不怎明白,我还是想问问,输出状态的时候,端口输出0就是低电平了,那接一个发光二极管和高电平是不会亮的吧?  是不是输入状态的话接灯和高电平就会亮,而输出状态的话,就要看输出的是什么电平吗?我用C的时候不就是1和0这么简单啊,根本不用考虑这些问题也可以的,我就觉得思维混乱了。

输入1和0是外部决定的啊?输出1和0是单片机决定的啊?那我还是很想知道,输出0和输入状态接发光二极管+高电平,是不是都会亮啊?

基础知识太薄弱了。输入输出都是针对单片机而言的。输出的理解是单片机影响外部电路,输入的理解是外部电路对单片机的影响。发光二极管要点亮是有条件的,简单地说要有足够(但不能超过极限,否则会损坏)的正向工作电流,一般是数mA到数十mA,通常认为它是外部输出部分。当然接有限流电阻的发光二极管通过开关接地(0)或接电源(1)的方式把开关脚接入单片机的输入端也能点亮发光二极管,同时完成输入,但是起主要作用的是开关,单片机输入端是被动接受,不能主动影响发光二极管的亮与灭。供参考。

输入状态不是呈现高阻态吗?呈现高阻态才会外部输入啥就体现啥?那我接入led应该是不同的啊!

谢谢你啊!但我还有个疑问,输出状态的时候是置0,就是MOS管使端口接地,就是你说的那样,输出0我明白,但怎么输出1啊?不是接地了吗?怎么输出1啊。还有同样问题,置1的时候mos管使端口和地断开,是高阻态吧!但还是接上拉电阻的啊!我接低电平的外器件不就输出1了吗?这不矛盾?

看着看着就晕了


输出1的时候,不仅是对地的mos管断开,上拉的mos管还要接通(除OC外),为外电路提供单片机设计要求的驱动电流(一般为数mA),所以不是高阻态,上拉电阻的作用是提高端口输出1时对外部电路的驱动能力(单片机端口输出高电平的能力没有输出低电平的能力强)。高阻态通常用于作为输入(可并联输入)的场合,输出并联时常用OC态,一般情况下不能直接并联。
单片机端口与外部电路的连接通常称为接口电路,是一门学问。总的原则是输出端主导输入端,反之则会破坏整个系统的逻辑性。

对于51单片机,实际上根本没有实际的输入输出寄存器,不是说你将端口置1就是将端口置为输入,这是很多初学者容易犯的大误区。51单片机是根据指令来识别输出还是输入的:Px.x=?,这就是输出;?=Px就是读取了。那为什么我们在读端口状态前要将端口置1呢?现在你应该先找本书看看51 IO口的结构了,空想没用。提醒一下:不是高阻态才是输入(高阻态一般用于模拟信号输入),上拉或下拉均可作为数字信号输入端。那51什么时候端口会处于上拉或下拉状态呢?只有51输出为1时端口处于上拉状态。端口输出0时呢?是不是下拉?看看IO结构可知,此时端口被MOS管短接到地,不管你端口接什么电位都被短接到地,也就没法读出正确的端口电位了。说得这么清楚了,还不懂的话,你应该重学电子技术基本知识了。

讲的很清楚了、、、、、、、、、、

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top