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
裡面的位元7跟6為設定串列埠的位元(下圖表示)
圖2
總共四種方式可做串列傳輸的位元設定
比較要注意的一點就是在設定模式1跟模式3的時候,鮑率由計時器1或計時器2所產生,所以如果用計時器0去做鮑率設定是不會動作.
TMOD=0x20;
解釋:計時/計數模式暫存器 在圖三中表示00100000 設定計時器1開啟,因為5跟4位元分別是"10"所以在圖四中知道設定8位元計數器
如圖所示
圖三
圖四
TCON=0x40;
由圖5中可知計時計數控制暫存器 0100000 開啟TIMER1
圖五
TH1=0xFD;
鮑率計算 THI公式如下
請注意在上圖中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暫存器裡面)
}