我也是你這么用的 都挺好 你對比一下 另外 11.0592下 10微秒太小了 0誤差至少要17微秒
下面是定時器0的初始化 上面是官網 下面是你的 對比一下
/*STC官網范例
void Timer0Init(void) //5毫秒@11.0592MHz
{
AUXR |= 0x80; //定時器時鐘1T模式
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = 0x00; //設置定時初值
TH0 = 0x28; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
}*/
//你的程序
void Timer0Init(void) //10微秒@11.0592MHz
{
AUXR |= 0x80; //定時器時鐘1T模式
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x02; //設置定時器模式
TL0 = 0x91; //設置定時初值
TH0 = 0x91; //設置定時重載值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
}
//串口初始化
//你的程序
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位數據,可變波特率
AUXR |= 0x04; //定時器2時鐘為Fosc,即1T
T2L = 0xE0; //設定定時初值
T2H = 0xFE; //設定定時初值
AUXR |= 0x01; //串口1選擇定時器2為波特率發生器
AUXR |= 0x10; //啟動定時器2
}
//我的程序
void Init_UART1() //串口初始化 1T/定時器2作波特率發生器
{
SCON = 0x50; //8位數據,可變波特率
AUXR |= 0x01; //串口1選擇定時器2為波特率發生器
AUXR |= 0x04; //定時器2時鐘為Fosc,即1T
T2L = BAUD1L; //設定定時初值
T2H = BAUD1H; //設定定時初值
AUXR |= 0x10; //啟動定時器2
ES=1; //開串口中斷
}
|