?? usart 通過232通訊例程.c
字號:
232
RS232通信方式是常用的單片機與PC通信的方式,PIC16F87X系列芯片可以通過SCI(串行通信接口)來實現與PC的通信。以下我們將通過ICDDEMO演示實驗板上的RS232通信電路來調試與PC的通信,其電路如下圖所示:
其中TX和RX分別為PIC16F877的發送和接收引腳,由于PC的串口輸出的是12V電壓,因此要實現PIC芯片和PC的通信,還需要進行電平轉換,該板使用的電平轉換芯片是MAX232。在調試之前請將PC與ICDDEMO演示實驗板用9芯串行電纜連接好并鎖緊,并且將DIP6(S10)的第2、4開關撥至“ON”的位置上。調試時PC用的上位機程序可以采用WINDOWS帶的超級終端(啟動方式:開始-)程序-)附件-)通訊-)超級終端),或者使用網上很容易找到的串口調試軟件。
1、 串行通信的波特率設置:
要啟動串口通訊首先要選擇合適的波特率,PIC的SCI接口有一個8位的波特率發生器,它根據SPBRG寄存器的值來決定周期;另外在異步通信的方式下波特率還和BRGH位的狀態有關,當BRGH=1時是高速方式。
異步方式下波特率的計算公式為:波特率=Fosc/[64(X+1)](低速方式)或波特率=Fosc/[16(X+1)](高速方式)。其中Fosc是芯片振蕩頻率,X是SPBRG寄存器的值。通過這個公式我們可以計算出在特定波特率下,需要寫入SPBRG寄存器的初始值。例如如果我們采取高速的方式使用9600的波特率,那么當芯片振蕩頻率是4MHz時,SPBRG=4000000/(9600*16)-1=25(實際是25.042,取最接近的整數值)。
2、 異步方式下的數據發送:
異步發送時,如果TSR和TXREG都為空,那么當數據寫入TXREG之后會馬上被轉移到TSR寄存器。這時TXREG為空,TXIF=1,表明可以再往TXREG中寫數據。注意此時發送并未完成,如果要知道數據是否發送完成則需要查詢TRMT位。
3、 異步方式下數據的接收:
異步接收時,當接收到停止位時如果RCREG是空的,RSR就會將數據轉移至RCREG,傳送完成后,置RCIF為1。RCIF是只讀位,當RCREG的數據被讀出后將由硬件清0。
RCREG寄存器實際上是2級的FIFO(先進先出)存儲器,如果RSR中接收到了第3個數據的停止位,而RCREG寄存器2級都是滿的,那么將會導致數據溢出,硬件將置OERR為1。請注意必須清除OERR位之后才能重新接收數據,用戶可以通過對CREN清0的方式來清除OERR位。
4、 異步通信的數據格式:
在異步工作方式下,串行通信接口采用的是標準不歸零(NRZ)格式,即1位起始位、8位或9位的數據位和1位停止位。最常用的是8位數據的格式。
RCDATA EQU 30H
RCFLAG EQU 31H
RCOneSIGN EQU 0
RCWrong EQU 5
#INCLUDE <P16877.INC>
org 0
nop
goto start
org 4
intentr
goto intsever
;____________________________
org 9
start
clrf RCFLAG
clrf RCDATA
InitUart
bsf STATUS,RP0
bcf RCFLAG,RCOneSIGN
movlw b'10111111' ;TX=output
movwf TRISC
movlw b'10100110'
movwf TXSTA
movlw 19h
movwf SPBRG ;9600,high speed mode
bsf STATUS,RP0
movlw b'00100000'
movwf PIE1
movlw b'11000000'
movwf INTCON
bcf STATUS,RP0
movlw b'10010000'
movwf RCSTA
main
btfsc RCFLAG,RCOneSIGN
goto TXLoop
;btfss RCFLAG,RCWrong
goto main
TXLoop
bcf STATUS,RP0
movf RCDATA,w
movwf TXREG
bsf STATUS,RP0
btfss TXSTA,TRMT
goto $-2
bcf STATUS,RP0
bcf RCFLAG,RCOneSIGN
goto main
;*****************************
intsever
movf STATUS,w
btfsc STATUS,RP0
bcf STATUS,RP0
movwf RCFLAG
btfsc RCSTA,OERR
goto RCerror
movf RCREG,w
movwf RCDATA
bsf RCFLAG,RCOneSIGN
retfie
RCerror
bcf STATUS,RP0
bcf RCSTA,CREN
movf RCREG,w
movf RCREG,w
movlw b'10010000'
movwf RCSTA
btfsc RCFLAG,RCWrong
bsf STATUS,RP0
clrf RCFLAG
retfie
;----------------
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -