SDCC autobaud function

Posted by: 邱小新 at 下午3:56 in , ,

測試原由

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 功能怎麼寫的?只好放棄這個功能囉。

0 意見

張貼留言