我也是你这么用的 都挺好 你对比一下 另外 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; //开串口中断
}
|