51單片機(jī)故障分析一個(gè)
故障現(xiàn)象:
做了一個(gè)單片機(jī)溫度監(jiān)測(cè)系統(tǒng),仿真機(jī)上一切正常,燒寫芯片無法工作。
相關(guān)電路框圖:
用51做處理器,外圍電路如圖,一片雙積分轉(zhuǎn)換芯片ICL7135做AD,它的時(shí)鐘需要125K,用51的ALE經(jīng)過一片CD4024分頻得到。1403提供基準(zhǔn)源。另外,一片7660提供7135工作所需要的負(fù)壓。
為了省電,把所有模擬電路部分電源用一個(gè)晶體管管理起來,由P1.0來控制。(上圖為示意圖,省去了電阻沒畫)P1.0為地的時(shí)候,模擬系統(tǒng)才上電
現(xiàn)在怪現(xiàn)象如下:
仿真機(jī)正常運(yùn)行,燒寫芯片后無反應(yīng)。
仿真正常,說明外圍芯片完全正常,電路也沒有錯(cuò)誤。
經(jīng)過檢查,晶體正常,復(fù)位可靠,EA高,程序堆棧都沒有溢出,并排除其它一切低級(jí)錯(cuò)誤的可能。
再編寫一程序,
main()
{
while(1) {P1.1=0;}
}
P1.1和VCC間接有一發(fā)光管,開機(jī)無反應(yīng)。
后來,發(fā)現(xiàn)更奇怪的現(xiàn)象:
拔除CD4024,MC1403,ICL7135,ICL7660中的任何一個(gè),系統(tǒng)就可以正常運(yùn)行!
百思不得其解,茶飯不思,郁悶了N久
更換全部芯片,如故。
更換ATMEL/PHILIPS/WINBOND的N款單片機(jī),如故。
檢查,排除電路故障的可能,
后來又發(fā)現(xiàn),只要上電之前把P1.0對(duì)地短路,(也就是模擬部分強(qiáng)加電源),上電,系統(tǒng)正常運(yùn)行。
但是,如果開機(jī)前P1.0不對(duì)地短路,上電一定不能運(yùn)行,此后即使再把P1.0對(duì)地接,也不行。
順這個(gè)思路,應(yīng)該是和模擬部分有關(guān)……
又是郁悶N久,之后,無意間翻看CD4024內(nèi)部圖,茅塞頓開……
CD4024等TTL/CMOS邏輯芯片,為了防止靜電或錯(cuò)誤的IO電平,內(nèi)部都有保護(hù)電路
如圖2,每個(gè)IO口都有如圖的2個(gè)二極管,集成在芯片內(nèi)部。保證IO口電壓在-0.6~5.6V之間
復(fù)位的過程中,全部IO為高,P1.0和ALE當(dāng)然也是高。這樣模擬部分不上電。
那么,ALE的輸出角就等效于通過一個(gè)二極管向這四塊模擬芯片供電?。。。ㄈ鐖D)
ALE的輸出能力不強(qiáng),自然,ALE就被拉低了。
在查看51的手冊(cè),ALE和/PROG腳是復(fù)用的??!
在復(fù)位過程中,ALE如果為低,芯片進(jìn)入編程狀態(tài)?。?!
也就是說,我的系統(tǒng)在上電復(fù)位的過程中就進(jìn)入了PROG編程模式,難怪一條語(yǔ)句都不能執(zhí)行
那么,也很好解釋為什么四個(gè)芯片中拔掉一個(gè)就能正常工作了,因?yàn)樨?fù)載輕了,ALE可能還沒有被拉到2.5V以下,所以正常復(fù)位進(jìn)入程序。
解決的辦法:ALE接2K的上拉,再通過47K電阻接到Cd4024上,上電,一切正常!
結(jié)論:?jiǎn)纹瑱C(jī)編程模式/ISP模式是通過用戶很不容易出現(xiàn)的一個(gè)時(shí)序來啟動(dòng)的,在一些特殊應(yīng)用時(shí)要小心避開這些非用戶代碼模式。