实验室札记
单片机I/O口上拉电阻引起的问题

🏠 首页 《无线电》杂志 2005年 🔗 第1期 🔗 第40页 分类:电脑·单片机·通信 🔗 张春峰 🔗

笔者多年从事电子工作,在单片机编程设计及程序调试过程中碰到过许多“麻烦”,也从中积累了一些所谓的“经验”,记录了一些笔记。笔者将这些“麻烦”以“实验室札记”形式系列化地写出来,结合具体的实例并附上相关的电路或程序的编写,对这些“麻烦”进行从原因到结果的解读,希望能对单片机初学入门的读者有所帮助。

电路简介

图1是笔者以前研制的电力变压器绕线机智能控制装置电路的一部分。图中单片机P87LPC767与E2PROM存储器CAT24WC02、多功能8位LED数码显示驱动专用芯片zlg7289A构成了绕线数据保存与显示电路。

图1
图1 🔍原图 (567×320)

P87LPC767为20脚封装,是Philips公司推出的一种80C51改进型MCU,工作电压范围为2.7~6V,片内增加了WTD看门狗检测监视器、I2C总线、两个模拟比较器以及四通道8位A/D转换器的高集成度、低功耗、低成本的嵌入式智能化器件。其I/O口各自可进行数据信号、模拟信号、输入与输出,具有上拉及标准口等设置,另外还有与PIC系列单片机类似的键盘中断功能。

图中的zlg7289A是一片具有串行接口的,可同时驱动8位共阴LED数码管并可连接8×8键盘矩阵的智能控制芯片。zlg7289A内含译码器,可直接接收BCD码或16进制码,并具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。

问题现象

本电路中,P87LPC767被设置成片内振荡(6MHz)和片内复位,因而省去了外部晶体振荡电路、复位电路等,外围电路极为简单,20脚的MCU芯片,除电源Vcc和地Vss外,其余的18个引脚都作I/O口用。而这里的zlg7289A用于驱动7位共阴LED数码管,且只使用3个键——用以设置、查看、显示绕线的卷数及相关的运行速度。当时设计时只考虑到布线方便而没仔细推敲,就在电路板上将P87LPC767的10、9、8、7脚与zlg7289A的6、7、8、9脚一一对应地连接起来,等到组装完毕后进行调试时,才发觉显示部分不能正常工作,只能显示零碎的几个笔段而无完整的数据显示,且上电以后就无变化反应了。

分析处理

查看电路板的焊接并查看源程序未发现错处。用仿真器作“断点”运行对源程序逐段进行检查,发现与zlg7289A连接的3个按键按下时程序“断点”都有反应,而显示屏却依然无数据显示。zlg7289A连接的3个按键有反应,说明zlg7289A自身的工作可能是正常的(因为按键信息是经过zlg7289A内部处理后由“KEY”引脚送到P87LPC767的),那么显示屏为什么始终无相应变化的数据显示呢?

这样折腾差不多一天毫无进展,到了晚上静下心来时才突然想起P87LPC767的9(P1.3)、10(P1.2)两个引脚本是可作I2C串口配置的,在作为I2C串行口使用时分别为数据(SDA)输入/输出和时钟(SCL)输入/输出口,为了与I2C的格式一致,当配置成输出时为漏极开路输出,因此其作为主控单元与zlg7289A这类的芯片通信连接时9(P1.3)、10(P1.2)两个引脚必须要外接上拉电阻!焊接上两个上拉电阻后(如图2所示)一切正常——起初由于与zlg7289A的6脚(CS)、7脚(CLK)的两个端口连接P1.2、P1.3两个引脚时未意识到其输出是开漏输出,因而也就没去外接上拉电阻了,使得片选信号(CS)和时钟信号(CLK)不能正常输出,导致数据信号不能正常传送,因而也就没有相应的数据显示了。

图2
图2 🔍原图 (425×272)

总结

其实,不同型号的单片机,或同一单片机的不同I/O端口对上拉电阻的要求也各不相同。比如Microchip公司的PIC系列单片机的I/O脚输出电路为CMOS互补推挽输出。当需要与其他电路接成“线或”时,该I/O脚必须置为“0”状态(即输出状态),并外接上拉电阻;如需要与其他电路接成“线与”时,则该I/O脚必须置为“1”状态(即输入状态),并外接下拉电阻,否则可能引起输出电流过载,烧坏PIC单片机。作为普通I/O口使用,如PIC的RA口的大多引脚具有TTL输入和CMOS输出,但RA4却例外——具有史密特输入,漏极开路输出!因此当该脚作为逻辑输出口线时,必须外接上拉电阻。又如AT89C2051的P1.0和P1.1可作为其内部精密模拟比较器的正向输入端(AIN0)和负向输入端(AIN1),因而其内部无上拉电阻,若作为普通I/O数据口使用时也必须外接上拉电阻。还有像8051系列单片机的P0口,当8051组成的系统无外扩展存储器,CPU对片内存储器和其8个I/O口读/写(执行MOV指令或EA=1时执行MOVC指令)时,由内部硬件自动控制,使输出端成为漏极开路的“开漏”输出,因而也需外接上拉电阻。

由实践可知,对于单片机的I/O口,加接排阻等上拉电阻是不无裨益的(除了作模拟口使用外)。但是,上拉电阻拉一个单纯的输入信号,电流可能在几十微安以下,若拉一个被驱动了的信号,其电流则将达毫安级了,因此对于用干电池作电源,尤其是在用钮扣电池做电源的袖珍式器件的设计中,就不得不考虑:一方面是能耗问题,另一方面是有限电路板空间问题。在这种场合下,上拉电阻还是可省的则尽量地省了。

参考资料

上文中提及的单片机P87LPC767、多功能8位LED数码显示驱动专用芯片zlg7289A、E2PROM存储器CAT24WC02几个芯片的相关资料(均是pdf格式的文本资料,备有Acrobat Reader 5.0应用软件则可打开)分别可由以下网站查阅。

1.http://www.zlgmcu.com/philips/51lpc/p87lpc767/P87LPC767_cn.pdf。

2.http://www.zlgmcu.com/hotic/xuanxing/zlg7289Axuanxing.pdf。

3.http://www.zlgmcu.com/philips/yingrong/iic/CAT24WCXX_E2PROMyingrong.pdf。

文/张春峰