单片机串口通讯在12MHz的问题
首先想说单片机的12M远不如11.0592M,其问题之大折磨了我一下午
我使用的的晶振是12Mhz,虽然我知道12Mhz在计算波特率时会有误差,但我没想到这个误差会有上限(其实应该想到的)。超过上限,误差太大会有问题。
下面我详细说一下我遇到的问题,关于波特率的计算公式这里就省去。
我以定时器1方式二计时,PCON=0(波特率不翻倍),为前提来展示。
在2400波特率下,一起都是那么美好:
TMOD=0x20;
TH1=0xF3;
TL1=0xF3;
SCON=0X50;
PCON=0X00;
TR1=1;
ES=1;
EA=1;

通过软件计算此时误差为0.16%,这是的我还没有意识到问题的严重
然而当我把波特率调到4800时一切都变了:
TMOD=0x20;
TH1=0xF9;
TL1=0xF9;
SCON=0X50;
PCON=0X00;
TR1=1;
ES=1;
EA=1;
此时的误差率达到了7%!!!在这样的误差下所传输的都变成了乱码!!!


而这种问题在11.0592MHz下根本不会出现,原因很简单就是没有误差。

总结:单片机在12MHz晶振下,只能使用2400及以下波特率,不能使用4800及以上,否则会误差太大产生乱码。
以上就是单片机在12MHz下的一个值得注意的问题,问题不大,但如果不知道对初学者来说确实一时想不明白。
ps:对于以上波特率计算、虚拟串口的辅助软件可以在评论区留下邮箱,我会私发。
ok,多谢看完。
在12MHz晶振下,单片机串口通讯时,当波特率调至4800时,误差率高达7%,导致传输数据变为乱码。而在11.0592MHz下,由于没有误差,问题不复存在。总结建议,12MHz单片机应限制使用2400及以下波特率,避免波特率过高引发的通信错误。
340





