關於8051 to RS-232鮑率的問題 |
答題得分者是:mymj
|
leeli
初階會員 發表:57 回覆:55 積分:27 註冊:2003-06-25 發送簡訊給我 |
各位大大您們好:
小弟我現在要使用8051透過RS-232的方式與PC溝通。翻了一些參考書籍之後,書本上的鮑率都是使用同一的公式去算出TH1的值(我是使用串列埠模式3的方式)。但是,小弟我只能算出9600bps,再快就會出問題了。請問,到底TH1要設多少,才能工作在57600下呢?&在高速的鮑率下工作,有沒有什麼事情需要多注意的呢?
小弟我使用的是Winbond W78E54BP-40 ,我使用的震盪頻率為40MHz。(不過目前測試的時候,震盪頻率為11.0592MHz) 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡! |
mymj
版主 發表:132 回覆:486 積分:608 註冊:2002-10-25 發送簡訊給我 |
貼上計算方法極巨集
;* FLASH IC : W78E516 ;* Clystal : 11.059MHZ Fosc equ 24000000/1000 BaudRate equ 9600/10 TH1_SMOD0 equ 256-((Fosc*1000)/(BaudRate*10*384)) TH1_SMOD0_decimal equ ((Fosc*1000*10)/(BaudRate*10*384))-(((Fosc*1000)/(BaudRate*10*384))*10) TH1_SMOD1 equ 256-((Fosc*1000)/(BaudRate*10*192)) TH1_SMOD1_decimal equ ((Fosc*1000*10)/(BaudRate*10*192))-(((Fosc*1000)/(BaudRate*10*192))*10) TH2_BaudRate equ 65536-((Fosc*1000)/(BaudRate*10*32)) TH2_BaudRate_decimal equ ((Fosc*1000*10)/(BaudRate*10*32))-(((Fosc*1000)/(BaudRate*10*32))*10) ;;********************************************************* smode0_baudRate_setTH1 macro mov scon,#01010000b ; mode=mode1 ,ren=enable mov t2con,#00000000b orl tmod,#00100000b ; Timer1=auto-raload ; ; setb rrc_flag anl pcon,#01111111b mov th1,#TH1_SMOD0 ; mov a,#TH1_SMOD0_decimal clr c cjne a,#6,$ 3 jc $ 2 2 2 dec th1 ; clr rrc_flag cjne a,#4,$ 3 jnc $ 2 2 ; clr rrc_flag ; setb tr1 endm ;;========================================================= smode1_baudRate_setTH1 macro mov scon,#01010000b ; mode=mode1 ,ren=enable mov t2con,#00000000b orl tmod,#00100000b ; Timer1=auto-raload ; ; setb rrc_flag orl pcon,#10000000b mov th1,#TH1_SMOD1 ; mov a,#TH1_SMOD1_decimal clr c cjne a,#6,$ 3 jc $ 2 2 2 dec th1 ; clr rrc_flag cjne a,#4,$ 3 jnc $ 2 2 ; clr rrc_flag ; setb tr1 endm ;;********************************************************* Timer2_BaudRate_Set macro mov scon,#01010000b ; mode=mode1 ,ren=enable mov t2con,#00110000b ;Timer2=BaudRate CLK ; mov rcap2h,#>TH2_BaudRate mov rcap2l,# |
leeli
初階會員 發表:57 回覆:55 積分:27 註冊:2003-06-25 發送簡訊給我 |
|
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
你好!
我如果你使用的W78E54BP是一個8052的話,那建議你可以使用Time2!
我使用的震盪頻率11.0592MHz,115200可能會不穩定!建議到57600就好了。
c語言程式設定如下:
//Time2 = 65536 - (OSC / (32 * Baudrate))
#define B1200 (65536-288)
#define B2400 (65536-144)
#define B4800 (65536-72)
#define B9600 (65536-36)
#define B19200 (65536-18)
#define B28800 (65536-12)
#define B38400 (65536-9)
#define B57600 (65536-6)
#define B115200 (65536-3) #BAUDRATE B57600
// Timer2
T2MOD = 0x00;
T2CON = 0x30;
RCAP2L = BAUDRATE % 256;
RCAP2H = BAUDRATE / 256;
//COM Initial
PCON&=0x7f;
SCON=0x50;
ES=1;
EA=1;
//Enable Time2
ET2 = 1;
TR2 = 1; 發表人 - liangnet 於 2004/08/11 20:42:22
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |