測試原由
SDCC 的 serial.h 內有一行 void autobaud(); 宣告,表示有自動鮑率偵測功能。所以就在 W79L632A 上實驗是否可行。它的原理是假定使用者第一次會輸入 return 鍵,也就是 ascii code 13。依照這個值利用 timer1 算時間差來做運算,進而取得 timer1 8-bit auto reload 的 TH 值。以下是測試的程式碼,大多是參考 SDCC 內的 serial.c 函數功能。
變數宣告
#include <8051.h>
extern void autobaud();
輸出函數
void putchar(char c)
{
    while(!TI);
    TI=0;
    SBUF=c;
}
輸入函數
char getchar(void)
{
    char c;
    while(!RI);
    RI=0;
    c=SBUF;
    return c;
}
主要函數
void main(void)
{
    ES=0;   /* kill SIO IRQ */
    TI=0;   /* prepare sending */
    RI=0;   /* prepare reading */
    autobaud();     /* automatically detect and set baud rate */
    getchar();      /* discard the CR character from the autobaud routine */
    // echo
    while(1) {
        putchar(getchar());
    }
}
測試結果
結果非常失望,完全沒有作用,
功能無效。不知是不是因為我的 W79L632A 使用 40MHz 的震盪器。也不知 winbond LD 的 autobaund 功能怎麼寫的?只好放棄這個功能囉。
 
張貼留言