測試原由
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 功能怎麼寫的?只好放棄這個功能囉。
張貼留言