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