做了一個單片機溫度監(jiān)測系統(tǒng),仿真機上一切正常,燒寫芯片無法工作。
相關電路框圖:

用51做處理器,外圍電路如圖,一片雙積分轉換芯片ICL7135做AD,它的時鐘需要125K,用51的ALE經過一片CD4024分頻得到。1403提供基準源。另外,一片7660提供7135工作所需要的負壓。
為了省電,把所有模擬電路部分電源用一個晶體管管理起來,由P1.0來控制。(上圖為示意圖,省去了電阻沒畫)P1.0為地的時候,模擬系統(tǒng)才上電
現(xiàn)在怪現(xiàn)象如下:
仿真機正常運行,燒寫芯片后無反應。
仿真正常,說明外圍芯片完全正常,電路也沒有錯誤。
經過檢查,晶體正常,復位可靠,EA高,程序堆棧都沒有溢出,并排除其它一切低級錯誤的可能。
再編寫一程序,
main()
{
while(1) {P1.1=0;}
}
P1.1和VCC間接有一發(fā)光管,開機無反應。
后來,發(fā)現(xiàn)更奇怪的現(xiàn)象:
拔除CD4024,MC1403,ICL7135,ICL7660中的任何一個,系統(tǒng)就可以正常運行!
百思不得其解,茶飯不思,郁悶了N久
更換全部芯片,如故。
更換ATMEL/PHILIPS/WINBOND的N款單片機,如故。
檢查,排除電路故障的可能,
后來又發(fā)現(xiàn),只要上電之前把P1.0對地短路,(也就是模擬部分強加電源),上電,系統(tǒng)正常運行。
但是,如果開機前P1.0不對地短路,上電一定不能運行,此后即使再把P1.0對地接,也不行。
順這個思路,應該是和模擬部分有關……
又是郁悶N久,之后,無意間翻看CD4024內部圖,茅塞頓開……
CD4024等TTL/CMOS邏輯芯片,為了防止靜電或錯誤的IO電平,內部都有保護電路

如圖2,每個IO口都有如圖的2個二極管,集成在芯片內部。保證IO口電壓在-0.6~5.6V之間
復位的過程中,全部IO為高,P1.0和ALE當然也是高。這樣模擬部分不上電。
那么,ALE的輸出角就等效于通過一個二極管向這四塊模擬芯片供電!?。。ㄈ鐖D)
ALE的輸出能力不強,自然,ALE就被拉低了。
在查看51的手冊,ALE和/PROG腳是復用的??!
在復位過程中,ALE如果為低,芯片進入編程狀態(tài)!??!
也就是說,我的系統(tǒng)在上電復位的過程中就進入了PROG編程模式,難怪一條語句都不能執(zhí)行
那么,也很好解釋為什么四個芯片中拔掉一個就能正常工作了,因為負載輕了,ALE可能還沒有被拉到2.5V以下,所以正常復位進入程序。
解決的辦法:ALE接2K的上拉,再通過47K電阻接到Cd4024上,上電,一切正常!
結論:單片機編程模式/ISP模式是通過用戶很不容易出現(xiàn)的一個時序來啟動的,在一些特殊應用時要小心避開這些非用戶代碼模式。