星期一, 8月 22, 2005

8051 UART Baudrate Setting

一般使用 8 data, 1 stop, No Parity bit.
所以UART工作模式是1

使用Timer 1,工作模式2(Auto Reload).

Baudrate的計算方式是
Baud = 2exp(SMOD)/32 x Fosc/(12(256-TH1))
  1. 一般SMOD都會設0
  2. Fosc是Crystal Freq
  3. TH1是Timer1的TH 暫存器
使用12MHz的Crystal,SMOD=0,Baudrate是1200
256-TH1 = 26.04,所以TH1 選 256-26 = 230.

所以使用12MHz的Crystal,最高Baudrate是31250.


為配合目前Modem最低baudrate 9600,使用12MHz時無法整除,而且誤差太高,所以Crystal要用11.0592 MHz.
TMOD=0x20; // T1 Mode2
TH1=256-3; // baudrate 9600 (Fosc=11.0592MHz)
TL1=256-3;
TR1=1; // Enable T1
SCON=0x50; // Serial port, Mode1, REN=1
RS232 DSUB-9 pin def和Max232線路
hyperterminal 出現亂碼?
先查查crystal和baudrate吧,baudrate誤差是不是太大?
或許這顆的頻率在高的baudrate可以整除喔。

再來,試試在資料間暫停一下,讓接收端有足夠的空際synch到RS232的start bit (L)。
還有,電源剛啟動,不要急著送,先等一段時間讓電源穩定了再送。
接著......

沒有留言:

網誌存檔