51单片机故障问题分析

故障现象:
做了一个单片机温度监测系统 , 仿真机上一切正常 , 烧写芯片无法工作 。
相关电路框图:
 
用51做处理器 , 外围电路如图 , 一片双积分转换芯片ICL7135做AD , 它的时钟需要125K , 用51的ALE经过一片CD4024分频得到 。1403提供基准源 。另外 , 一片7660提供7135工作所需要的负压 。
为了省电 , 把所有模拟电路部分电源用一个晶体管管理起来 , 由P1.0来控制 。(上图为示意图 , 省去了电阻没画)P1.0为地的时候 , 模拟系统才上电
现在怪现象如下:
仿真机正常运行 , 烧写芯片后无反应 。
仿真正常 , 说明外围芯片完全正常 , 电路也没有错误 。
经过检查 , 晶体正常 , 复位可靠 , EA高 , 程序堆栈都没有溢出 , 并排除其它一切低级错误的可能 。
再编写一程序 , 
main()
{
while(1) {P1.1=0;}
}
P1.1和VCC间接有一发光管 , 开机无反应 。
后来 , 发现更奇怪的现象:
拔除CD4024 , MC1403 , ICL7135,ICL7660中的任何一个 , 系统就可以正常运行!
百思不得其解 , 茶饭不思 , 郁闷了N久
更换全部芯片 , 如故 。
更换ATMEL/PHILIPS/WINBOND的N款单片机 , 如故 。
检查 , 排除电路故障的可能 , 
后来又发现 , 只要上电之前把P1.0对地短路 , (也就是模拟部分强加电源) , 上电 , 系统正常运行 。
但是 , 如果开机前P1.0不对地短路 , 上电一定不能运行 , 此后即使再把P1.0对地接 , 也不行 。
顺这个思路 , 应该是和模拟部分有关……
又是郁闷N久 , 之后 , 无意间翻看CD4024内部图 , 茅塞顿开……
CD4024等TTL/CMOS逻辑芯片 , 为了防止静电或错误的IO电平 , 内部都有保护电路
 
如图2 , 每个IO口都有如图的2个二极管 , 集成在芯片内部 。保证IO口电压在-0.6~5.6V之间
复位的过程中 , 全部IO为高 , P1.0和ALE当然也是高 。这样模拟部分不上电 。
那么 , ALE的输出角就等效于通过一个二极管向这四块模拟芯片供电!!!(如图)
ALE的输出能力不强 , 自然 , ALE就被拉低了 。
【51单片机故障问题分析】在查看51的手册 , ALE和/PROG脚是复用的!!
在复位过程中 , ALE如果为低 , 芯片进入编程状态!!!
也就是说 , 我的系统在上电复位的过程中就进入了PROG编程模式 , 难怪一条语句都不能执行
那么 , 也很好解释为什么四个芯片中拔掉一个就能正常工作了 , 因为负载轻了 , ALE可能还没有被拉到2.5V以下 , 所以正常复位进入程序 。
解决的办法:ALE接2K的上拉 , 再通过47K电阻接到Cd4024上 , 上电 , 一切正常!
结论:单片机编程模式/ISP模式是通过用户很不容易出现的一个时序来启动的 , 在一些特殊应用时要小心避开这些非用户代码模式 。

    推荐阅读