单片机串口通讯在12MHz下的问题

单片机串口通讯在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;

单片机串口通讯在12MHz下的问题_第1张图片
通过软件计算此时误差为0.16%,这是的我还没有意识到问题的严重单片机串口通讯在12MHz下的问题_第2张图片
然而当我把波特率调到4800时一切都变了:

   TMOD=0x20;
   TH1=0xF9;
   TL1=0xF9;
   SCON=0X50;
   PCON=0X00;
   TR1=1;
   ES=1;
   EA=1;

此时的误差率达到了7%!!!在这样的误差下所传输的都变成了乱码!!!
单片机串口通讯在12MHz下的问题_第3张图片
单片机串口通讯在12MHz下的问题_第4张图片
而这种问题在11.0592MHz下根本不会出现,原因很简单就是没有误差。
单片机串口通讯在12MHz下的问题_第5张图片
总结:单片机在12MHz晶振下,只能使用2400及以下波特率,不能使用4800及以上,否则会误差太大产生乱码。

以上就是单片机在12MHz下的一个值得注意的问题,问题不大,但如果不知道对初学者来说确实一时想不明白。

ps:对于以上波特率计算、虚拟串口的辅助软件可以在评论区留下邮箱,我会私发。
ok,多谢看完。

你可能感兴趣的:(51,单片机,串口通信)