痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
查看: 5118|回復: 17

求助: STC89C52 12T 如何達到 BAUD RATE 38400

  [複製鏈接]
發表於 2012-8-30 01:10:22 | 顯示全部樓層 |閱讀模式
本帖最後由 antlu 於 2012-8-30 01:15 AM 編輯

各位先進好:  我的 GPS 有幾型 一般都是 4800 傳輸率 但是有兩個GPS (手持 & 藍芽)居然是 38400 傳輸率,請問這麼高的傳輸率有何公用? 我的石英震盪 11.0592MHZ 好像沒辦法傳那麼快!! 應該如何改進? 還有最近從大陸買的 韓製 GPS 發現一個現象是 使用原來的程式 但是RS232訊號讀取的異常偏高,我使用 串口大師 讀取都OK,但是我的程式就有差別,請問這樣該如何改善?

KJSUGPS_DATA [1600].JPG

KOREA_GPSDATA [1600].JPG

手持GPS_DATA [1600].JPG

GPSlim236_DATA [1600].JPG
GPSlim236_DATA [800x600].JPG
手持GPS_DATA [800x600].JPG
KOREA_GPSDATA [800x600].JPG
KJSUGPS_DATA [800x600].JPG
發表於 2012-8-30 08:27:48 | 顯示全部樓層
換20MHz的晶振?
發表於 2012-8-30 08:56:15 | 顯示全部樓層
TIMER 的除頻設定改一下
記得115200都是可以的
38400應該沒問題的
發表於 2012-8-30 09:24:03 | 顯示全部樓層
不知道I/O腳上,加上1K電阻有沒有用!
我猜的!阿乾兄看看就好!
 樓主| 發表於 2012-8-30 12:13:18 | 顯示全部樓層
fatzeros 發表於 2012-8-30 09:24 AM static/image/common/back.gif
不知道I/O腳上,加上1K電阻有沒有用!
我猜的!阿乾兄看看就好!

fatzeros大:
  沒效ㄟ!! 再試試!!
發表於 2012-8-30 12:38:18 | 顯示全部樓層
本帖最後由 ysc 於 2012-8-30 04:42 PM 編輯

用Timer 2當Baud Rate Generator應該沒問題 ,下圖是AT89C52的,STC89C52這部份應該相容:
T2.jpg
 樓主| 發表於 2012-8-30 18:37:23 | 顯示全部樓層
YSC大:
   感謝!! 另外請問 為何BAUD RATE 要用到這麼高 從原先 4800 跳到 38400 (6倍),是不是因為這樣系統就不需要一直耗在"資料傳送"的動作上! 可以做其他的事情? 這樣一來會影響到其他嗎?
發表於 2012-8-30 21:09:58 | 顯示全部樓層
antlu 發表於 2012-8-30 06:37 PM static/image/common/back.gif
YSC大:
   感謝!! 另外請問 為何BAUD RATE 要用到這麼高 從原先 4800 跳到 38400 (6倍),是不是因為這樣系統 ...

提高baud rate主要是加快傳送速度,相同的時間內可以傳輸更多數據,
由於串聯傳輸大都有硬體幫忙,所以跟軟體系統負擔較無關,反而是傳輸速度變快了,
資料量變大了,cpu更忙是肯定的。

以目前來說,38400應該是基本的,很多應用都已是115200........

 樓主| 發表於 2012-8-30 21:17:17 | 顯示全部樓層
ysc 發表於 2012-8-30 09:09 PM static/image/common/back.gif
提高baud rate主要是加快傳送速度,相同的時間內可以傳輸更多數據,
由於串聯傳輸大都有硬體幫忙,所以跟 ...

YSC大:
  我越來越發現 UART 深& 複雜 看樣子要重看了... 設定方面還是有些 霧煞煞!!
發表於 2012-8-30 21:22:10 | 顯示全部樓層
antlu 發表於 2012-8-30 09:17 PM static/image/common/back.gif
YSC大:
  我越來越發現 UART 深& 複雜 看樣子要重看了... 設定方面還是有些 霧煞煞!! ...

以單晶片來說,89C52的UART算是蠻單純的了.......
發表於 2012-8-30 21:39:31 | 顯示全部樓層
本帖最後由 xiaolaba 於 2012-8-30 09:43 PM 編輯
antlu 發表於 2012-8-30 09:17 PM static/image/common/back.gif
YSC大:
  我越來越發現 UART 深& 複雜 看樣子要重看了... 設定方面還是有些 霧煞煞!! ...


有現成的工具, 參考看看

http://www.keil.com/products/c51/baudrate.asp

XTAL = 11.0592MHZ
Serial Clock Divisor = 16
timer 2 t2con = 34h

RCAP2H,RCAP2L
Reload Value        Actual Baud Rate        Closest Standard Baud Rate        % Deviation
0FFh , 0FAh        115,200.00                115,200                                        0.00%
0FFh , 0F4h        57,600.00                57,600                                        0.00%
0FFh , 0EEh        38,400.00                38,400                                        0.00%
0FFh , 0DCh        19,200.00                19,200                                        0.00%
0FFh , 0B8h        9,600.00                        9,600                                        0.00%
0FFh , 70h        4,800.00                        4,800                                        0.00%
發表於 2012-8-30 22:29:46 | 顯示全部樓層
xiaolaba 發表於 2012-8-30 09:39 PM static/image/common/back.gif
有現成的工具, 參考看看

http://www.keil.com/products/c51/baudrate.asp


這個計算工具算起來怪怪的喔,算出來的數字會讓baud rate減半,
以89C52來說,若要用Timer2 產生38400 baud rate,
則除頻數=11059200/ (2*16*38400)=9
10000(H)-9=FFF7(H)

 樓主| 發表於 2012-8-31 01:43:39 | 顯示全部樓層
感謝兩位大大:
    能力有限!! 所以覺得艱深!! 沒關係! 天道酬勤!!
 樓主| 發表於 2012-9-4 01:23:13 | 顯示全部樓層
ysc 發表於 2012-8-30 10:29 PM static/image/common/back.gif
這個計算工具算起來怪怪的喔,算出來的數字會讓baud rate減半,
以89C52來說,若要用Timer2 產生38400 ba ...


ysc大;
  我嚐試著要把 38400 的速率送出資料但是一直沒成功,請問我的程式還要增加哪些指令?

  void InitUART  (void)
{
T2CON = 0x34;
RCAP2H= 0xff;
RCAP2L= 0xF7;

ET2=1;
TR2 =1;
  EA = 1;
  //ES =1;
}               
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{

InitUART();



while (1)                       
    {
    SendStr("UART test,技术论坛:www.doflye.net thank you!");
        DelayMs(240);//延时循环发送
    DelayMs(240);
    }
}

/*------------------------------------------------
                    发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
      TI = 0;
}
/*------------------------------------------------
                    发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,
                //通过检测是否字符串末尾
  {
  SendByte(*s);
  s++;
  }
}

謝謝!!
發表於 2012-9-4 02:15:24 | 顯示全部樓層
SCON = 0x50;
發表於 2012-9-4 10:22:14 | 顯示全部樓層
antlu 發表於 2012-9-4 01:23 AM static/image/common/back.gif
ysc大;
  我嚐試著要把 38400 的速率送出資料但是一直沒成功,請問我的程式還要增加哪些指令?

呵呵~~SCON沒設定到......
 樓主| 發表於 2012-9-4 19:22:57 | 顯示全部樓層
感謝2位大哥協助,已經可以發送信號!! 接下來就是 接收 38400的 GPS資料了...
 樓主| 發表於 2012-9-4 23:26:59 | 顯示全部樓層
/*------------------------------------------------
              串口通讯初始化
------------------------------------------------*/
void UART_Init(void)
{
    SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
//    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
//    TH1   = 0xfa;               // TH1:  重装值 GPS 4800 波特率 晶振 11.0592MHz  
    T2CON = 0x34;  // timer2 parameter set
    RCAP2H = 0xff; //set uart baud rate 38400
        RCAP2L = 0xf7;
    ET2 = 1;// enable timer2 overflow flag
        TR2 = 1;// timer2 enable
//   TR1   = 1;                  // TR1:  timer 1 打开                        
    EA    = 1;                  //打开总中断
    ES    = 1;                  //打开串口中断
}

感謝 ysc大& 胸脯啞謎大的指導, 8952的定時器與中断真的很複雜,很厲害!! 我就不需要在更換 石英震盪了!!
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-12-24 08:03 AM , Processed in 0.109371 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.