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