对于51单片机的I/O口及外部拉电阻,常见到一些模糊认识。稍微总结一下,或许有点用处。
▲ P1, P2,P3口:对地有一个晶体管做的开关,对电源是内部有个集成电阻(大约几十K~200K前后),
输出时,是由内部晶体管拉到0,或由内部上拉电阻拉到1。
输入时,片内已有上拉,不存在输入悬空的可能。如果数据来自外面的OC门,片内上拉电阻就成了OC门的上拉。如果数据来自外面的非OC门,则片内上拉电阻已无用处了。
▲ P0口:片内对电源、对地各有一个晶体管做的开关,无上拉、下拉电阻。
输出时,是由内部晶体管拉到0,或拉到1。
输入时,会存在输入悬空的情况,但输入数据是靠外界器件来提供,故意拉上拉下均无意义。
输入时分二种用法——总线方式或普通Input口方式,方式是由指令决定的,用MOV指令时是普通口,用MOVX指令时是总线口。
▲ 如果P0外部是接的OC门,为了避免输入悬空,应该用上拉电阻。
如果P0外部是接的非OC门,则不必用上拉电阻。
至于下拉,就不太合适了,因为不便于与OC门配合。
▲ 复位时,4个口自然是输出全1,不用人操心的。
▲ 关于上拉电阻的大小,
上拉电阻的大小收制于对脉冲沿的时间要求,自然也跟负载电容有管。例如负载电容C=100p,希望RC<0.2uS,则R<2K。R太小会过于耗电(输出0时)。
▲P1,P2,P3口是否需要外部上拉电阻?
内部上拉电阻大约几十K~200K前后(于产品型号厂家有关)。由上条可知,如果考虑到脉冲沿的要求,也可能需要加外部上拉电阻。