如何實(shí)現(xiàn)W7100A的UART通信 - 圖文-_第1頁
如何實(shí)現(xiàn)W7100A的UART通信 - 圖文-_第2頁
如何實(shí)現(xiàn)W7100A的UART通信 - 圖文-_第3頁
如何實(shí)現(xiàn)W7100A的UART通信 - 圖文-_第4頁
如何實(shí)現(xiàn)W7100A的UART通信 - 圖文-_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 如何實(shí)現(xiàn)W7100A的UART通信版本 1.0 How to use UART in W7100A 目錄1簡介 (32模式0, 8位UART, 固定波特率 (43模式1, 8位UART, 可變波特率 (53.1定時(shí)器1(Timer1 時(shí)鐘源 (53.2定時(shí)器2(Timer2時(shí)鐘源 (64模式2, 9位UART, 固定波特率 (85模式3, 9位UART, 可變波特率 (95.1定時(shí)器1(Timer1時(shí)鐘源 (95.2定時(shí)器2(Timer2時(shí)鐘源 (106運(yùn)行實(shí)例 (126.1創(chuàng)建一個(gè)Keil工程 (126.2編譯生成HEX文件 (126.3下載HEX文件到iMCU7100EVB (136.4

2、串行終端程序 (136.5運(yùn)行UART示例代碼 (16文檔歷史信息 (17 How to use UART in W7100A 1簡介這篇文檔主要介紹W7100A實(shí)現(xiàn)UART通信的基本示例程序。所有的這些示例代碼都是基于C語言和Keil編譯器完成的。更多的詳細(xì)信息,請參閱W7100A數(shù)據(jù)手冊第6章UART中關(guān)于UART、寄存器、中斷等的介紹。圖表1為設(shè)置UART波特率所用到的各個(gè)寄存器。與定時(shí)器1(Timer1相關(guān)的寄存器是SMOD和TH1,與定時(shí)器2(Timer2相關(guān)的寄存器是RLDH和RLDL。圖表1 波特率設(shè)置例子 在一些UART通信的示例中,UART通信有固定的波特率(模式0和模式2。

3、如果是這種波特率固定的情況,請參考W7100A數(shù)據(jù)手冊第6章UART中關(guān)于波特率的計(jì)算方法。所有的程序都是實(shí)現(xiàn)回送(Echo-back的例子,即回送串行通信接收到的信息。W7100A中UART有4個(gè)模式,從UART模式0到UART模式3。每個(gè)模式下具體的代碼實(shí)現(xiàn)將在后面進(jìn)行詳細(xì)介紹。void PutByte(unsigned char byDataSBUF = byData; /向串行緩存器中寫入數(shù)據(jù)while(!TI; /等待直到所有的數(shù)據(jù)記錄完成TI = 0; /清除發(fā)送中斷unsigned char GetByte(voidunsigned char byData; / 等待直到數(shù)據(jù)接收

4、完成while(!RI;RI = 0; /清除RIbyData = SBUF; /讀取數(shù)據(jù)return byData;void main(Init_iMCU(; /調(diào)用Init_iMCU(函數(shù)while(1 PutByte(GetByte(; /回送(Echo-back接收到的數(shù)據(jù)關(guān)于UART模式0下的波特率,選擇內(nèi)部時(shí)鐘12分頻(f os c/12??紤]到W7100A的內(nèi)部時(shí)鐘將產(chǎn)生了一個(gè)高速的大小為7.3MHz的波特率時(shí)鐘。對于這種固定且高速的波特率,通常不會選擇模式0。因?yàn)槟J?使用同步傳輸,沒有起始位和停止位。在所有的這些示例代碼中,在Init_iMCU(函數(shù)中將SCON寄存器設(shè)置為0

5、x10。PutByte(函數(shù)可以將串行輸入值寫入到串行緩存器中,然后等待所有的數(shù)據(jù)發(fā)送完成后清除TI位。GetByte(函數(shù)則返回接收到的串行數(shù)據(jù),等待直到所有的數(shù)據(jù)接收完成再清除RI位。Main(函數(shù)則是通過調(diào)用Init_iMCU(、PutByte(、GetByte(函數(shù)輸出所有接收到的數(shù)據(jù)。void Init_iMCU(voidSCON = 0x50; / 串行模式1, SM00 = 0, SM01 =1, REN=1TMOD |= 0x20; / 定時(shí)器1(Timer1模式2PCON |= 0x80; / SMOD0 = 1TL1 = 0xFC; / 波特率設(shè)定為115200bpsTH1

6、 = 0xFC;/ 參考W7100A數(shù)據(jù)手冊TR1 = 1;/啟動定時(shí)器1(Timer1void PutByte(unsigned char byDataSBUF = byData; / 向串行緩存器中寫入數(shù)據(jù)while(!TI; / 等待數(shù)據(jù)記錄完成TI = 0; / 清除傳輸中斷unsigned char GetByte(voidunsigned char byData; /等待直到數(shù)據(jù)接收while(!RI;RI = 0; /清除RIbyData = SBUF; / 讀取數(shù)據(jù)return byData;void main(Init_iMCU(; /調(diào)用Init_iMCU函數(shù)while(1

7、 PutByte(GetByte(; /回送(Echo-back接收到的數(shù)據(jù) How to use UART in W7100A 在UART模式1下可以交換使用定時(shí)器1(Timer1和定時(shí)器2(Timer2來設(shè)定波特率。在這一章,我們使用定時(shí)器1(Timer1來設(shè)定波特率的值。詳細(xì)信息請參考W7100A數(shù)據(jù)手冊波特率的設(shè)置。示例程序中,將SCON寄存器的值設(shè)定為0x50,同時(shí)設(shè)定Timer1為模式2方式。如果要設(shè)置波特率的值,還要將SMOD位置1,TH1寄存器的值設(shè)定為0xFC。此時(shí),波特率的值為115200bps。其它用來輸出的代碼程序也與第2章的接收程序大致相同。3.2定時(shí)器2(Timer

8、2時(shí)鐘源void Init_iMCU(voidSCON = 0x50; / 串行模式1, SM00 = 0, SM01 =1, REN=1T2CON = 0x30; / 定時(shí)器2(Timer2波特率發(fā)生器模式TH2 = 0xFF;/ 波特率設(shè)置為115200bpsTL2 = 0xE8; / 請參考W7100A數(shù)據(jù)手冊RLDH = 0xFF; / 重新重載波特率為115200bpsRLDL = 0xE8;/ 重新重載波特率為115200bpsTR2 = 1;/ 啟動定時(shí)器2(Timer2void PutByte(unsigned char byDataSBUF = byData; / 向串行緩存

9、器中寫入數(shù)據(jù)while(!TI; / 等待直到所有的數(shù)據(jù)記錄完成TI = 0; / 清除傳輸中斷unsigned char GetByte(voidunsigned char byData; / 等待數(shù)據(jù)接收while(!RI;RI = 0; /清除RIbyData = SBUF; / 讀取數(shù)據(jù)return byData;void main(Init_iMCU(; /調(diào)用Init_iMCU函數(shù)while(1 PutByte(GetByte(; /回送(Echo-back接收到的數(shù)據(jù) How to use UART in W7100A UART在模式1下可以交換使用定時(shí)器1(Timer1和定時(shí)器

10、2(Timer2來設(shè)定波特率的值。在這一章節(jié),利用定時(shí)器2(Timer2來設(shè)定波特率。詳細(xì)信息請參考W7100A數(shù)據(jù)手冊。在這些示例程序中,將SCON寄存器設(shè)置為0x50,選擇定時(shí)器2(Timer2為波特率發(fā)生器模式。為了能夠正確的設(shè)定波特率,還需要將TH2和TL2分別設(shè)為0xFF和0xE8。這樣設(shè)置完成后,波特率就是115200bps。RLDH和RLDL的值可以重新加載,分別定義為0xFF和0xE8。其它用于輸出的代碼程序和第2章的接收程序相同。void PutByte(unsigned char byDataSBUF = byData; / 向串行緩存器中寫入數(shù)據(jù)while(!TI; /

11、等待所有的數(shù)據(jù)記錄完成TI = 0; / 清除傳輸中斷unsigned char GetByte(voidunsigned char byData; / 等待數(shù)據(jù)接收while(!RI;RI = 0; /清除RIbyData = SBUF; /讀取數(shù)據(jù)return byData;void main(Init_iMCU(; /調(diào)用Init_iMCU函數(shù)while(1 PutByte(GetByte(; /回送(Echo-back接收到的數(shù)據(jù)UART模式2的波特率固定內(nèi)部時(shí)鐘fosc/32或fosc/64。具體選擇f os c/32還是f os c/64 要根據(jù)SMOD0位來確定。根據(jù)W7100A

12、的內(nèi)部時(shí)鐘的大小,將產(chǎn)生的高速波特率時(shí)鐘范圍為2.7 1.4MHz。如同模式0的情況類似,在實(shí)際情況中一般不使用模式3,因?yàn)椴ㄌ芈使潭ㄇ覟楦咚俨ㄌ芈蕰r(shí)鐘。在這些示例程序中,將SCON寄存器設(shè)定為0x90。為了能夠正確的設(shè)定波特率,還需要設(shè)置PCON寄存器的最高位SMOD0 (波特率= f os c/32。其它用于輸出的代碼和第2章中的接收過程的程序相同。TMOD |= 0x20; / 定時(shí)器1(Timer1模式2PCON |= 0x80; / SMOD0 = 1TL1 = 0xFC; / 波特率115200bpsTH1 = 0xFC;/請參考W7100A數(shù)據(jù)手冊TR1 = 1;/ 啟動定時(shí)器1

13、(Timer1void PutByte(unsigned char byDataSBUF = byData; / 向串行緩存器中寫入數(shù)據(jù)while(!TI; / 等待數(shù)據(jù)記錄完成TI = 0; / 清除傳輸中斷unsigned char GetByte(voidunsigned char byData; /等待數(shù)據(jù)接收while(!RI;RI = 0; /清除RIbyData = SBUF; / 讀取數(shù)據(jù)return byData;void main(Init_iMCU(; /調(diào)用Init_iMCU函數(shù)while(1 PutByte(GetByte(; /回送(Echo-back接收到的數(shù)據(jù)在

14、UART模式3下,可以交換使用定時(shí)器1(Timer1和定時(shí)器2(Timer2來設(shè)定波特率。在這一章節(jié),我們使用定時(shí)器1(Timer1來設(shè)置波特率, 詳細(xì)信息請參考W7100A數(shù)據(jù)手冊。與模式1不同的是,停止位比之前多了1位。這一位可以用作奇偶校驗(yàn)或者多重處理器通信, 詳情請參考W7100A數(shù)據(jù)手冊。在這些示例程序中,將SCON寄存器設(shè)置為0xD0,定時(shí)器1(Timer1選擇模式2。為了能正 How to use UART in W7100A 確設(shè)置波特率,需要設(shè)置PCON寄存器的SMOD位,同時(shí)TH1寄存器的值設(shè)為0xFC。這樣設(shè)置完成后,波特率的值為115200bps。其它用于實(shí)現(xiàn)輸出信息的

15、代碼和第2章中的接收過程的程序相同。5.2定時(shí)器2(Timer2時(shí)鐘源void Init_iMCU(voidSCON = 0xD0; / 串行模式3, SM00 = 1, SM01 =1, REN=1T2CON = 0x30; /定時(shí)器2(Timer2波特率發(fā)生器模式TH2 = 0xFF;/波特率設(shè)定為115200bpsTL2 = 0xE8; / 請參考W7100A數(shù)據(jù)手冊RLDH = 0xFF; / 波特率重載值設(shè)為115200bpsRLDL = 0xE8;/ 波特率重載值設(shè)為115200bpsTR2 = 1;/ 啟動定時(shí)器2(Timer2void PutByte(unsigned char

16、 byDataSBUF = byData; / 向串行緩存器中寫入數(shù)據(jù)while(!TI; / 等待數(shù)據(jù)記錄完成TI = 0; / 清除傳輸中斷unsigned char GetByte(voidunsigned char byData; /等待數(shù)據(jù)接收while(!RI;RI = 0; /清除RIbyData = SBUF; /讀取數(shù)據(jù)return byData;void main(Init_iMCU(; /調(diào)用Init_iMCU函數(shù)while(1 PutByte(GetByte(; /回送(Echo-back接收到的數(shù)據(jù) How to use UART in W7100A 在UART模式3

17、下,可以交換使用定時(shí)器1(Timer1和定時(shí)器2(Timer2來設(shè)置波特率。在這一章節(jié),利用定時(shí)器2(Timer2來設(shè)置波特率。更多的詳細(xì)信息請參考W7100A數(shù)據(jù)手冊。與模式1不同的是,在停止位之前多了1位,此位可以用于奇偶校驗(yàn)或者多重處理器通信。具體的詳細(xì)信息可以參考W7100A數(shù)據(jù)手冊。在上面的程序中,將SCON寄存器設(shè)為0xD0,定時(shí)器2(Timer2設(shè)定為波特率發(fā)生器模式。為了能夠設(shè)定波特率,還需要將TH2和TL2的值分別設(shè)為0xFF和0xE8。設(shè)置完成后,波特率就變成115200bps。重載值RLDH和RLDL也必須相應(yīng)的設(shè)置為0xFF和0xE8。其它實(shí)現(xiàn)輸出信息的代碼也和第2章中

18、介紹的接收過程的程序類似。 How to use UART in W7100A 6運(yùn)行實(shí)例本章介紹了如何下載并且運(yùn)行iMCU7100EVB應(yīng)用手冊中UART通信的示例代碼程序。所有的代碼都是用C語言編寫并且在Keil環(huán)境下實(shí)現(xiàn)的。用戶可以使用兩個(gè)程序來下載Keil工程中生成的HEX文檔。一種方法是使用WizISP程序,另外一種是利用W7100A Debugger程序。更多的詳細(xì)信息,請參考iMCU7100EVB用戶指南、WizISP程序指南和W7100ADebugger指南。在iMCU7100EVB開發(fā)板上運(yùn)行示例代碼過程如下(這些代碼在文檔如何實(shí)現(xiàn)W7100A的UART通信中可以找到:1.創(chuàng)

19、建一個(gè)Keil工程,寫入U(xiǎn)ART示例代碼2.由Keil編譯器編進(jìn)行編譯,并生成HEX文件3.利用WizISP程序或者W7100A Debugger程序下載已經(jīng)生成的HEX文件4.運(yùn)行串行終端程序,設(shè)置端口、波特率等等5.在開發(fā)板上運(yùn)行程序,確認(rèn)能接收到來自終端程序的串行消息下面的章節(jié)將會顯示每一步的操作過程。6.1創(chuàng)建Keil工程用戶可以創(chuàng)建一個(gè)新的Keil工程,或者打開附件中的Keil工程,如圖6.1所示。 <圖6.1>打開UART的Keil工程6.2編譯生成HEX文件輸入示例代碼,并且進(jìn)行編譯,然后生成HEX文件。 How to use UART in W7100A <圖

20、6.2> 通過Keil編譯器生成HEX文件6.3下載HEX文件到iMCU7100EVB利用WizISP程序或者W7100A Debugger程序?qū)EX文件下載到iMCU7100EVB開發(fā)板。如下圖所示為利用WizISP程序進(jìn)行下載的界面。由于WizISP程序支持二進(jìn)制文件下載,所以WizISP程序可以將HEX文件轉(zhuǎn)換成BIN文件。 <圖6.3>下載HEX文件到iMCU7100EVB6.4串行終端程序利用串行終端程序來確認(rèn)UART的示例代碼是否能夠正常運(yùn)行。超終端是MS Windows提供的最基本的應(yīng)用程序。用戶根據(jù)自己需要的處理環(huán)境來相應(yīng)的設(shè)定串行端口、波特率和其 How to u

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論