如何實現W7100A中的UART

2021-06-06 16:08:46 字數 2774 閱讀 4061

簡介

這篇文件主要介紹了在w7100a中使用uart通訊的基本示例程式。所有的這些示例**都是基於c語言和keil編譯器完成的。詳情請參考w7100a資料手冊『第6章uart』中關於

uart、暫存器、中斷等等。

圖表1為設定uart波特率所用到的各個暫存器。定時器1(timer1)相關的暫存器是smod和th1,和定時器2(timer2)相關的暫存器是rldh和rldl。

圖表1.波特率設定例子

波特率(bps)

定時器 1(timer1) / 模式 2

定時器 2(timer2)

th1(0x8d)

rldh(0xcb), rldl(0xca)

smod = 『0』

smod = 『1』

2400

160(0xa0)

64(0x40)

64384(0xfb80)

4800

208(0xd0)

160(0xa0)

64960(0xfdc0)

9600

232(0xe8)

208(0xd0)

65248(0xfee0)

14400

240(0xf0)

224(0xe0)

65344(0xff40)

19200

244(0xf4)

232(0xe8)

65392(0xff70)

28800

248(0xf8)

240(0xf0)

65440(0xffa0)

38400

250(0xfa)

244(0xf4)

65464(0xffb8)

57600

252(0xfc)

248(0xf8)

65488(0xffd0)

115200

254(0xfe)

252(0xfc)

65512(0xffe8)

230400

255(0xff)

254(0xfe)

65524(0xfff4)

在一些uart通訊的示例中,uart通訊有固定的波特率(模式0和模式2)。如果是這種波特率固定的情況,請參考w7100a資料手冊第6章uart關於波特率的計算方法。所有的程式都是關於回送(echo-back)的例子,送回由序列通訊中接收到的資訊。

w7100a中uart有4個模式,從uart模式0到uart模式3。每個模式下的示例**的實現將在後面詳細介紹。

模式0, 8位uart, 固定波特率

void init_imcu(void)

void putbyte(unsigned char bydata)

unsigned char getbyte(void)   

void main()

關於uart模式0下的波特率,選擇內部時鐘12分頻(fosc/12)。考慮到w7100a的內部時鐘建立了乙個非常快的波特率時鐘,頻率大小為7.3mhz。這種固定波特率、高速的波特率時鐘情況下,通常情況下不會選擇模式0。這是因為模式0用的是同步傳輸,沒有起始位和停止位。

在所有的這些示例**中,在init_imcu()函式中將scon暫存器設定為0x10。putbyte()函式可以把序列輸入寫入序列快取器中,然後等待直到所有的資料傳送完成,最後清除ti。getbyte()函式則可以返回接收到的序列資料,並且等待直到所有的資料接收完成,最後清除ri。main()函式中,則是通過呼叫所有的init_imcu()、putbyte()、getbyte()函式將所有接收到的資料進行輸出。

模式1, 8位uart, 可變波特率

因為模式1使用非同步通訊,起始位和停止位分別位於資料的開頭和結尾。定時器1(timer1)和定時器2(timer2)溢位產生波特率。後面將詳細介紹各個模式下的示例**程式。

定時器1(timer1) 時鐘源

void init_imcu(void)

void putbyte(unsigned char bydata)

unsigned char getbyte(void)

void main()

在uart模式1下可以交換使用定時器1(timer1)和定時器2(timer2)來設定波特率。在這一章,我們使用定時器1(timer1)來設定波特率的值。詳細請參考w7100a資料手冊檢視關於波特率的設定。

示例程式中,將scon暫存器的值設定為0x50,同時設定timer1在模式2。如果要設定波特率的值,還要將smod位置1,th1暫存器的值設定為0xfc。此時,波特率的值為

115200bps。其它用來輸出的**程式也如同第2章的接收程式大致相同。

定時器2(timer2) 時鐘源

void init_imcu(void)

void putbyte(unsigned char bydata)

unsigned char getbyte(void)   

void main()

uart在模式1下可以交換使用定時器1(timer1)和定時器2(timer2)來設定波特率的值。在這一章節,利用定時器2(timer2)來設定波特率的值。詳細請參考w7100a資料手冊。

在示例**中,將scon暫存器設定為0x50,選擇定時器2(timer2)為波特率產生器模式。為了能夠正確的設定波特率的值,還需要將th2和tl2分別設為0xff和0xe8。這樣設定完成後,波特率的值就是115200bps。rldh和rldl的值可以重新過載,分別定義為0xff和0xe8。其它用來輸出的**程式也如同第2章的接收程式大致相同。

未完待續~~

明天我們還會繼續給大家獻上如何實現w7100a中的uart,敬請期待~~

如何實現W7100A程式燒錄

1 簡介 w7100a的 儲存器內部具有啟動rom boot rom 和快閃儲存器 flash memory 啟動rom通過isp函式自動驅動w7100a,因此使用者不能修改啟動rom中的 但是,快閃儲存器仍然可以作為 儲存器使用。當系統復位時,w7100a自動執行啟動rom的啟動 這之後的過程根據...

如何實現W7100A中的UART 二

如何實現w7100a中的uart第一部分請參考 4.2,9位uart,固定波特率 void init imcu void void putbyte unsigned char bydata unsigned char getbyte void void main 波特率的uart模式2是固定內部時鐘...

如何實現W7100A中的UART 三

6.執行例項 在imcu7100evb開發板上執行 如何實現w7100a中的uart 檔案中的示例 過程如下 1.建立乙個keil工程,寫入uart示例 2.由keil編譯器編進行編譯,並建立hex文件 3.4.執行序列終端程式,設定埠 波特率等等 5.在開發板上執行程式,確認能接收到來自終端程式的...