毛病现象:
做了一个单片机温度监测体系,仿真机上悉数正常,烧写芯片无法作业。
相关电路框图:
用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的手册,ALE和/PROG脚是复用的!!
在复位过程中,ALE假如为低,芯片进入编程状况!!!
也便是说,我的体系在上电复位的过程中就进入了PROG编程形式,难怪一条句子都不能履行
那么,也很好解说为什么四个芯片中拔掉一个就能正常作业了,由于负载轻了,ALE或许还没有被拉到2.5V以下,所以正常复位进入程序。
处理的方法:ALE接2K的上拉,再经过47K电阻接到Cd4024上,上电,悉数正常!
定论:单片机编程形式/ISP形式是经过用户很不简单呈现的一个时序来发动的,在一些特别应用时要当心避开这些非用户代码形式。