串行通信接口SCI課件_第1頁
串行通信接口SCI課件_第2頁
串行通信接口SCI課件_第3頁
串行通信接口SCI課件_第4頁
串行通信接口SCI課件_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第7章 串行通信接口(SCI)主要內(nèi)容異步串行通信的基礎(chǔ)知識電平轉(zhuǎn)換電路與SCI通用編程原理GP32SCI模塊寄存器 串行口初始化與收發(fā)編程的基本方法 串行通信通用函數(shù)與測試實例 串行通信進一步討論 7.1異步串行通信的基礎(chǔ)知識 7.1.1 基本概念()異步串行通信的格式 SCI通常采用NRZ數(shù)據(jù)格式,即:standard non-return-zero mark/space data format,譯為:“標(biāo)準(zhǔn)不歸零傳號/空號數(shù)據(jù)格式”。“不歸零”的最初含義是:用正、負(fù)電平表示二進制值,不使用零電平?!癿ark/space”即“傳號/空號”分別是表示兩種狀態(tài)的物理名稱,邏輯名稱記為“1/0”

2、。下圖給出了 8位數(shù)據(jù)、無校驗情況的傳送格式。第0位第1位第2位第3位第4位第5位第6位第7位停止位開始位SCI數(shù)據(jù)格式(2)串行通信的波特率 波特率(baud rate):每秒內(nèi)傳送的位數(shù)。 波特率單位是位/秒,記為bps。通常情況下,波特率的單位可以省略。通常使用的波特率有300、600、900、1200、1800、2400、4800、9600、19200、38400。 字符奇偶校驗檢查(character parity checking)稱為垂直冗余檢查( vertical redundancy checking,VRC),它是每個字符增加一個額外位使字符中“1”的個數(shù)為奇數(shù)或偶數(shù)。 奇

3、校驗:如果字符數(shù)據(jù)位中“1”的數(shù)目是偶數(shù),校驗位應(yīng)為“1”,如果“1”的數(shù)目是奇數(shù),校驗位應(yīng)為“0”。 偶校驗:如果字符數(shù)據(jù)位中“1”的數(shù)目是偶數(shù),則校驗位應(yīng)為“0”,如果是奇數(shù)則為“1”。 (3)奇偶校驗MCU引腳一般輸入/輸出使用TTL電平,而TTL電平的“1”和“0”的特征電壓分別為2.4V和0.4V,適用于板內(nèi)數(shù)據(jù)傳輸。為了使信號傳輸?shù)酶h,美國電子工業(yè)協(xié)會EIA(Electronic Industry Association) 制訂了串行物理接口標(biāo)準(zhǔn)RS-232C。RS-232C采用負(fù)邏輯,-3V-15V為邏輯“1”,+3V+15V為邏輯“0”。RS-232C最大的傳輸距離是30m,

4、通信速率一般低于20Kbps。 7.1.2 RS-232C總線標(biāo)準(zhǔn)7.1.2 RS-232C總線標(biāo)準(zhǔn) RS-232接口,簡稱“串口”,它主要用于連接具有同樣接口的室內(nèi)設(shè)備。目前幾乎所有計算機上的串行口都是9芯接口。右圖給出了9芯串行接口的排列位置,相應(yīng)引腳含義見表7-1。4123567899芯串行接口排列表7-1 9芯串行接口引腳含義表引腳號功 能引腳號功 能12345接收線信號檢測(載波檢測DCD)接收數(shù)據(jù)線(RXD)發(fā)送數(shù)據(jù)線(TXD)數(shù)據(jù)終端準(zhǔn)備就緒(DTR)信號地(SG)6789數(shù)據(jù)通信設(shè)備準(zhǔn)備就緒(DSR)請求發(fā)送(RTS)清除發(fā)送振鈴指示返回7.2.2 SCI的基本編程原理SCI編

5、程模型SCI 數(shù)據(jù)寄存器MCU 的 內(nèi) 部 總 線 (Internal Bus)接收移位寄存器發(fā)送移位寄存器接收引腳RxD發(fā)送引腳TxDSCI 控制寄存器SCI狀態(tài)寄存器SCI波特率寄存器返回7.3 GP32 SCI模塊寄存器 SCI的寄存器 MC68HC908GP32的SCI有7個寄存器,地址為$0013$0019 。(1)SCI波特率寄存器(SCI Baud Rate Register,SCBR) SCBR的作用是設(shè)置串行通信的波特率 ,其地址是$0019。 D7、D6、D3:未定義; D5D4 SCP:波特率預(yù)分頻位(SCI Baud Rate Prescaler Bits) SCP1、

6、SCP0=00 01 10 11 PD= 1 3 4 13數(shù)據(jù)位 D7 D6 D5 D4 D3 D2 D1 D0定義 x x SCP1 SCP0 x SCR2 SCR1 SCR0復(fù)位 0 0 0 0 0 0 0 0 D2D0 SCR:波特率選擇位(SCI Baud Rate Select Bits),定義波特率另一分頻值,記為:BD,定義如下: SCR2、1、0 =000 001 010 011 100 101 110 111 BD = 1 2 4 8 16 32 64 128 設(shè)fSCI為串行通信時鐘源頻率,fSCI= fBUS或CGMXCLK,取決于CONFIG2的SCIBDSRC,一般設(shè)

7、定SCIBDSRC=1,SCI用內(nèi)部總線時鐘,則fSCI= fBUS,則波特率的定義公式為: BtfBUS /(64PDBD)(1)SCI波特率寄存器(SCI Baud Rate Register,SCBR)(2) SCI控制寄存器1(SCI Control Register 1,SCC1)SCC1的地址是:$0013 ,定義為: D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0復(fù)位 LOOPS ENSCI TXINV M WAKE ILTY PEN PTY定義數(shù)據(jù)位循環(huán)模式選擇位SCI允許位奇偶校驗允許位空閑線類型位喚醒條件位模式-字符長度選擇位發(fā)送反轉(zhuǎn)標(biāo)志位奇

8、偶校驗類型選擇位(3) SCI控制寄存器2(SCI Control Register 2,SCC2)SCC2的地址是:$0014 ,定義為:發(fā)送中斷允許位 發(fā)送完成中斷允許位 接收器喚醒位發(fā)送器允許位 接收中斷允許位 0 0 0 0 0 0 0 0復(fù)位SCTIE TCIE SCRIE ILIE TE RE RWU SBK定義 D7 D6 D5 D4 D3 D2 D1 D0數(shù)據(jù)位空閑線中斷允許位接收器允許位 發(fā)送終止位 (4) SCI控制寄存器3(SCI Control Register 3,SCC3)SCC3的地址是:$0015 ,定義為: 0 0 0 0 0 0 0 0復(fù)位R8 T8 DMA

9、RE DMATE ORIE NEIE FEIE PEIE 定義 D7 D6 D5 D4 D3 D2 D1 D0數(shù)據(jù)位接收位8 發(fā)送位8 接收器幀錯誤中斷允許位 接收器噪聲錯誤中斷允許位 接收器溢出中斷允許位 DMA發(fā)送允許位 DMA接收允許位 接收器奇偶錯誤中斷允許位 (6) SCI狀態(tài)寄存器2(SCI Status Register 2,SCS2 )SCS2的地址是:$0017 ,定義為: 0 0 0 0 0 0 0 0復(fù)位 BKF RPF定義(只讀) D7 D6 D5 D4 D3 D2 D1 D0數(shù)據(jù)位未定義 終止碼標(biāo)志位 接收進行標(biāo)志位 (7) SCI數(shù)據(jù)寄存器(SCI Data Reg

10、ister ,SCDR ) SCDR為SCI系統(tǒng)最常用的寄存器,它的地址是:$0018。寫入時,為要發(fā)送的8位數(shù)據(jù),記為:T7T0;讀出時,為接收的8位數(shù)據(jù),記為:R7R0。不受復(fù)位影響。(2)發(fā)送一個數(shù)據(jù)與接收一個數(shù)據(jù) 發(fā)送數(shù)據(jù)是通過判斷狀態(tài)寄存器SCS1的第7位(SCTE)進行的,而接收數(shù)據(jù)是通過判斷狀態(tài)寄存器SCS1的第5位(SCRF)進行的。不論是發(fā)送還是接收,均使用SCI數(shù)據(jù)寄存器SCDR。發(fā)送時,將要發(fā)送的數(shù)據(jù)送入SCDR即可,接收時,從SCDR中取出的即是收到的數(shù)據(jù)。 ;串行發(fā)送A中的數(shù) BRCLR 7,SCS1,* ;SCS1.7=0? 為0則等待 STA SCDR ;SCS1

11、.7=1,可以發(fā)送數(shù)據(jù) ;查詢方式接收一個串行數(shù)據(jù),接收的數(shù)據(jù)放入寄存器A中 BRCLR 5,SCS1,* ;SCS1.5=0? 為0則等待 LDA SCDR ;SCS1.5=1,可以取出數(shù)據(jù)返回7.5 串行通信通用函數(shù)與測試實例7.5.1 串行通信子程序串行通信頭文件 SCI.h 串行通信驅(qū)動文件 SCI.c 串行通信頭文件 SCI.h /SCI.h串行通信頭文件- #include GP32C.h /GP32 MCU映像寄存器名定義#include Type.h /類型別名定義#define ReSendStatusR SCS1 /SCI狀態(tài)寄存器#define ReTestBit 5 /

12、接收緩沖區(qū)滿標(biāo)志位#define SendTestBit 7 /發(fā)送緩沖區(qū)空標(biāo)志位#define ReSendDataR SCDR /數(shù)據(jù)寄存器/串行通信函數(shù)聲明void SCIinit(void); /串行口初始化void SCIsend1(INT8U o); /發(fā)送1字節(jié)void SCIsendN(INT8U n, INT8U ch); /發(fā)送n字節(jié)INT8U SCIre1(INT8U *p); /接收1字節(jié)INT8U SCIreN(INT8U n, INT8U ch); /接收n字節(jié)_串行通信驅(qū)動文件 SCI.c串行通信驅(qū)動文件包括SCI初始化、接收1字節(jié)、發(fā)送1字節(jié)、接收n字節(jié)和發(fā)送n

13、字節(jié)函數(shù)。讀者可以直接使用這些函數(shù)進行MCU的串行通信編程。/SCI.c串行通信-*/本文件包含: */ (1)SCIinit: 串行口初始化 */ (2)SCIsend1:串行發(fā)送1個字節(jié) */ (3)SCIsendN:串行發(fā)送n字節(jié) */ (4)SCIre1: 串行接收1字節(jié) */ (5)SCIreN: 串行接收n字節(jié) */硬件連接: */ MCU的串口與PC方的串口相連 */-*/頭文件#include SCI.h/SCIinit:串行口初始化-*/功能:對串行口進行初始化,默認(rèn)為允許SCI,正常碼輸出,8位數(shù) * 據(jù),無校驗, */允許發(fā)送器,允許接收器.查詢方式收發(fā),波特率為9600

14、(設(shè)fBUS * = 2.4576MHz) */參數(shù):無 */返回:無 */說明:該函數(shù)與具體的芯片型號(MC68HC908GP32)有關(guān) */-*void SCIinit(void) /1.總線頻率fBUS = 2.4576MHz,定義波特率Bt = 9600 SCBR = 0b00000010; /2.設(shè)置允許SCI,正常碼輸出,8位數(shù)據(jù),無校驗 SCC1 = 0b01000000; /3.設(shè)置允許發(fā)送,允許接收,查詢方式收發(fā) SCC2 = 0b00001100;/SCIsend1:串行發(fā)送1個字節(jié)-*/功能:串行發(fā)送1個字節(jié) */參數(shù):要發(fā)送的數(shù)據(jù) */返回:無 */-*void SCI

15、send1(INT8U o) /判斷ReStatusR的第SendTestBit位是否為1,是1可以發(fā)送 while (1) if (ReSendStatusR & (1SendTestBit) != 0) ReSendDataR = o; break; /SCIre1:串行收一個字節(jié)數(shù)據(jù)-*/功能:從串行口接收1個字節(jié)的數(shù)據(jù) */參數(shù):標(biāo)志指針p */返回:接收到的數(shù)據(jù)(若接收失敗,返回0 xff) */說明:參數(shù)*p帶回接收標(biāo)志.*p = 0,收到數(shù)據(jù);*p = 1,未收到數(shù)據(jù) */-*INT8U SCIre1(INT8U *p) INT16U k; INT8U i; /ReStatusR

16、第ReTestBit位為1表示可接收數(shù)據(jù) for(k=0; k 0 xfbbb; k+) if (ReSendStatusR & (1= 0 xfbbb) i = 0 xff; *p = 0 x01; return i;m = 0; while (m n) chm = SCIre1(&fp); if (fp = 1) return 1; m+; return 0;(1)查詢方式工程(08C)文件列表(2)查詢方式08C語言主程序(3)中斷方式MCU方主程序 7.5.2查詢方式工程文件中斷方式08C工程文件列表中斷方式08C語言主程序main.c 串行中斷子函數(shù)聲明EnDisInt.h 串行中斷

17、處理函數(shù) 串行中斷方式矢量表文件7.5.3 中斷方式工程文件返回中斷方式08C工程文件列表表7-5 中斷方式08C測試工程文件工程文件名SCI_INT.prj所在路徑MC08Ex2007GP32GP32CC03_串行通信中斷方式文件類型文件名功能簡述講解章節(jié)頭文件GP32C.h芯片頭文件08C工程文件組織5.3Includes.h總頭文件08C工程文件組織5.3EnDisInt.h開放或禁止MCU模塊中斷08C工程文件組織5.3SCI.h串行通信頭文件本章Type.h數(shù)據(jù)類型頭文件08C工程文件組織5.3C語言子函數(shù)文件MCUinit.c芯片系統(tǒng)初始化函數(shù)定義初始化及PLL編程實例14.2.5

18、SCI.cCI收發(fā)子函數(shù)定義本章Vectors.c中斷處理及中斷向量表08C工程文件組織5.3C語言主函數(shù)Main.c主函數(shù)本章中斷方式08C語言主程序main.c/-*/工 程 名:SCI_Int.prj */硬件連接: */ (1)MCU的串口與PC方的串口相連 */程序描述:利用中斷方式把收到的數(shù)據(jù)發(fā)送回去 */目 的:初步掌握利用中斷方式進行串行通信的基本知識 */-清華2007版嵌入式技術(shù)基礎(chǔ)與實踐實例-*/總頭文件#include Includes.h/主函數(shù)void main() DisableMCUint(); /禁止總中斷 /1. 芯片初始化 MCUinit(); /2. 模

19、塊初始化 SCIinit(); /(1) 串口初始化 /3. 開放各模塊中斷 EnableSCIreInt(); /(1)開放SCI接收中斷 /4. 開放總中斷 EnableMCUint(); /主循環(huán) while (1) 串行中斷子函數(shù)聲明EnDisInt.h 在該頭文件中對開關(guān)總中斷進行了宏定義,并且其他各個模塊的中斷設(shè)置函數(shù)在此進行聲明。/EnDisInt.h開放或禁止MCU各模塊中斷頭文件-#include GP32C.h /GP32 MCU映像寄存器名定義/開放或禁止中斷宏定義#define EnableMCUint() asm(CLI) /開放總中斷#define DisableM

20、CUint() asm(SEI) /禁止總中斷#define EnableSCIreInt() SCC2 |= (1 5) /令SCC2.5=1,開放SCI接收中斷#define DisableSCIreInt() SCC2 &= (1 5) /令SCC2.5=0,禁止SCI接收中斷串行中斷處理函數(shù)/Vectors08.c中斷處理函數(shù)與中斷向量表-*/功能: */ (1)定義中斷處理子程序 */ (2)放置中斷向量表 */本文件包含: / (1)SCI接收中斷處理函數(shù) */ (2)未定義的中斷處理函數(shù) */說明:該文件與芯片具體型號有關(guān) */ (1)芯片型號MC68HC908GP32 */-

21、*#include Type.h /類型別名定義#include EnDisInt.h /開放或禁止MCU各模塊中斷的宏定義#include SCI.h /該頭文件包含串行通信函數(shù)聲明/isrSCIre:接收中斷處理函數(shù)- -*/功能:接收1個字節(jié)數(shù)據(jù), 發(fā)送接到的數(shù)據(jù) */參數(shù):無 */返回:無 */內(nèi)部調(diào)用函數(shù):SCIreN, SCIsendN */-*#pragma interrupt_handler isrSCIre void isrSCIre(void) INT8U f; /標(biāo)志是否接受到數(shù)據(jù) INT8U SerialBuff1; /存放接收數(shù)據(jù)的數(shù)組 DisableMCUint()

22、; /禁止總中斷 /接收1個字節(jié)的數(shù)據(jù) f = SCIreN(1, SerialBuff); /若收到數(shù)據(jù),則發(fā)送接到的數(shù)據(jù) if (f = 0) SCIsendN(1, SerialBuff); EnableMCUint(); /開放總中斷/此處為用戶中斷處理函數(shù)的存放處/未定義的中斷處理函數(shù),本函數(shù)不能刪除#pragma interrupt_handler isrDummy void isrDummy(void) /中斷矢量表,需定義中斷函數(shù),可修改下表中的相應(yīng)項目/(interrupt service routine,isr 中斷處理程序)#pragma abs_address:0 xffdc /中斷向量表起始地址void (* const _vectab)(void) = /省略其他未使用的中斷向量定義 isrSCIre, /SCI接收中斷 /省略其他未使用的中斷向量定義 ;#pragma end_abs_address串行中斷方式矢量表文件HC08的中斷向量表的詳細(xì)說明在前面章節(jié)已經(jīng)介紹。在使用中斷方式時,只要將

溫馨提示

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

最新文檔

評論

0/150

提交評論