我最近完成了一個電子琴控制板,采用2個MCU,一個是STC15作掃描鍵盤用(12X8),得到的音符送給STC12再處理,一切妥當,
但開機時偶爾會出現怪現象,我的程序開始時會有一段延遲程序,指示燈會閃,幾秒后就進入主程序,但偶爾會開機后得等一段長
時間(約半分鐘)再進入主程序,但不會死機,操作也正常,這條蟲困擾了一段時間,而且是無解的,我因此懷疑是STC12的復位出現問題。
我的STC12的晶振頻率是18M,根據手冊:
復位電路:時鐘頻率低于12M時,可以不用C1,R1接1K電阻到地時鐘頻率高于12M時,建議使用第二復位功能。
我因為一開始就用11M的晶振,所以就用1K接地,后來改用18M了,還是1K接地,好像也沒事,如今到了定型了,就出現這個問題,而且似乎
沒有解決之道,改回11M的話,所有UART的定時器都得改,紅外線程序的定時LOOP得重新測定,更何況也不確定用11M之后問題就得到解決,
最要命的是那個RST2的腳已經給觸摸IC用了,無法使用第二復位功能。
我以前寫程序曾經用到這個軟重置命令:MOV 0C7H, #00100000B ;RESET TO AP 去重置STC12,發現偶爾會失敗,所以每次都用兩次命令,
算是成功了,但也發現一些寄存器或RAM并沒有歸零,所以都在開始處先來個CLEAN RAM的動作:
MAIN:
CLEANRAM: ;THIS CLEAR INTERNAL RAM FFH TO 00H
MOV A, #0
MOV R0, #0FFH
CLEANRAM1:
MOV @R0, A
DJNZ R0, CLEANRAM1
總之我對STC12的復位充滿疑惑,不知道各位前輩是否有這方面的經驗可以分享,我現在設計電路都開始用STC8了,連那顆1K電阻也免了,
就不明白為何當年的STC12內建了什么MAX810的復位電路還會留下1K的尾巴,現在的STC15和STC8都割掉了,感恩啊!
至于我這片電子琴控制板該怎么善后呢?那天走街看風景忽然靈機一動,這上面不是有另一顆STC15嗎?開機后就讓STC15輸出一個高電位
去復位STC12不就得了,還沒去做,應該可以啦。
|