所以UART工作模式是1
使用Timer 1,工作模式2(Auto Reload).
Baudrate的計算方式是
Baud = 2exp(SMOD)/32 x Fosc/(12(256-TH1))
- 一般SMOD都會設0
- Fosc是Crystal Freq
- TH1是Timer1的TH 暫存器
256-TH1 = 26.04,所以TH1 選 256-26 = 230.
所以使用12MHz的Crystal,最高Baudrate是31250.
為配合目前Modem最低baudrate 9600,使用12MHz時無法整除,而且誤差太高,所以Crystal要用11.0592 MHz.
TMOD=0x20; // T1 Mode2RS232 DSUB-9 pin def和Max232線路
TH1=256-3; // baudrate 9600 (Fosc=11.0592MHz)
TL1=256-3;
TR1=1; // Enable T1
SCON=0x50; // Serial port, Mode1, REN=1
hyperterminal 出現亂碼?
先查查crystal和baudrate吧,baudrate誤差是不是太大?
或許這顆的頻率在高的baudrate可以整除喔。
再來,試試在資料間暫停一下,讓接收端有足夠的空際synch到RS232的start bit (L)。
還有,電源剛啟動,不要急著送,先等一段時間讓電源穩定了再送。
接著......
沒有留言:
張貼留言