12M晶振就要用12M晶振计算,否则误差太大了,自然容易出错:
void UartInit(void) //9600bps@12.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xC7; //设定定时初值
T2H = 0xFE; //设定定时初值
AUXR |= 0x10; //启动定时器2
}
这样与PC机串口通讯会失步。11.0592M计算的9600波特率误差为0,而12M计算的误差为0.16,所以还是建议用11.0592的晶振。
如果只是两个单片机之间串口通讯,那么晶振与波特率都无所谓,只要两边完全相同就可以了。
|