/**********************************************************************
//stc89c52單片機下載命令是0X7F(1200bts) 只要在串口通信(設置為1200bts)檢測判斷收到的數據為a==0X7F 再命令 {ISP_CONTR=0x60;} //就可以從STC的ISP區開始運行程序的軟件復位設置
// {ISP_CONTR=0x60;} //從STC的ISP區開始運行程序的軟件復位設置
//簡單程序測試可以 在主程序里有延時
本人玩單片機只是娛樂,并無工程應用,所以手中的單片機芯片很少,只有幾片AT89S51/52及AT89C2052和一片STC12C5A60S2及一片STC12C4052AD,由于不會使用軟件仿真,所以只是用單片機最小系統進行仿真實驗,為了達成一個想法、實現一種控制用途,往往需要反復調試程序,也就需要反復下載程序到單片機芯片中;以前,用89S51/52單片機時,應用倒也得心應手,只要芯片不被刷“爆”,改一條語句刷一次程序也無妨。
自從使用STC單片機后,情形不同了,STC單片機要求每刷一次程序都要求電源斷電一次,而當裝置制作完成后(如12864LCD電子日歷),由于沒有設計安裝電源開關,調試程序就更加麻煩了,只能頻繁的拔插電源插頭。為此糾結了好長時間;百度一下后發現了一段支持STC單片機免斷電下載的程序,可是由于菜鳥的原因,那段被轉載了無數次的C源代碼讀來讀去不知所云,貌似要先設置中斷、串口等而后再延時等等;既然程序都讀不懂,應用就更甭提了;就這樣邊琢磨著邊一遍一遍的拔插插頭繼續調試著我的那段網來的電子日歷程序。
一次偶然,改變了一切,一次調試程序時由于沒有關閉電腦的外掛音箱,在下載程序點擊軟件的下載按鈕時,音箱里傳出了“咚咚”兩聲聲響,起初并未在意,后來發現這真是軟件在執行下載指令時的必要動作;這才引起注意,于是,馬上打開示波器,把電路中串口RXD腳引出導線來進行檢測,發現不操作軟件時只有一條1V左右的直流電平線顯示,用指針萬用表測量約1.2V,當點擊下載按鈕時,示波器瞬間顯示有兩個稍近一個稍遠的3個下跳脈沖,(由于示波器功能簡單未能捕捉到穩定的圖像)而萬用表指針微幅度回擺了2次;在下載軟件中換了幾個型號的器件進行操作,觀察到的現象大致相同;一個想法瞬間縈繞腦海,看來這兩款STC單片機不斷電下載程序是可以的,并且好像用不著很麻煩的設置和程序。
帶著這個想法,下載了這兩款STC單片機的數據手冊,一讀之下,豁然開朗,原來STC單片機的軟件復位功能中包含了軟件控制從ISP監控程序區開始復位啟動,而且清楚的表明,只要用戶向STC12C2052AD的ISP_CONTR(STC12C5A60S2為IAP_CONTR)控制寄存器中寫入06H即可;經過幾次試驗終于搞定,而且方法及程序及其簡單,興奮之余,存錄于此以資備忘。
//******************************************************
sbit ON=P3^0;// ”不斷電 下載程“ ON=1;既RXD(P3.0端口)口置1, 其原因就是在未進行端口操作時,該端口電平為1.2V相當于低電平,
// {ISP_CONTR=0x60;} //從STC的ISP區開始運行程序的軟件復位設置
//只有將其設置為1后才能進行軟件的低電平檢測;若將P3.0端口置1的語句放在主循環內,
//則P3.0口將不能用于其它控制而將P3.0端口置1的語句放在主循環外,則可以保留該I/O口用于其它用途。