<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PIC單片機與PC機的串行數據交換

PIC單片機與PC機的串行數據交換

作者: 時(shí)間:2012-03-31 來(lái)源:網(wǎng)絡(luò ) 收藏

一、前言

本文引用地址:http://dyxdggzs.com/article/171717.htm

美國Microchip公司的系列是一種新型的CMOS工藝,其中,有許多內部帶有異步通訊模塊,如16F877等系列芯片。單片機雖然在使用中可等同于一個(gè)CPU,但是在許多需要大量計算的運用中,還必須借助微機()的強大處理能力,這樣就必須通過(guò)通信電路實(shí)現 單片機與微機間的可靠傳輸。不論PIC單片機內有沒(méi)有提供口,在實(shí)現通信時(shí)都必須通過(guò)自己設計硬件電路和編寫(xiě)通信軟件來(lái)實(shí)現,而PIC 單片機要完成較復雜的軟件功能時(shí),需利用其內部相關(guān)的特殊功能寄存器來(lái)實(shí)現。下面介紹PIC16F877與微機間進(jìn)行異步通訊的實(shí)現方法,同時(shí)給出與微機間進(jìn)行異步串行通訊的硬件接口電路、程序流程框圖、單片機內通信程序等。

二、PIC16877與機間進(jìn)行的實(shí)現

要實(shí)現PIC16F877與機間進(jìn)行數據,在編寫(xiě)程序時(shí)首先要設置好USART異步通訊模塊工作模式及相關(guān)寄存器,現分別介紹如下。

1PIC16F877的USART異步工作設置簡(jiǎn)介

PIC16F877的USART與其他具有USART的PIC單片機一樣,可以被設置成為與PC機進(jìn)行全雙工異步通訊,它是一種利用PORTC口的 RC6和RC7兩個(gè)引腳作為通訊的2線(xiàn)制串行通訊接口。為了把PORTC口的RC6和RC7兩個(gè)引腳分別設置成串行通訊接口的發(fā)送(TX)腳和接收(RX)腳,必須要把USART的接收狀態(tài)和控制寄存器RCSTA的bit7(SPEN)位和TRISC寄存器的bit7置“1”,把TRISC寄存器的 bit6置“0”。為了使USART分別工作于接收或發(fā)送狀態(tài),就必須設置相應的狀態(tài)寄存器和控制寄存器。在設置接收器時(shí),要注意接收腳對接收信號的采樣。接收腳RX上的數據被采樣3次,通過(guò)一個(gè)三中取二邏輯檢測電路來(lái)判斷RX腳上的電平是高還是低,以作為采樣取值。另外,要使USART工作在異步通訊方式,就必須要設置通訊的傳送、接收速率即波特率,USART的波特率設置是通過(guò)控制獨立的一個(gè)8位波特率發(fā)生器BRG實(shí)現的。

在異步工作方式下,串行通訊接口USART 采用標準的不歸0(NRZ)格式(即1位起始位、8位或9位數據位及1位停止位),最常用的數據格式是8位。PIC16F877片內的8位波特率發(fā)生器 BRG可以用來(lái)驅動(dòng)振蕩器的時(shí)鐘,產(chǎn)生標準的波特率頻率。PIC16F877的USART發(fā)送和接收順序是從最低位(LSB)開(kāi)始。USART發(fā)送器和接收器在功能上是完全獨立的,但是它們所用的數據格式和波特率必須是相同的。波特率發(fā)生器可以根據發(fā)送狀態(tài)和控制寄存器TXSTA的bit2(BRGH)位設置產(chǎn)生2種不同的移位速度:對系統時(shí)鐘16分頻和64分頻的波特率時(shí)鐘,即設置該位在異步通訊模式為1時(shí)表示通訊為高速,為0時(shí)表示通訊為低速。要使 USART工作于異步通訊模式,可通過(guò)對發(fā)送狀態(tài)和控制寄存器TXSTA的bit4(SYNC)位設置清“0”。

由上簡(jiǎn)述可知:PIC16F877 的USART異步工作設置主要包括對以下部件的設置:波特率發(fā)生器BRG、采樣電路、異步發(fā)送器、異步接收器等。但PIC16F877的USART異步工作有2點(diǎn)需要說(shuō)明:一是USART硬件不支持奇偶效驗,但可以用軟件實(shí)現(并可作為第9位數據傳輸);二是在CPU處于休眠工作方式時(shí),USART不能工作在異步通訊方式。

2USART波特率發(fā)生器BRG設置

在異步通訊方式下,波特率發(fā)生器BRG 需要設置一個(gè)初值,以使BRG輸出一個(gè)合適的波特率。在BRG設置時(shí),其工作在高速還是低速是由發(fā)送狀態(tài)寄存器和控制寄存器TXSTA的 bit2(BRCH)位進(jìn)行設置的。在PIC16F877內部時(shí)鐘工作模式下,設置BRG波特率寄存器SPBRG在低速和高速初值的計算公式如下:
  BRGH=0(低速)
  異步波特率=FOSC/(64(X+1))
  BRGH=1(高速)
  波特率=FOSC/(16(X+1))
  其中,X為SPBRG寄存器的值(0~255)。

實(shí)際應用中,上式用于高速方式(BRGH=1)下計算波特率可以減小誤差。另外,在向波特率寄存器SPBRG寫(xiě)入一個(gè)新值時(shí)會(huì )使BRG定時(shí)器復位(清零),由此就可保證波特率發(fā)生器BRG不需要等到定時(shí)器溢出后就可輸出新的波特率。

3USART異步通訊的寄存器設置

實(shí)現USART異步通訊的寄存器主要有:發(fā)送狀態(tài)寄存器和控制寄存器TXSTA、接收狀態(tài)和控制寄存器RCSTA、波特率發(fā)生器存器SPBRG、發(fā)送數據寄存器TXREG、接收數據寄存器RCREG、外圍接口中斷使能寄存器PIE1和外圍接口標志寄存器PIR1等。

(1) 發(fā)送狀態(tài)和控制寄存器TXSTA

25.gif

  bit7 CSRC:異步方式未用;
  bit6 TX9:發(fā)送數據長(cháng)度選擇位。1=選擇9位數據;0=選擇8位數據;
  bit5 TXEN:發(fā)送允許位。1=允許發(fā)送;0=關(guān)閉發(fā)送;
  bit4 SYNC:USART同步/異步方式選擇位。1=選擇同步方式;0=選擇異步方式;
  bit3 此位未用;
  bit2 BRGH:高速波特率使能位。1=高速;0=低速;
  bit1 TRMT:發(fā)送移位寄存器(TSR)“空”標志位。1=TSR空;0=TSR滿(mǎn);
  bit0 TX9D:發(fā)送數據的第9位。

(2)接收狀態(tài)和控制寄存器RCSTA

26.gif

  bit6 RX9:接收數據長(cháng)度選擇位。1=選擇接收9位數據;0=選擇接收8位數據;
  bit5 SREN:?jiǎn)巫止澖邮赵试S位。異步方式此位未用;
  Bit4 CREN:連續接收選擇位。1=允許連續接收;0=禁止連續接收;
  bit3 ADDEN:地址匹配檢測使能位。
1=允許地址匹配檢測,允許中斷并且當RSR的D8被置1時(shí)讀接收緩沖器數據;
  0=禁止地址匹配檢測,接收所有字節,第9位被看作奇偶效驗位;
  bit2 FERR:幀格式錯標志位。
  1=幀格式錯(讀RCREG寄存器可對該位刷新并且準備接收下一個(gè)有效位);
  0=無(wú)幀格式錯;
  bit1 OERR:越位溢出錯標志位。
  1=有溢出錯,清CREN位可將此位清零;0=無(wú)溢出錯;
  bit0 RX9D:接收數據的第9位,可作奇偶效驗位。

(3) 外圍接口中斷使能寄存器PIE1

27.gif

bit5 RCIE:串行異步通訊接口接收中斷使能位。
1=允許USART接收中斷;0=禁止USART接收中斷;
bit4 TXIE:串行異步通訊接口發(fā)送中斷使能位。
1=允許USART發(fā)送中斷;0=禁止USART發(fā)送中斷。
  其余位在異步通訊中未用。

(4)外圍接口中斷標志寄存器PIR1

28.gif

bit5 RCIF:異步串行通訊(USART)接口接收中斷標志位;
1= USART接收緩沖區滿(mǎn);0= USART接收緩沖區空;
bit4 TXIF:異步串行通訊(USART)接口發(fā)送中斷標志位;
1= USART發(fā)送緩沖區空;0= USART發(fā)送緩沖區滿(mǎn)。
  其余位在異步通訊中未用。

(5) 其他寄存器

波特率發(fā)生器存器SPBRG的設置請參考USRTA波特率發(fā)生器BRG的設置內容,在設置該寄存器就是根據單片機工作時(shí)鐘頻率確定傳輸數據的波特率,只要將其初值寫(xiě)入SPBRG寄存器即可。

發(fā)送數據寄存器TXREG是將單片機需要發(fā)送的數據存放的寄存器,在單片機未發(fā)送之前就必須要將備發(fā)送的數據裝入該寄存器。接收數據寄存器RCREG是將單片機接收到外界數據后存放數據的寄存器,在單片機確定接收的數據無(wú)誤后,將其數據存放到該寄存器中。

29.gif


上一頁(yè) 1 2 3 4 下一頁(yè)

關(guān)鍵詞: 數據 交換 串行 PC 單片機 PIC

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>