STC51系列微控制器不斷電自動下載程式
以前在進行微控制器程式設計時比較煩惱的時每次下載程式都需要斷電,點選下載,再上電才能將程式下載到微控制器,如果偶爾一兩次這樣操作可以忍受,但是往往我們都是需要除錯程式碼,多次進行下載操作,不斷的斷電上電無疑對微控制器來說是一個很大的損傷。
根據stc12c5a60s2(一片增強型的51微控制器,相容stc89c52微控制器)的資料手冊,可以通過微控制器系統軟復位,使微控制器執行系統啟動程式碼(這部分程式碼不同於我們的使用者程式碼),我們斷電再上電也是這個原理。通過往IAP_CONTR(C7H)寫60H實現系統的軟復位,然後進行自動下載。微控制器復位後有兩種啟動形式,一種是從使用者程式區啟動,我們平時按復位鍵就是這種啟動形式,另一種是從ISP程式區啟動,斷電啟動屬於這種方式,通過設定IAP_CONTR可以實現這種啟動方式,我們需要下載程式,所以需要從ISP程式區啟動。具體的暫存器設定請參考官方資料手冊。
具體實現步驟如下:
首先將下面的程式碼通過我們以前的老方式下載到微控制器中
IAP_CONTR EQU 0C7H
ORG 0000H
LJMP START
ORG 0023H
LJMP SERIAL
START:
LCALL SERIALINIT
MainLoop:
SJMP MainLoop
SERIALINIT:
MOV SP,#60H
MOV SCON,#50H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
SETB ES
SETB EA
SERIAL:
PUSH ACC
PUSH PSW
JNB RI,RIGO
CLR RI
MOV A,SBUF
CJNE A,#0AFH,RIGO;
NOP
NOP
NOP
MOV IAP_CONTR,#60H
RIGO:
POP PSW
POP ACC
RETI
END
然後對stc-isp進行如下設定
自定義命令可以根據自己需要修改,同時代碼也要跟著修改。
上面程式碼的主要原理是開啟微控制器串列埠中斷,當使用stc-isp下載程式時,軟體會先往微控制器寫AFH命令,微控制器通過串列埠檢測到這個命令時就進行系統軟復位,系統軟復位後,微控制器系統程式碼就將使用者程式碼下載到微控制器。
每次下載程式碼都需要將上面的程式碼加到自己的程式碼中去。
當然不止這一種通過串列埠傳送特定命令的方式來使系統軟復位,比如也可以設定一個按鍵,檢測到這個按鍵按下就執行MOV IAP_CONTR,#60H。核心就是MOV IAP_CONTR,#60H這一條命令,但在什麼情況下執行這條命令就需要根據自己的想法和實際使用來設計了。