09 串行通信(舊,比較全).ppt_第1頁(yè)
09 串行通信(舊,比較全).ppt_第2頁(yè)
09 串行通信(舊,比較全).ppt_第3頁(yè)
09 串行通信(舊,比較全).ppt_第4頁(yè)
09 串行通信(舊,比較全).ppt_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1,PIC單片機(jī)技術(shù),電子信息與電氣工程系 通信教研室,2,第9章 串行通信及通用接收發(fā)送器模塊,串行擴(kuò)展通信接口是單片機(jī)與其它計(jì)算機(jī)之間進(jìn)行數(shù)據(jù)交換的重要渠道,F(xiàn)877單片機(jī)主要配置有2種形式的串行通信模塊: 主控同步串行通信MSSP (Master Synchronous Serial Port) 通用同步/異步收發(fā)器USART (Universal Synchronous/Asynchronous Receiver Transmitter )。 MSSP模塊主要應(yīng)用于系統(tǒng)內(nèi)部近距離的串行通信擴(kuò)展,如SPI、I2C模式。USART模塊主要應(yīng)用于系統(tǒng)之間的遠(yuǎn)距離串行通信,在外圍接口電路及計(jì)算

2、機(jī)通信中應(yīng)用相當(dāng)廣泛。,3,9.1 SPI串行通信模塊,SPI(Serial Peripheral Interface)是一種單片機(jī)外設(shè)芯片同步串行擴(kuò)展接口,由摩托羅拉公司推出。采用SPI接口外圍器件的特點(diǎn)是引腳性價(jià)比高等優(yōu)點(diǎn),因而在市場(chǎng)上得到了廣泛的應(yīng)用。,4,9.1 SPI串行通信模塊,數(shù)據(jù)以字節(jié)為單位傳送,每次傳1個(gè)或多個(gè)字節(jié)。從高位MSB開(kāi)始到低位LSB結(jié)束。 注:SDI、SDO、SS、SCK的引腳。,5,9.1.1 SPI模式下相關(guān)寄存器,在SPI模式下,有關(guān)的寄存器共有10個(gè),其中無(wú)編址的只有一個(gè)SSPSR。這10個(gè)寄存器中有6個(gè)寄存器是與其它模塊共用的。另外有4個(gè)寄存器與MSSP

3、模塊相關(guān),它們是與I2C模式共用的。,6,1SSPBUF(收/發(fā)數(shù)據(jù)緩沖器)13H,2SSPSTAT(同步串行狀態(tài)寄存器),7,Bit0/BF:緩沖器滿標(biāo)志位,被動(dòng)參數(shù)。 SPI接收狀態(tài)下: 0:緩沖器空; 1:緩沖器滿。 Bit6/CKE:SPI時(shí)鐘沿選擇和I2C總線輸入電平選擇位。 在CKP = 0,空閑時(shí)鐘電平為低時(shí): 0:SCK的下降沿發(fā)送數(shù)據(jù); 1:SCK的上升沿發(fā)送數(shù)據(jù)。 在CKP = 1, 空閑時(shí)鐘電平為高時(shí): 0:SCK的上升沿發(fā)送數(shù)據(jù); 1:SCK的下降沿發(fā)送數(shù)據(jù)。 Bit7/SMP:SPI采樣控制位兼I2C總線轉(zhuǎn)換率控制位。 在SPI主控方式下: 0:在輸出數(shù)據(jù)的中間采樣輸

4、入數(shù)據(jù); 1:在輸出數(shù)據(jù)的末尾采樣輸入數(shù)據(jù)。 注意:在SPI從動(dòng)方式下,SMP位必須置位。,8,3SSPCON(同步串行控制寄存器),Bit3-Bit0/SSPM3-SSPM0:同步串行口MSSP方式選擇位。,9,Bit4/CPK:空閑時(shí)鐘電平選擇位。 0:表示空閑時(shí)時(shí)鐘停留在低電平; 1:表示空閑時(shí)時(shí)鐘停留在高電平。 Bit5/SSPEN:同步串口MSSP使能位。 在SPI模式下時(shí),必須確保SCK、SDO設(shè)定為輸出狀態(tài),而SDI、SS設(shè)定為輸入狀態(tài)。 0:關(guān)閉串行端口功能,且設(shè)定SCK、SOD、SDI和SS為普通數(shù)字I/O腳; 1:允許串行端口工作,且設(shè)定SCK、SOD、SDI和SS為SPI

5、接口專用。,10,Bit6/SSPOV:接收溢出標(biāo)志位,被動(dòng)參數(shù)。 0:未發(fā)生接收溢出; 1:發(fā)生接收溢出。 注意:所指的接收溢出是緩沖器SSPBUF中數(shù)據(jù)還未取出時(shí),移位寄存器SSPSR中又收到新的數(shù)據(jù),原SSPSR中的數(shù)據(jù)丟失。 Bit7/WCOL:寫(xiě)操作沖突檢測(cè)位,被動(dòng)參數(shù)。必須用軟件予以清零。 在SPI從動(dòng)方式下: 0:未發(fā)生沖突; 1:發(fā)生沖突。 注意:發(fā)生寫(xiě)操作沖突,是指移位寄存器SSPSR正在發(fā)送前一個(gè)數(shù)據(jù)字節(jié)時(shí),又有新數(shù)據(jù)寫(xiě)入SSPBUF。,11,4SSPSR移位寄存器,直接從端口引腳接收或發(fā)送數(shù)據(jù),將已經(jīng)成功接收到的數(shù)據(jù)送到緩沖器SSPBUF中,或者從緩沖器SSPBUF讀取將

6、發(fā)送的數(shù)據(jù)。,12,9.1.2 SPI模式工作原理,要發(fā)送的數(shù)據(jù)通過(guò)數(shù)據(jù)總線送入發(fā)送緩沖器,然后自動(dòng)傳送到移位寄存器中;移位寄存器接收到數(shù)據(jù)自動(dòng)傳送到接收緩沖器,然后由程序讀取收到的數(shù)據(jù);移位寄存器有移入和移出兩個(gè)端口,分別與收和發(fā)兩條通信線路連接,負(fù)責(zé)收發(fā)數(shù)據(jù)。,13,SPI模式電路的基本結(jié)構(gòu),14,SPI工作原理示意圖,15,【例題9-1】如圖9-5為8位數(shù)碼顯示電路,利用F877的SPI同步串行功能實(shí)現(xiàn)數(shù)碼管數(shù)據(jù)串行傳送,并通過(guò)8個(gè)74LS164組成的移位電路,達(dá)到數(shù)碼數(shù)據(jù)的靜態(tài)顯示。 要求: 單片機(jī)數(shù)據(jù)存儲(chǔ)器60H67H定義8個(gè)數(shù)碼管的數(shù)據(jù)顯示緩沖器。,16,17,ORG 0000H

7、banksel TRISC movlw B11010111;定義RC3/SCK、RC5/SDO輸出、RC4/SDI輸入 movwf TRISC clrf SSPSTAT ;清除SMP、CKE位 banksel SSPCON movlw B00110010 movwf SSPCON - XSH movlw 67H;設(shè)置顯示緩沖區(qū)的數(shù)據(jù)地址 movwf FSR; LOOP movf INDF,W;取出數(shù)據(jù) call BMA;查碼表 call OUTXSH;利用SPI方式輸出編碼數(shù)據(jù) decf FSR btfss FSR,4 ;直到8位數(shù)碼全部輸出 goto LOOP goto end,18,OUT

8、XSH movwf SSPBUF ;送至SSPBUF后開(kāi)始逐位發(fā)送 LOOP1 banksel SSPSTAT btfss SSPSTAT,BF ;是否發(fā)送完畢。注發(fā)送數(shù)據(jù)同時(shí)接收無(wú)效數(shù)據(jù) goto LOOP1; 否,繼續(xù)查詢 banksel SSPBUF movf SSPBUF,W ;移空SSPBUF return - BMA 略 return end,19,9.2 I2C串行通信模式,1980年P(guān)HILIPS公司首創(chuàng)I2C(Inter Integrated Circuit Bus)總線規(guī)范,已成為一種串行總線事實(shí)上的工業(yè)標(biāo)準(zhǔn)。I2C總線是一種高性能芯片間串行同步傳輸總線,被大量的用作系統(tǒng)內(nèi)

9、部的電路板級(jí)總線。 它定義了兩根信號(hào)線,串行數(shù)據(jù)線SDA和串形時(shí)鐘線SCL,可實(shí)現(xiàn)雙工同步數(shù)據(jù)傳輸,能夠極其方便的構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。,20,9.2.1 I2C串行通信模式,I2C總線的數(shù)據(jù)傳輸過(guò)程,在一次通信過(guò)程中,如主控器為發(fā)送器則稱主控發(fā)送器,而被控器為接收器則稱被控接收器;如主控器為接收器則稱主控接收器,而被控器為發(fā)送器則被控發(fā)送器。,21,1I2C數(shù)據(jù)格式,I2C數(shù)據(jù)格式有五部分組成:?jiǎn)?dòng)信號(hào)(SCL=1,SDA從高到低);被控器地址(可7位或10位);R/ W信號(hào);若干個(gè)數(shù)據(jù)字節(jié);停止信號(hào)(SCL=1,SDA從低到高)。,22,主控器向被控器寫(xiě)數(shù)據(jù),23,主控器向被控器

10、讀數(shù)據(jù),24,2I2C地址設(shè)定,在I2C總線系統(tǒng)中的器件,一般都有一個(gè)專用的7位從器件地址碼。地址碼分為兩部分,A6、A5、A4、A3為器件類型碼。如存貯器為:1010,LCD點(diǎn)陣顯示器啟動(dòng)器為:0111等等,不可更改統(tǒng)一規(guī)定。A2、A1、A0可由器件改變,所以同一類器件在I2C總線系統(tǒng)中最多能接8個(gè)。,25,10位地址格式,其中A9、A8是10位地址的高2位。,26,3數(shù)據(jù)傳遞,主控器發(fā)送數(shù)據(jù),被控器接收數(shù)據(jù)的通信過(guò)程如下: (1)主控器在檢測(cè)到總線空閑的狀況下,首先發(fā)送一個(gè)啟動(dòng)S信號(hào),將數(shù)據(jù)線拉低; (2)接著發(fā)送一個(gè)地址字節(jié)(包含著7位地址碼和一位讀/寫(xiě)位。1為讀,0為寫(xiě)(設(shè)為寫(xiě)); (

11、3)掛在同一I2C專線上的所有從動(dòng)器件將主動(dòng)與自身的識(shí)別碼進(jìn)行比較,只有與之匹配的從動(dòng)器件才會(huì)回送一個(gè)應(yīng)答信號(hào)(ACK=0)。這時(shí)主、從動(dòng)器件之間建立一條專向數(shù)據(jù)通道; (4)在主控器收到該應(yīng)答位后開(kāi)始發(fā)送第一個(gè)數(shù)據(jù)字節(jié); (5)在被控器收到第一個(gè)數(shù)據(jù)字節(jié)后又回送一個(gè)應(yīng)答位ACK = 0; (6)在主控器收到應(yīng)答位后開(kāi)始發(fā)送第二個(gè)數(shù)據(jù)字節(jié); (7)被控器收到第二個(gè)數(shù)據(jù)字節(jié)后再返送一個(gè)(非)應(yīng)答位(NACK=1)ACK=0; (8)在主控器將所需發(fā)送的全部數(shù)據(jù)(在此假設(shè)是兩個(gè)字節(jié))發(fā)送完畢后,就發(fā)送一個(gè)停止P信號(hào)時(shí)序,結(jié)束整個(gè)通信過(guò)程,并且釋放總線,使總線返回空閑狀態(tài)。,27,28,9.2.2

12、I2C總線模式下相關(guān)的寄存器,與I2C總線有關(guān)的寄存器共有12個(gè)。其中,有6個(gè)寄存器(INTCON、PIR1、PIE1、PRI2、PIE2、TRISC)是與單片機(jī)其他模塊共用。 屬于I2C總線專用的兩個(gè)寄存器SSPCON2和SSPADD。,29,1SSPSTAT同步串口狀態(tài)寄存器,SSPSTAT用來(lái)記錄MSSP模塊的各種工作狀態(tài):,30,Bit0/BF:緩沖器已滿標(biāo)志位,被動(dòng)參數(shù)。 在I2C總線方式下接收時(shí): 0:緩沖器SSPBUF還為空; 1:緩沖器SSPBUF已經(jīng)滿。 在I2C總線方式下發(fā)送時(shí): 0:數(shù)據(jù)發(fā)送已完成(不含應(yīng)答和停止位),緩沖器SSPBUF已經(jīng)空; 1:數(shù)據(jù)正在發(fā)送(不含應(yīng)答

13、和停止位),緩沖器SSPBUF還是滿的。 Bit1/UA:地址更新標(biāo)志位(I2C總線10位尋址方式),由硬件自動(dòng)設(shè)置。 0:不需要更新SSPADD寄存器中的地址; 1:需要更新SSPADD寄存器中的地址。,31,Bit2/R/W:讀寫(xiě)信息位(僅用于I2C總線方式)。 該位記錄最近一次地址匹配后,從地址字節(jié)中獲取的讀/寫(xiě)狀態(tài)信息。它與SEN、RSEN、PEN、RCEN或ACKEN位一起,將用于顯示MSSP是否處于空閑狀態(tài)。該位僅僅從地址匹配到下一個(gè)啟動(dòng)位或停止位或非應(yīng)答位被檢測(cè)到的期間有效。 在I2C被控方式下: 0:寫(xiě)操作; 1:讀操作。 在I2C主控方式下: 0:不在進(jìn)行發(fā)送; 1:正在進(jìn)行

14、發(fā)送。,32,Bit3/S:?jiǎn)?dòng)位,用于I2C總線方式,當(dāng)SSPEN = 0, MSSP被關(guān)閉,該位被自動(dòng)清零。 0:當(dāng)前沒(méi)有檢測(cè)到啟動(dòng)位; 1:當(dāng)前檢測(cè)到了啟動(dòng)位(單片機(jī)復(fù)位時(shí)該位為0)。 Bit4/P:停止位,僅用于I2C總線方式,當(dāng)SSPEN = 0,MSSP被關(guān)閉時(shí),該位被自動(dòng)清零。 0:表示當(dāng)前沒(méi)有檢測(cè)到停止位; 1:表示當(dāng)前檢測(cè)到了停止位(單片機(jī)復(fù)位時(shí)該位為0)。 Bit5/D/A:數(shù)據(jù)/地址標(biāo)志位(I2C總線規(guī)范有效)。 0:當(dāng)前接收或發(fā)送的字節(jié)是地址; 1:當(dāng)前接收或發(fā)送的字節(jié)是數(shù)據(jù)。,33,Bit6/CKE:I2C總線輸入電平規(guī)范選擇位或SPI時(shí)鐘沿選擇位。 在I2C主控和被

15、控方式下: 0:輸入電平遵循I2C總線規(guī)范; 1:輸入電平遵循SMBus總線規(guī)范。 Bit7/SMP:I2C總線傳送率控制位或SPI采樣控制位,主動(dòng)參數(shù)。 在I2C主控和被控方式下: 0:傳送率為快速速度模式(400kHz); 1:傳送率為標(biāo)準(zhǔn)速度模式(100kHz)。,34,2SSPCON同步串口控制寄存器,SSPCON用來(lái)對(duì)MSSP模塊的多種功能和指標(biāo)進(jìn)行控制:,35,Bit3-Bit0/SSPM3-SSPM0:同步串口MSSP方式選擇位,36,Bit4/CKP:時(shí)鐘極性選擇位(對(duì)于SPI模式而言)。主動(dòng)參數(shù) 在I2C被控方式下,SCL時(shí)鐘使能位(I2C主控下沒(méi)有用): 0:將時(shí)鐘SCL線

16、拉低并保持,以延長(zhǎng)時(shí)鐘周期,來(lái)確保數(shù)據(jù)建立時(shí)間; 1:時(shí)鐘正常工作。 Bit5/SSPEN:同步串口MSSP使能位。 主動(dòng)參數(shù) 0:禁止串行通信功能,設(shè)定SDA和SCL為普通數(shù)字I/O引腳; 1:允許串行端口工作,設(shè)定SDA和SCL為I2C總線專用引腳。 Bit6/SSPOV:接收溢出標(biāo)志位。被動(dòng)參數(shù) 當(dāng)接收溢出時(shí),SSPBUF前一個(gè)數(shù)據(jù)還沒(méi)被取走,又收到了新數(shù)據(jù); 在發(fā)送方式下此位無(wú)效,必須用軟件清零。 0:未發(fā)生接收溢出; 1:發(fā)生接收溢出。 Bit7/WCOL:寫(xiě)操作沖突檢測(cè)位。 被動(dòng)參數(shù) 當(dāng)發(fā)生沖突時(shí),I2C總線的狀態(tài)還沒(méi)有準(zhǔn)備好時(shí),試圖向SSPBUF緩 沖器寫(xiě)入數(shù)據(jù),WCOL = 1

17、,必須用軟件清零。 0:未發(fā)生沖突; 1:發(fā)生沖突。,37,3SSPADD從動(dòng)器件地址/波特率寄存器,在I2C主控工作方式下,該寄存器被用作波特率發(fā)生器的定時(shí)常數(shù)裝載寄存器。,在I2C被控器工作方式下,用來(lái)存放從動(dòng)器件的地址。在10位尋址方式下,程序需要寫(xiě)入高8位字節(jié)和低8位字節(jié)地址信息。注:分兩次寫(xiě)入。,38,4 同步串口控制寄存器2-SSPCON2,主要是為增強(qiáng)MSSP模塊I2C總線模式的主控器功能而新增加的。,39,Bit0/SEN:?jiǎn)?dòng)信號(hào)時(shí)序發(fā)送使能位。 0:在I2C傳送線路上未出現(xiàn)啟動(dòng)信號(hào)時(shí)序; 1:在I2C傳送線路上已出現(xiàn)啟動(dòng)信號(hào)(硬件自動(dòng)清零)。 Bit1/RSEN:重啟動(dòng)信號(hào)

18、時(shí)序發(fā)送使能位。 0:在I2C傳送線路上未出現(xiàn)重啟動(dòng)信號(hào)時(shí)序; 1:在I2C傳送線路上已出現(xiàn)重啟動(dòng)信號(hào)(硬件自動(dòng)清零)。 Bit2/PEN:停止信號(hào)時(shí)序發(fā)送使能位。 0:在I2C傳送線路上未出現(xiàn)停止信號(hào)時(shí)序; 1:在I2C傳送線路上已出現(xiàn)停止信號(hào)時(shí)序(硬件自動(dòng)清零)。 Bit3/RCEN:接收使能位。主動(dòng)參數(shù) 0:禁止I2C接收模式; 1:使能I2C接收模式。 Bit4/ACKEN:應(yīng)答信號(hào)時(shí)序發(fā)送使能位,在I2C主控接收方式下: 0:表示不在SDA和SCL引腳上建立和發(fā)送應(yīng)答信號(hào)時(shí)序; 1:表示在SDA和SCL上建立和發(fā)送一個(gè)帶ACKDT的應(yīng)答信號(hào)(硬件自動(dòng)清零)。,40,Bit5/ACKD

19、T:應(yīng)答信息位。 在I2C主控接收方式下,在一個(gè)字節(jié)收完之后,主控器軟件應(yīng)返送一個(gè)應(yīng)答信號(hào),該位就是用戶軟件寫(xiě)入的將被返送的值: 0:將發(fā)送有效應(yīng)答位(ACK); 1:將發(fā)送非應(yīng)答位(NACK)。 Bit6/ACKSTAT:應(yīng)答狀態(tài)位。 在I2C主控方式下,硬件自動(dòng)接收來(lái)自被控器的應(yīng)答信號(hào) 0:收到來(lái)自被控接收器的有效應(yīng)答位(或表示位); 1:沒(méi)有收到來(lái)自被控接收器的有效應(yīng)答位(或表示為NACK)。 Bit7/GCEN:通用呼叫地址尋址使能位,主動(dòng)參數(shù)。 0:禁止以通用呼叫地址尋址; 1:當(dāng)SSPSTAT中收到通用呼叫地址(00H)時(shí)允許中斷。,41,9.2.3 I2C主控模式,對(duì)SSPCON

20、寄存器中的相應(yīng)SSPM置位和清零,對(duì)SSPEN置位即可使能主控工作方式,控制工作方式使能后,用戶有以下六種選擇 : 送啟動(dòng)信號(hào)到SDA和SCL(將SEN置位); 送重復(fù)啟動(dòng)信號(hào)到SDA和SCL(將RSEN置位); 寫(xiě)SSPBUF寄存器啟動(dòng)數(shù)據(jù)或地址的傳送; 送結(jié)束信號(hào)到SDA和SCL(將PEN置位); 設(shè)置I2C端口以接收數(shù)據(jù); 數(shù)據(jù)字節(jié)接收完成后,發(fā)出應(yīng)答信號(hào)。,42,I2C在主控基本結(jié)構(gòu)模塊,43,9.2.4 I2C從動(dòng)模式,當(dāng)I2C工作在從動(dòng)方式時(shí),SDA和SCL引腳必須設(shè)置為輸入,如果需要發(fā)送時(shí),MSSP模塊強(qiáng)行將輸入狀態(tài)改為輸出狀態(tài)。在地址匹配后,收到傳送的數(shù)據(jù)后,將自動(dòng)產(chǎn)生ACK,

21、并將SSPSR中的數(shù)據(jù)傳入SSPBUF。,44,I2C從動(dòng)方式電路模塊結(jié)構(gòu),45,【例題9-5】圖9-5 利用RC6和RC7引腳組成一個(gè)I2C同步串行功能,實(shí)現(xiàn)對(duì)24LC515EEPROM的串行數(shù)據(jù)傳送。 RC6SCL、RC7SDA 編程要求:將64個(gè)數(shù)據(jù)00H-3FH存入24LC515的0000H-003FH單元中。 注:24LC515芯片本身支持I2C同步串行通信。地址為兩個(gè)字節(jié)。,46,47,List P=16F877 Include “P16F877.INC” DEVICE EQU 2CH; 用于存放設(shè)備地址 TXBUF EQU 28H; 發(fā)送寄存器 ADDRH EQU 2AH; 24

22、LC515地址的高字節(jié) ADDRL EQU 2BH; 24LC515地址的低字節(jié) CNT EQU 27H; 存放一個(gè)字節(jié)的位數(shù)8 COUNTER EQU 26H; 用于存放循環(huán)變量 ORG 0000H START movlw 0A8H; 10101000 定義設(shè)備地址,最后一位為R/W movwf DEVICE movlw 00H ;定義24LC515地址的高字節(jié) movwf ADDRH movlw 00H ;定義24LC515地址的低字節(jié) movwf ADDRL - CALL WRBYTE ; 發(fā)送子程序 . . .,48,- ;向24LC515寫(xiě)入數(shù)據(jù)子程序 WRBYTE movf DEV

23、ICE,W movwf TXBUF ;設(shè)備地址送TXBUF call BSTART ;發(fā)送起始位 call TX ;發(fā)送一個(gè)字節(jié)(發(fā)送設(shè)備地址) - movf ADDRH,W ; movwf TXBUF call TX ;發(fā)送一個(gè)字節(jié)(發(fā)送芯片地址高8位) movf ADDRL,W ; movwf TXBUF call TX ;發(fā)送一個(gè)字節(jié)(發(fā)送芯片地址低8位) - movlw 00H movwf COUNTER,49,WRLOOP movf COUNTER,W movwf TXBUF call TX ; 發(fā)送一個(gè)字節(jié) incf COUNTER ; btfss COUNTER,6; 是否已發(fā)送

24、64個(gè)數(shù) goto WRLOOP call BSTOP ;調(diào)用發(fā)送停止位 call W_END ;調(diào)用發(fā)送結(jié)束 retlw 00H; -,50,- ;發(fā)送起始位子程序 BSTART bsf PORTC,SCL ; SCL置高電平 bsf PORTC,SDA ; SDA置高電平 banksel TRISC movlw B00111111; 設(shè)置SCL、SDA為輸出 banksel PORTC NOP 延時(shí)5us bcf PORTC,SDA ;SDA從高到低(啟動(dòng)信號(hào)) NOP 延時(shí)5us bcf PORTC,SCL ;SCL置低電平 retlw 00H -,51,- ;字節(jié)發(fā)送子程序 TX mo

25、vlw 08H movwf CNT ;一個(gè)字節(jié)8個(gè)位,循環(huán)8次 TXLP banksel TRISC mowlw B00111111 ;設(shè)置SCL、SDA全為輸出 movwf TRISC - banksel PORTC btfss TXBUF,7 ;判斷發(fā)送TXBUF第7位(最高位先發(fā)送) goto BIT0 bsf PORTC,SDA ;發(fā)送1,SDA置高電平 goto CLKOUT BIT0 bcf PORTC,SDA ;發(fā)送0,SDA置低電平 - CLKOUT bsf PORTC,SCL ;SCL置高電平 nop 延時(shí)5us bcf PORTC,SCL ;SCL置低電平 rlf TXBU

26、F,f ;發(fā)送緩沖器左移一位 decfz CNT,f ;是否完成一個(gè)字節(jié)8個(gè)位的發(fā)送? goto TXLP ;否,繼續(xù),52,;-接下來(lái)準(zhǔn)備接收ACK banksel TRISC movlw B10111111 ; SCL為輸出,SDA為輸入 movwf TRISC banksel PORTC ACK nop nop bcf PORTC,SCL ; SCL置低電平 nop nop nop bsf PORTC,SCL ; SCL置高電平 nop nop btfsc PORTC,SDA ;判斷SDA為0或1 (ACK) goto ACK ;沒(méi)有收到24LC515的反饋信號(hào) bcf PORTC,SC

27、L ; SCL置低電平 retlw 00H -,53,- ;發(fā)送停止位子程序 BSTOP bcf PORTC,SDA ; SDA置低電平 banksel TRISC movlw B00111111 ; SCL、SDA為輸出 movwf TRISC - banksel PORTC bcf PORTC,SCL ;SCL置低電平 nop nop nop ;延時(shí)3us,等待電平拉低 bsf PORTC,SCL ;SCL置高電平 nop nop nop ;延時(shí)3us,等待電平拉高 bsf PORTC ,SDA ;SDA置高電平 nop retlw 00H,54,9.3 USART串行通信模塊,PIC系列

28、芯片中,片內(nèi)除了含有同步串行口SSP(SPI,I2C)外,還有一個(gè)串行通信接口SCI。這是一個(gè)通用同步異步收發(fā)器,簡(jiǎn)稱USART,它是計(jì)算機(jī)最常用的通信接口之一。 USART可工作于如下三種方式:全雙工異步方式;半雙工同步主控方式;半雙工同步從動(dòng)方式。,55,9.3.1與USART模塊相關(guān)的寄存器,1發(fā)送狀態(tài)兼控制寄存器:TXSTA 2接收狀態(tài)兼控制寄存器:RCSTA 3USART發(fā)送緩沖寄存器: TXREG 4USART接收緩沖寄存器 :RCREG 5PIE寄存器 6PIR寄存器,56,1發(fā)送狀態(tài)兼控制寄存器TXSTA,57,Bit0/TX9D:發(fā)送數(shù)據(jù)的第9位(9位數(shù)據(jù)幀結(jié)構(gòu))。 0:不發(fā)

29、送9位數(shù)據(jù); 1:發(fā)送9位數(shù)據(jù)幀。 Bit1/TRMT:發(fā)送移位寄存器(TSR)“空”標(biāo)志位。 0:發(fā)送移位寄存器滿; 1:發(fā)送移位寄存器空。 Bit2/BRGH:高波特率選擇位。 異步模式下: 0:低速; 1:高速。 同步方式下,未用。 Bit4/SYNC:USART同步/異步模式選擇位。 0:選擇異步模式(USAT); 1:選擇同步模式(USRT)。,58,Bit5/TXEN:發(fā)送使能位。 0:關(guān)閉發(fā)送功能; 1:使能發(fā)送功能。 Bit6/TX9:發(fā)送數(shù)據(jù)長(zhǎng)度選擇位。8位數(shù)據(jù)加1位校驗(yàn)或標(biāo)識(shí)位。 0:8位數(shù)據(jù)位發(fā)送; 1:9位數(shù)據(jù)發(fā)送。 Bit7/CSRC:時(shí)鐘源選擇位。 同步模式下: 0

30、:選擇被控(從屬)模式(時(shí)鐘來(lái)自外部輸入信號(hào)); 1:選擇主控模式(時(shí)鐘來(lái)自內(nèi)部波特率發(fā)生器)。 異步模式下,未用。,59,2. 接收狀態(tài)兼控制寄存器RCSTA,Bit0/RX9D:所接收數(shù)據(jù)的第9位,可作校驗(yàn)位或標(biāo)識(shí)位等。 Bit1/OERR:溢出標(biāo)志位(overruan error bit )。 0:未發(fā)生溢出錯(cuò)誤; 1:發(fā)生了溢出錯(cuò)誤。 Bit2/FERR:幀格式錯(cuò)誤標(biāo)志位,被動(dòng)參數(shù)。 0:無(wú)幀格式錯(cuò)誤; 1:有幀格式錯(cuò)誤。,60,Bit3/ADDEN:地址匹配檢測(cè)使能位; 接收數(shù)據(jù)選擇9位時(shí),該位才起作用。 0:取消地址匹配檢測(cè)功能; 1:?jiǎn)⒂玫刂菲ヅ錂z測(cè)功能。 Bit4/CREN:連

31、續(xù)接收使能位。 異步模式下: 0:禁止連續(xù)接收功能; 1:使能連續(xù)接收功能。 同步模式下: 0:關(guān)閉連續(xù)接收; 1:使能連續(xù)接收,直到該未被清0為止。優(yōu)先于SREN位。,61,Bit5/SREN:?jiǎn)巫止?jié)接收使能位。 同步方式下: 0:禁止單字節(jié)接收功能; 1:使能單字節(jié)接收功能。 異步方式下未用,并且在同步從屬接收方式下該位也無(wú)用。接收完成后該位即被清零。 Bit6/RX9:接收數(shù)據(jù)長(zhǎng)度選擇位。 0:選擇接收8位數(shù)據(jù); 1:選擇接收9位數(shù)據(jù)。 Bit7/SPEN:串行端口使能位。 0:禁止串行端口工作; 1:允許串行端口工作。 此時(shí),RC7和RC6作為USART的接收發(fā)送引腳。,62,3TXR

32、EG,USART發(fā)送緩沖寄存器,每次發(fā)送的數(shù)據(jù)都是通過(guò)寫(xiě)入該緩沖器來(lái)實(shí)現(xiàn)的。,63,4RCREG,USART接收緩沖寄存器,每次接收到的數(shù)據(jù)都可從該緩沖器讀取出來(lái)的。,64,5SPBRG波特率寄存器,SPBRG寄存器的設(shè)定值(0-255)與波特率成反比關(guān)系。在同步方式下,波特率僅由該寄存器來(lái)決定;而在異步方式下,則由BRGH位(TXSTA寄存器的bit2)和該寄存器共同確定。,65,9.3.2 USART波特率發(fā)生器,USART模塊帶有一個(gè)波特率發(fā)生器BRG(baud rate generator),用以產(chǎn)生串行傳送所需的時(shí)鐘,它支持USART的同步方式和異步方式。在異步方式下,BRGH位用來(lái)

33、控制波特率。在同步方式下, BRGH位不起作用。 波特率發(fā)生器的邏輯結(jié)構(gòu)如圖10-24。其核心實(shí)際是一個(gè)遞減的位二進(jìn)制計(jì)數(shù)器,其計(jì)數(shù)初始值是由寄存器SPBRG裝入,在每次遞減計(jì)數(shù)器到達(dá)00H之后的下一個(gè)計(jì)數(shù)脈沖到來(lái)時(shí)進(jìn)行裝入。系統(tǒng)時(shí)鐘經(jīng)過(guò)位分頻器后作為傳遞計(jì)數(shù)器的計(jì)數(shù)脈沖,其分頻比可以由BRGH位和SYNC位設(shè)定為:、:16、或:。,66,波特率時(shí)鐘發(fā)生器示意圖,67,其波特率計(jì)算方式如下:,1同步方式 波特率fosc/4(N+1) Nfosc/(4波特率)- 注意,N為SPBRG寄存器的初始值;BRGH必須設(shè)置為0,BRGH為1無(wú)用。 2異步方式 BRGH=0時(shí): 波特率fosc/64(N+

34、1) Nfosc/(64波特率)- BRGH=1時(shí): 波特率fosc/16(N+1) Nfosc/(16波特率)-,68,【例題9-4】在某應(yīng)用系統(tǒng)中,采用4800波特進(jìn)行異步通信。假設(shè)單片機(jī)時(shí)鐘頻率為fosc20MHZ,低速方式(BRGH=0)。,69,9.4 USART的異步模式,USART在異步模式下采用的數(shù)據(jù)格式為l位起始位、8位或9位數(shù)據(jù)位和1位停止位,無(wú)奇偶校驗(yàn)碼位(硬件不支持),常用的數(shù)據(jù)為8位。片內(nèi)提供的8位波特率發(fā)生器BRG,可以利用系統(tǒng)時(shí)鐘信號(hào)產(chǎn)生標(biāo)準(zhǔn)的波特率頻率。,70,9.4.1 USART異步發(fā)送模式,USART發(fā)送器主要是由發(fā)送移位寄存器(TSR)、發(fā)送緩沖器TXR

35、EG構(gòu)成。USART異步發(fā)送過(guò)程如下:要發(fā)送的數(shù)據(jù)送入TXREG中,寄存器TXREG中的數(shù)據(jù)就被裝入TSR。一旦把TXREG中的數(shù)據(jù)送入TSR,就將中斷標(biāo)志位TXIF置位。TXIF置位后,不能用軟件清除,只有在下一個(gè)要發(fā)送的數(shù)據(jù)送入TXREG后TXIF才能復(fù)位。,71,USART異步發(fā)送其結(jié)構(gòu)示意圖,72,9.4.2 USART異步接收模式,主要是由接收移位寄存器RSR和接收寄存器RCREG構(gòu)成,串行信號(hào)從RC7RXDT引腳接收,送入移位寄存器RSR。一旦收到停止位,RSR就將收到的8位數(shù)據(jù)裝載到RCREG中。同時(shí),RCIF置1,表示收到一個(gè)數(shù)據(jù),當(dāng)RCREG被讀出時(shí)RCIF被清零。從圖中看出,RCREG是一個(gè)雙緩沖寄存器,具有FIFO性質(zhì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論