自己在學51單片機時選用的是AT89S5X系列的單片機,后來接觸到STC89C5X系列和STC12、15系列后因為豐富的內(nèi)部資源和合適的價格,而且直接用串口就能下載程序,大多數(shù)基本選用了STC的單片機。
但是STC單片機有個說麻煩不麻煩,但說不麻煩又挺煩的問題。就是下載程序時需要重啟電源,在寫程序驗證過程中不斷修改程序在所難免,于是重啟電源就成了不小的負擔,而且影響心情還傷電源開關(guān),這點就足以讓我還對ATMEL的SPI燒寫余情未了!人家多方便,一鍵OK。
于是乎!百度看看有沒有可以解決這個問題的方法,果然這STC單片機的這個不方便大家都有共識,但是真正有人愿意共享出來的資料,要么程序一看就有錯誤,分明STC15F104W沒有串口模塊偏寫個串口中斷,貼個電路圖和程序都不搭邊。。。我無語,看了文庫里的資料那叫一個內(nèi)牛滿面。。。發(fā)資料的人你就不能不嘚瑟嘛,把他的心路歷程有感情的看完后才發(fā)現(xiàn)人家也是COPY的,而且經(jīng)過美化完全不成樣子。。。
于是乎!還是自力更生吧。。主控芯片選用STC15F104W。我喜歡STC15F104W這塊單片機,因為它只有8個腳,小巧玲瓏的東西就是看著喜歡。但為什么不給它裝個UART模塊,老姚(網(wǎng)上都這么叫)實在是太小氣了!
雖然說網(wǎng)上資料很坑,但是起碼思路還有那么一絲靠譜。原理很簡單,無非就是STC_ISP這個軟件在加載完HEX文件后點擊“下載”后,軟件會給選中串口發(fā)送一連串相同的數(shù)據(jù),我叫他握手信號吧,這個握手信號其實就是一個固定的波形,無非我用2400bps的波特率讀出是“0x7F”,用9600bps讀出的是“0xF8”,我程序就是9600bps的波特率?;蛘咂渌ㄌ芈首x出是啥。。。自己看看就知道了。。。
STC的單片機上電后首先是執(zhí)行一小段驗證程序,判斷是否要進入燒寫程序過程,如果沒有這個驗證信號就執(zhí)行ROM里的程序,當然這個驗證的程序是STC單片機生產(chǎn)時就定義了的我們沒法改變。
我要實現(xiàn)不用手動上電,那必須需要一個“電子開關(guān)”來幫我上電,三極管、繼電器、MOS管。。。。隨便你。
我用的是繼電器來給需要編程的STC單片機重新上電的。電路很簡單,就一個8550加個電阻驅(qū)動一個小繼電器再加個續(xù)流二極管,繼電器控制電源正極對待編程單片機的供電,選擇常閉那對接口。
整個程序很簡單,就是利用IO口來模擬串口接收數(shù)據(jù),判斷當連續(xù)接收到若干個握手信號后判斷,斷開待編程單片機的電源一段時間后重新接通電源,整個過程監(jiān)控芯片(STC15F104W)沒有輸出數(shù)據(jù)到串口線,不影響STC單片機的燒寫。
最終效果很不錯,達到預期的效果了。。。。感興趣的你也試試!
大體原理就這樣,不喜歡藏著掖著,下面是所有資料:STC15F104免上電下載線.rar
上測試圖,雖然這個效果在圖片上完全不能體現(xiàn),但還是喜歡貼子里有圖片。