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