我用STC89C52单片机和12MHZ晶振怎么产生9600的波特率
PCON = 0x80;
SCON = 0x50;
TMOD = 0x21;
TH1 = 0xfa;
TL1 = 0xfa;
TR1 = 1;
TH0 = 0x00;
TL0 = 0x01;
ET0 = 1;
TR0 = 1;
EA = 1;
SerDTvalid = FALSE;
REN = 1;
ES = 1;
这段程序应该是用11.0592M的晶振正好产生9600的波特率,但是我只有12M的晶振没有办法啊
初值设为0xF9,不过误差很大,不建议使用。可以将波特率改为4800,或换11.0952M.
你还是换个晶振的好
好吧,谢谢了,52是不是提供个timer2,用这个方式误差也是很大吗?
好吧,谢谢了,52是不是提供个timer2,用这个方式误差也是很大吗?
52是有timer2.不过波特率和用哪个定时器没有关系的。都一样。
void UartInit(void) //9600bps@12.000MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF9; //设定定时初值
TH1 = 0xF9; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
误差百分之六点多,没办法,无不太懂你为什么定时器0也设置了,串口本身是不用,你可以干别的
这个是1T模式还是12T模式啊
这个波特率的误差我也曾被折腾过,最后还是换晶振。
就是调的再好也会有乱码