找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8327|回复: 5
收起左侧

单片机UART串口通信问题 波特率4800时ok,9600错误

[复制链接]
ID:470728 发表于 2019-2-8 12:41 | 显示全部楼层 |阅读模式
12M的晶振,为什么波特率为4800的时候正常,为9600的时候就发回来错误呢,求大佬解答

/*波特率为9600*/
#include "reg52.h"                        

typedef unsigned int u16;        
typedef unsigned char u8;



void UsartInit()
{
        SCON=0X50;               
        TMOD=0X20;                        
        TH1=0XFD;               
        TL1=0XFD;
        ES=1;                                                
        EA=1;                                                
        TR1=1;                                       
}


void main()
{        
        UsartInit();
        while(1)
        {
               
        }               
}


void Usart() interrupt 4
{
        u8 receiveData;

        receiveData=SBUF;
        
        RI = 0;
        SBUF=receiveData;
        while(!TI);                        
        TI=0;                                                
}

/*波特率为4800的时候,设置波特率加倍*/


#include "reg52.h"               

typedef unsigned int u16;        
typedef unsigned char u8;

void UsartInit()
{
        SCON=0X50;               
        TMOD=0X20;               
        PCON=0X80;               
        TH1=0XF3;               
        TL1=0XF3;
        ES=1;                                
        EA=1;                                
        TR1=1;                        
}

void main()
{        
        UsartInit()
        while(1)
        {
               
        }               
}


void Usart() interrupt 4
{
        u8 receiveData;

        receiveData=SBUF;
                RI = 0
        SBUF=receiveData
        while(!TI);               
        TI=0;                                       
}

QQ图片20190208123640.png
1.png
回复

使用道具 举报

ID:213173 发表于 2019-2-9 08:03 | 显示全部楼层
使用12M的晶振,波特率不要超过4800,否则误差会很大,不能正常通讯。建议使用11.0592MHz的晶振。
回复

使用道具 举报

ID:432823 发表于 2019-2-9 08:33 | 显示全部楼层
晶振12MHZ,波特率9600时误差为8.51%,4800时误差为6.99%,一般超过7%时通讯质量较差,可改用晶振11.0592MHz,通讯波特率可达115200以上质量也很好。
回复

使用道具 举报

ID:401113 发表于 2019-2-9 15:42 | 显示全部楼层
唉!你的波特率有问题。12Mhz的晶振把T作为波特率发生器,按照波特率计算公式不能整除,很难计算出合理的波特率。
但是天无绝人之路,8052内核的单片机有T2寄存器,它的溢出率计算公式为:晶振频率除以【2乘(65536-RCAP2H RCAP2L)],波特率计算公式为:2的SMOD的次方除以T2溢出率;
我把你的程序改了改:
void UsartInit()
{
        SCON=0X50;               
        T2CON=0X34;//设置T2为波特率发生装置               
        PCON=0X80;               
        RCAP2H=(65536-39)/256;               
        RCAP2L=(65536-39)%256;
        ES=1;                                
        EA=1;                                                      
}
对于T2寄存器的详细信息你可以去单片机的查器件手册。希望这些对你有帮助

评分

参与人数 2黑币 +15 收起 理由
madnick16 + 10 大哥太强了,谢谢谢
还有谁? + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:164602 发表于 2019-2-9 21:04 | 显示全部楼层
看看这个就知道了:
1.jpg

1.jpg

12M晶振下,不论加不加倍,误差都很大
1.jpg

12M晶振下,4800波特率,不加倍时,误差也是很大的
1.jpg

12M晶振下,4800波特率,加倍时,误差就小了
你自己或以试的,2400波特率下,加倍或不加倍,误差都一样,可以正常使用。
回复

使用道具 举报

ID:401113 发表于 2019-2-10 18:49 | 显示全部楼层
HC6800-ES-V2.0 发表于 2019-2-9 21:04
看看这个就知道了:

咳咳,用这个必须是STC公司的单片机吧,而且还要包含STC公司自己的头文件(STC-ISP软件里有)。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表