公告版位
pre class="brush: cpp" <>

8051的鮑率設定和程式碼一定都把他設定成可蘭經來讀了吧,不過有時候時間久了還是會遺忘,我就在這邊做個整理

 

1.RS232 UART的一些觀念

通用非同步收發傳輸器(Universal Asynchronous Receiver/Transmitter,通常稱作UART,讀音/ˈjuːart/)是一種非同步收發傳輸器,將資料由串列傳輸(Serial communication)與平行傳輸(Parallel communication)間作傳輸轉換。

UART通常用在與其他通訊協定(如EIA RS-232)的連結上。
RS-232C是標準的串列傳輸標準。 RS(Recommended standard)代表推薦標準,232是標識號,C代表RS232的第三次修改(1969年)。
IBM PC機上的COM1、COM2介面,就是RS-232C介面

 

 

2.UART在8051中的副程式如下(可蘭經)

======================我是程式碼分隔線=========================

void UART() //11.059MHZ石英 9600鮑率

{
SCON=0x52; 
TMOD=0x20; 
TCON=0x69; 
TH1=0xFD; 
TR1=1; 
ES=1; 
EA=1; 
}

 

======================我是程式碼分隔線========================= 

3.程式解釋

void UART() 
{


SCON=0x52;

首先先把SCON這個串列埠控制器暫存器打開

解釋:在圖1中表示串列控制暫存器01010010 TI=1 REN=1 由圖2可知"01"為 8位元UART傳輸(8-11)的設定

 

裡面的暫存器位置長成這樣

 

1圖1

 

裡面的位元76為設定串列埠的位元(下圖表示)

 

2圖2

 

總共四種方式可做串列傳輸的位元設定

 

比較要注意的一點就是在設定模式1跟模式3的時候,鮑率由計時器或計時器所產生,所以如果用計時器0去做鮑率設定是不會動作.

 

TMOD=0x20;

解釋:計時/計數模式暫存器 在圖三中表示00100000 設定計時器1開啟,因為5跟4位元分別是"10"所以在圖四中知道設定8位元計數器

 

如圖所示

TMOD圖三

TMOD2圖四


TCON=0x40;

由圖5中可知計時計數控制暫存器 0100000  開啟TIMER1

TCON

圖五

TH1=0xFD;

鮑率計算 THI公式如下

9600

***請注意在上圖中2為2^SMOD  此公式為SMOD=0因此2^0=1*** 

如果要改鮑率或者石英晶體有變動 公式需要重新計算,上圖中的11.0592為石英晶體的設定值,在分母部分9600為鮑率,如果需要更換這兩地方即可求出TH1的值,FDH=0XFD

如果石英晶體12MHZ 鮑率設定為1200,那TH1計算出來應該是230  TH1=256-[(2^0*12*10^6)/(384*1200)]=230


TR1=1;

計時計數控制暫存器裡面的TR1開啟 1啟動 0關閉 
ES=1;

串列中斷致能 (在IE暫存器裡面) 
EA=1;

全部中斷源致能(在IE存器裡面) 

IE  
}

 


http://www.vr.ncue.edu.tw/esa/a1001/ch07.pdf

http://jyhshin3.blogspot.tw/2009/03/8051-uart.html

, , ,

阿倫 發表在 痞客邦 PIXNET 留言(1) 人氣()


留言列表 (1)

發表留言
  • Ted
  • 你好!圖六中鮑率計算公式的分子多了2倍,變成是SMOD = 1了
    應改為1 x 11.0592 x 10^6 才對,最後的結果依然是253沒錯!