PIC單片機與PC機的串行數據交換
一、前言
本文引用地址:http://www.czjhyjcfj.com/article/171717.htm美國Microchip公司的PIC系列單片機是一種新型的CMOS工藝單片機,其中,有許多單片機內部帶有異步通訊模塊,如PIC16F877等系列芯片。單片機雖然在使用中可等同于一個CPU,但是在許多需要大量計算的運用中,還必須借助微機(PC)的強大數據處理能力,這樣就必須通過通信電路實現 PIC單片機與微機間的可靠數據傳輸。不論PIC單片機內有沒有提供串行口,在實現串行通信時都必須通過自己設計硬件電路和編寫通信軟件來實現,而PIC 單片機要完成較復雜的軟件功能時,需利用其內部相關的特殊功能寄存器來實現。下面介紹PIC16F877與微機間進行異步串行通訊的實現方法,同時給出與微機間進行異步串行通訊的硬件接口電路、程序流程框圖、單片機內通信程序等。
要實現PIC16F877與PC機間進行數據交換,在編寫程序時首先要設置好USART異步通訊模塊工作模式及相關寄存器,現分別介紹如下。
1PIC16F877的USART異步工作設置簡介
PIC16F877的USART與其他具有USART的PIC單片機一樣,可以被設置成為與PC機進行全雙工異步通訊,它是一種利用PORTC口的 RC6和RC7兩個引腳作為通訊的2線制串行通訊接口。為了把PORTC口的RC6和RC7兩個引腳分別設置成串行通訊接口的發送(TX)腳和接收(RX)腳,必須要把USART的接收狀態和控制寄存器RCSTA的bit7(SPEN)位和TRISC寄存器的bit7置“1”,把TRISC寄存器的 bit6置“0”。為了使USART分別工作于接收或發送狀態,就必須設置相應的狀態寄存器和控制寄存器。在設置接收器時,要注意接收腳對接收信號的采樣。接收腳RX上的數據被采樣3次,通過一個三中取二邏輯檢測電路來判斷RX腳上的電平是高還是低,以作為采樣取值。另外,要使USART工作在異步通訊方式,就必須要設置通訊的傳送、接收速率即波特率,USART的波特率設置是通過控制獨立的一個8位波特率發生器BRG實現的。
在異步工作方式下,串行通訊接口USART 采用標準的不歸0(NRZ)格式(即1位起始位、8位或9位數據位及1位停止位),最常用的數據格式是8位。PIC16F877片內的8位波特率發生器 BRG可以用來驅動振蕩器的時鐘,產生標準的波特率頻率。PIC16F877的USART發送和接收順序是從最低位(LSB)開始。USART發送器和接收器在功能上是完全獨立的,但是它們所用的數據格式和波特率必須是相同的。波特率發生器可以根據發送狀態和控制寄存器TXSTA的bit2(BRGH)位設置產生2種不同的移位速度:對系統時鐘16分頻和64分頻的波特率時鐘,即設置該位在異步通訊模式為1時表示通訊為高速,為0時表示通訊為低速。要使 USART工作于異步通訊模式,可通過對發送狀態和控制寄存器TXSTA的bit4(SYNC)位設置清“0”。
由上簡述可知:PIC16F877 的USART異步工作設置主要包括對以下部件的設置:波特率發生器BRG、采樣電路、異步發送器、異步接收器等。但PIC16F877的USART異步工作有2點需要說明:一是USART硬件不支持奇偶效驗,但可以用軟件實現(并可作為第9位數據傳輸);二是在CPU處于休眠工作方式時,USART不能工作在異步通訊方式。
2USART波特率發生器BRG設置
在異步通訊方式下,波特率發生器BRG 需要設置一個初值,以使BRG輸出一個合適的波特率。在BRG設置時,其工作在高速還是低速是由發送狀態寄存器和控制寄存器TXSTA的 bit2(BRCH)位進行設置的。在PIC16F877內部時鐘工作模式下,設置BRG波特率寄存器SPBRG在低速和高速初值的計算公式如下:
BRGH=0(低速)
異步波特率=FOSC/(64(X+1))
BRGH=1(高速)
波特率=FOSC/(16(X+1))
其中,X為SPBRG寄存器的值(0~255)。
實際應用中,上式用于高速方式(BRGH=1)下計算波特率可以減小誤差。另外,在向波特率寄存器SPBRG寫入一個新值時會使BRG定時器復位(清零),由此就可保證波特率發生器BRG不需要等到定時器溢出后就可輸出新的波特率。
3USART異步通訊的寄存器設置
實現USART異步通訊的寄存器主要有:發送狀態寄存器和控制寄存器TXSTA、接收狀態和控制寄存器RCSTA、波特率發生器存器SPBRG、發送數據寄存器TXREG、接收數據寄存器RCREG、外圍接口中斷使能寄存器PIE1和外圍接口標志寄存器PIR1等。
(1) 發送狀態和控制寄存器TXSTA
bit7 CSRC:異步方式未用;
bit6 TX9:發送數據長度選擇位。1=選擇9位數據;0=選擇8位數據;
bit5 TXEN:發送允許位。1=允許發送;0=關閉發送;
bit4 SYNC:USART同步/異步方式選擇位。1=選擇同步方式;0=選擇異步方式;
bit3 此位未用;
bit2 BRGH:高速波特率使能位。1=高速;0=低速;
bit1 TRMT:發送移位寄存器(TSR)“空”標志位。1=TSR空;0=TSR滿;
bit0 TX9D:發送數據的第9位。
(2)接收狀態和控制寄存器RCSTA
bit6 RX9:接收數據長度選擇位。1=選擇接收9位數據;0=選擇接收8位數據;
bit5 SREN:單字節接收允許位。異步方式此位未用;
Bit4 CREN:連續接收選擇位。1=允許連續接收;0=禁止連續接收;
bit3 ADDEN:地址匹配檢測使能位。
1=允許地址匹配檢測,允許中斷并且當RSR的D8被置1時讀接收緩沖器數據;
0=禁止地址匹配檢測,接收所有字節,第9位被看作奇偶效驗位;
bit2 FERR:幀格式錯標志位。
1=幀格式錯(讀RCREG寄存器可對該位刷新并且準備接收下一個有效位);
0=無幀格式錯;
bit1 OERR:越位溢出錯標志位。
1=有溢出錯,清CREN位可將此位清零;0=無溢出錯;
bit0 RX9D:接收數據的第9位,可作奇偶效驗位。
(3) 外圍接口中斷使能寄存器PIE1
bit5 RCIE:串行異步通訊接口接收中斷使能位。
1=允許USART接收中斷;0=禁止USART接收中斷;
bit4 TXIE:串行異步通訊接口發送中斷使能位。
1=允許USART發送中斷;0=禁止USART發送中斷。
其余位在異步通訊中未用。
(4)外圍接口中斷標志寄存器PIR1
bit5 RCIF:異步串行通訊(USART)接口接收中斷標志位;
1= USART接收緩沖區滿;0= USART接收緩沖區空;
bit4 TXIF:異步串行通訊(USART)接口發送中斷標志位;
1= USART發送緩沖區空;0= USART發送緩沖區滿。
其余位在異步通訊中未用。
(5) 其他寄存器
波特率發生器存器SPBRG的設置請參考USRTA波特率發生器BRG的設置內容,在設置該寄存器就是根據單片機工作時鐘頻率確定傳輸數據的波特率,只要將其初值寫入SPBRG寄存器即可。
發送數據寄存器TXREG是將單片機需要發送的數據存放的寄存器,在單片機未發送之前就必須要將備發送的數據裝入該寄存器。接收數據寄存器RCREG是將單片機接收到外界數據后存放數據的寄存器,在單片機確定接收的數據無誤后,將其數據存放到該寄存器中。
評論