??? 摘??要: 基于LabVIEW平臺(tái)對(duì)PC機(jī)與PIC12FX小型單片機(jī)的串行通信" title="串行通信">串行通信進(jìn)行了具體分析。
??? 關(guān)鍵詞: PIC12FX? LabVIEW? 模擬串行通信
?
??? PIC系列單片機(jī)是美國(guó)Microchip公司推出的新型CMOS工藝單片機(jī),PIC12FX單片機(jī)是 PIC中檔系列中的一款小型單片機(jī),該單片機(jī)具有實(shí)用、低價(jià)、省電、小巧、高速等特點(diǎn),是一種適合在小型設(shè)備中使用的高性價(jià)比單片機(jī),在許多領(lǐng)域有相關(guān)應(yīng)用。
??? PIC12FX的計(jì)算功能需要借助PC機(jī)的強(qiáng)大數(shù)據(jù)處理功能,這就需要實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的數(shù)據(jù)通信。串行通信是比較方便的通信方式,然而該單片機(jī)內(nèi)沒有提供串行口,因而實(shí)現(xiàn)串行通信需要自己設(shè)計(jì)硬件電路" title="硬件電路">硬件電路和通信軟件實(shí)現(xiàn)。PC機(jī)可選用LabVIEW、Delphi、VC、VB、PowerBuilder等軟件來實(shí)現(xiàn)串行通信,不管PC機(jī)采用哪種軟件,串行通信時(shí)PC機(jī)與PIC12FX的硬件連接方式是相同的,PIC單片機(jī)的程序設(shè)計(jì)也基本相同。本文基于LabVIEW分析了PIC12FX與PC機(jī)串行通信的硬件連接及軟件設(shè)計(jì)" title="軟件設(shè)計(jì)">軟件設(shè)計(jì)方法。
1 PIC12FX單片機(jī)硬件電路和通信軟件設(shè)計(jì)
1.1 PIC12FX硬件實(shí)現(xiàn)方法和電路設(shè)計(jì)
??? PIC12FX沒有專門的通信口(RXD、TXD)及波特率發(fā)生器,需要通過I/O口來模擬串行通信口進(jìn)行通信。PC機(jī)的串行接口是符合EIARS232C規(guī)范的外部總線標(biāo)準(zhǔn)接口。RS-232C采用的是負(fù)邏輯,即邏輯“1”:-5V~-15V;邏輯“0”:+5V~+15V。而CMOS電平為:邏輯“1”:4.99V,邏輯“0”:0.01V;TTL電平的邏輯“1”和“0”則分別為2.4V和0.4V。因此在用RS-232C總線進(jìn)行串行通信時(shí)需外接電路實(shí)現(xiàn)電平轉(zhuǎn)換" title="電平轉(zhuǎn)換">電平轉(zhuǎn)換。在發(fā)送端用驅(qū)動(dòng)器將TTL或CMOS電平轉(zhuǎn)換為RS-232C電平,在接收端用接收器將RS-232C電平再轉(zhuǎn)換為TTL或CMOS電平。這里選用了MAXIM公司的MAX232來實(shí)現(xiàn)電平轉(zhuǎn)換。MAX232屬于MAXIM公司的通用串行接收/發(fā)送驅(qū)動(dòng)器芯片。其外圍電路簡(jiǎn)單,只需外接4個(gè)0.1μF的電容(104)即可,如圖1所示。
?????????????????????????????
??? 圖1中MAX232將PIC12FX的TX(GP1)輸出的TTL電平信號(hào)轉(zhuǎn)換為RS-232C電平,輸入到PC機(jī),并將PC機(jī)輸出的RS-232C電平轉(zhuǎn)換為TTL電平,輸出到PIC12FX的RX(GP2)引腳。
1.2 PIC12FX通信軟件設(shè)計(jì)
??? PIC12FX 硬件電路通過RS-232C串口與PC機(jī)通信,完成數(shù)據(jù)接收和發(fā)送;由PC機(jī)決定是發(fā)送還是接收數(shù)據(jù),控制指令與數(shù)據(jù)通信情況在PC機(jī)上" title="機(jī)上">機(jī)上顯示。圖2和圖3分別是串行發(fā)送和接收數(shù)據(jù)的子程序流程圖。
????????????????????????????????
??? 發(fā)送時(shí),數(shù)據(jù)發(fā)送端TX為低電平并保持N秒(N=1/波特率,如波特率為9600b/s,N為104μs)作為發(fā)送起始位,隨后每隔N秒發(fā)送一位數(shù)據(jù)位(1bit),最后一個(gè)數(shù)據(jù)位發(fā)送完后,TX為高電平并保持N秒作為發(fā)送停止位。接收時(shí),接收端RX要以約N/2秒(如波特率為9 600b/s,N/2為52μs)檢測(cè)一次起始位,如果檢測(cè)到起始位,則在約1.5ns(如波特率為9600b/s,1.5N為156μs)檢測(cè)第一位數(shù)據(jù)位,隨后每N秒檢測(cè)一次,接收其他的數(shù)據(jù)位,直至接收到停止位。
??? 發(fā)送與接收子程序清單如下:
;----------------------------
LIST?? ??????????? ?P=12FX
#INCLUDE??????????? P12FX.INC
CBLOCK??????????? 0X20
RTX????????????????????????????????
RCV ?
R_CNT???????????????????????????????
???? ENDC
;===========================引腳定義
#DEFINE???? ?RX???? ?GPIO,GPIO0
#DEFINE???? ?TX???? ?GPIO,GPIO1
???? ORG???? ?0X000
???? GOTO??? ?MAIN
;===========================
MAIN
???? BCF???????????? ??STATUS,RP0
???? CLRF??????????? ??RCV
;===========================串口初始化
???? CLRF??????????? ??GPIO
???? MOVLW????????? ?07H
???? MOVWF????????? ?CMCON??
???? BSF????????????? ??STATUS,RP0
???? MOVLW????????? ?01H
???? MOVWF????????? ?TRISIO
;===========================接收數(shù)據(jù)
RX_START
???? MOVLW????????? ?.8
???? MOVWF????????? ?R_CNT
START_CHECK
???? BTFSC??????????? ?RX
? GOTO???????????? ?START_CHECK
???? CALL???????????? ??DELAY1
???? CALL???????????? ??DELAY1
RX_DATA_START
???? BTFSC??????????? ?RX
???? BSF?????????????? ??RCV,7
???? BTFSS???????????? ?RX
???? BCF?????????????? ??RCV,7
???? DECFSZ?????????? ?R_CNT
???? GOTO???????????? ?RX_NEXT
???? GOTO???????????? ?TX_START
RX_NTXT
???? RRF?????????????? ?RCV
???? CALL????????????? ?DELAY1
? GOTO???????????? ??RX_DATA_START
;===========================發(fā)送數(shù)據(jù)
TX_START
MOVLW?????????? ?.8
MOVWF?????????? ?R_CNT
BCF?????????????? ?TX
CALL????????????? ?DELAY2
TX_NEXT
RRF?????????????? ?RTX
BTFSC???????????? ?STATUS,C
BSF?????????????? ?TX
BTFSS???????????? ?STATUS,C
BCF?????????????? ?TX
CALL????????????? ?DELAY1
DECFSZ??????????? ?R_CNT
GOTO ??????????? ?TX_NEXT
TX_STOP
???? BSF??????????????? ?TX
???? CALL????????????? ?DELAY1
TX_OVER????????????? ?GOTO? RX_START
;===========================延時(shí)子程序
DELAY1
???? MOVLW?????????? ?17H
???? MVWF??????????? ?TEMP
LOOP1
???? DECFSZ?????????? ?TEMP
???? GOTO???????????? ?LOOP1
???? RETLW??????????? ?0
DELAY2
???? MOVLW?????????? ?1EH
???? MOVWF?????????? ?TEMP
LOOP2
???? DECFSZ?????????? ?TEMP
???? GOTO???????????? ?LOOP2
???? RETLW??????????? ?0
;-------------------------------
END
;-------------------------------
2 PC機(jī)主控端通信軟件設(shè)計(jì)
??? 要實(shí)現(xiàn)單片機(jī)與PC機(jī)之間的數(shù)據(jù)通信,不僅要對(duì)硬件電路及單片機(jī)進(jìn)行軟件設(shè)計(jì),還要在PC機(jī)上設(shè)計(jì)通信軟件,下面以LabVIEW為例介紹其在串行通信中的軟件設(shè)計(jì)。
??? LabVIEW是美國(guó)國(guó)家儀器公司NI(National Instruments)推出的一種基于圖形方式的集成化開發(fā)環(huán)境,是目前國(guó)際上唯一的編譯型圖形化編程語(yǔ)言(G語(yǔ)言),在以PC機(jī)為基礎(chǔ)的測(cè)量和控制通信軟件中得到廣泛應(yīng)用。在編寫LabVIEW通信程序時(shí),通過在前面板(應(yīng)用程序界面)和后面板(程序的代碼窗口)進(jìn)行編程,前面板將后面板程序的運(yùn)行結(jié)果反應(yīng)出來,圖4所示為PC機(jī)上串行通信的程序編寫流程圖。
?????????????????????????????
??? 文中分析了PIC12FX小型單片機(jī)與PC機(jī)串行通信的硬件和軟件設(shè)計(jì)方法,給出了演示參考程序,在實(shí)際應(yīng)用中,只要按照具體需求對(duì)該程序作相應(yīng)的修改就可滿足實(shí)際應(yīng)用需求。隨著PIC單片機(jī)越來越廣泛的應(yīng)用,PC機(jī)與PIC單片機(jī)之間的通信成為實(shí)際設(shè)計(jì)中必須解決的問題,本文對(duì)串行通信問題的解決具有較好的參考價(jià)值。
參考文獻(xiàn)
[1] ?Microchip. PIC12FX數(shù)據(jù)手冊(cè)[S]. Microchip公司.2004.
[2] ?石朝林(譯).PIC單片機(jī)宏匯編與集成開發(fā)環(huán)境[M].北京:清華大學(xué)出版社,2002.
[3] ?王有緒,許杰,李拉成. PIC系列單片機(jī)接口技術(shù)及應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航天航空大學(xué)出版社,2003.
[4] ?鄧焱,王磊.LABVIEW7.1測(cè)試技術(shù)與儀器應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2004.