单片机内部电路:
第一种情况:
电路:一个低电平导通的场效应管。输出寄存器连接在栅极,电源下面接个电阻然后接漏极,源极接地,io口接在漏极和电阻 之间。
默认状态:那么单片机上电之后就是高电平(这个状态我们叫默认状态,也就是不对io口操作的状态)。
需求1:想输出低电平,向寄存器写0,场效应管导通,io口直接接地,成功达到输出0的目的。
需求2:想输出高电平,向寄存器写1,场效应管截止,io口相当于处在默认状态,成功达到输出1的目的。
第二种情况:
电路:同样一个低电平导通的场效应管。输出寄存器连接在栅极,漏极不接电源,源极接地,io口直接连上漏极。
默认状态:那么单片机上电之后就是既不是高电平也不是低电平(这个状态我们叫浮空状态,也就是io口就是漏极,他们直接是一根导线放在空气中)。
需求1:想输出低电平,向寄存器写0,场效应管导通,io口直接接地,成功达到输出0的目的。
需求2:想输出高电平,向寄存器写1,场效应管截止,io口相当于处在默认状态,也就是浮空,那么我们输出1的目的失败。
既然不能输出1,那我觉得是生产单片机的厂家出现了错误。但其实不是错误,这种输出模式叫做开漏输出,也就是我在电路里说的漏极上面不接电源,直接就引出一个引脚当成io口。那这样有啥用,为什么不在内部直接接上电源和电阻呢,这样不就能输出1了。他不在内部接电源和电阻,那不是迫使用户去在外部给他接上,才能完成输出1的功能吗?确实是这样。
但是开漏输出也有好处的:
1,芯片内部电阻可是很占地方的,那我让用户自己去外部配置电阻,就可以减少我芯片的大小了。
2,在通信里,这种开漏输出非常有好处,能实现线与的功能。我就不说了。
我们使用单片机就只需要去注意他内部是不是开漏输出。如果是开漏输出,而且有输出1的需求的话,那就得加上拉电阻了。要不然输出不了1,就尴尬了,就会导致做出来的东西不是自己想要的效果。
在网上直接搜芯片型号或者去一些商家的官网或者买芯片的时候他都会有datasheet也就是数据手册,那里会画图,是不是开漏输出,就能看出来了