PIC單片機(jī)驅(qū)動(dòng)RT1602C程序
PIC單片機(jī)驅(qū)動(dòng)RT1602C程序
RT1602C驅(qū)動(dòng)
UART串口輸出,波特率為19200
按鍵掃描:
鍵1控制LCD的顯示狀態(tài),接收狀態(tài)或是發(fā)送狀態(tài)
鍵2循環(huán)控制UART將要輸出的子串口
AD轉(zhuǎn)換功能
UART串口接收中斷
TIME1定時(shí)器中斷
具體請(qǐng)參考硬件連接圖,(注意按鍵部分的硬件設(shè)計(jì)有些問(wèn)題,請(qǐng)自行修改,但不影響軟件功能)
你可以學(xué)到:
1.良好的程序書寫習(xí)慣
2. 多任務(wù)程序設(shè)計(jì)基礎(chǔ)
3. 模塊化程序設(shè)計(jì)
同時(shí),歡迎各路高手指教,謝謝!
非常抱歉的告訴大家,我的2007年度巨獻(xiàn)中可能有一個(gè)宏BUG,該BUG是非常難以發(fā)現(xiàn)的,
但卻存在BUG產(chǎn)生的可能:
在中斷進(jìn)入和退出的壓棧和出棧的宏定義原來(lái)是這樣定義的:
;-------Push special register---------
PUSH_REG MACRO
MOV WF WBUF
MOV F STATUS, W
MOV WF STATUSBUF
MOV F PCLATH, W
MOV WF PCLATHBUF
MOV F FSR, W
MOV WF FSRBUF
ENDM
;-------pop special register----------
POP_REG MACRO
MOV F FSRBUF, W
MOV WF FSR
MOV F PCLATHBUF, W
MOV WF PCLATH
MOV F STATUSBUF, W
MOV WF STATUS
MOV F WBUF, W
ENDM
;-------MACRO FOR interrupt push and pop special register end-------
好象在較早的PIC資料上也是這樣建議的,但是這樣存在一個(gè)BUG,
如果主程序剛好做完處理,對(duì)標(biāo)志位Z進(jìn)行判斷前進(jìn)入中斷,那么中斷后
的出棧Z位就可能已經(jīng)被修改了,由語(yǔ)句 MOV F WBUF,W影響了,為了不影響
出棧后的Z位,只能采用麻煩一點(diǎn)的方式來(lái)傳送WBUF了,出棧宏如下定義:
;-------Push special register---------
PUSH_REG MACRO
MOV WF WBUF
MOV F STATUS, W
MOV WF STATUSBUF
MOV F PCLATH, W
MOV WF PCLATHBUF
MOV F FSR, W
MOV WF FSRBUF
ENDM
;-------pop special register----------
POP_REG MACRO
MOV F FSRBUF, W
MOV WF FSR
MOV F PCLATHBUF, W
MOV WF PCLATH
MOV F STATUSBUF, W
MOV WF STATUS
SWAPF WBUF, D
SWAPF WBUF, W
ENDM