找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2283|回复: 7
收起左侧

单片机波特率设置的9600,但只有在串口波特率配置4800时才能收到数据

[复制链接]
ID:986652 发表于 2021-12-2 10:57 | 显示全部楼层 |阅读模式
波特率设置的9600,但只有在串口波特率配置4800时才能收到数据,不知道为什么,附源代码,我单片机用的是STC15W4K56S4
void UART_init(void)
{                  
        // 下面代码设置定时器2
        T2H  = 0xFD;        // 波特率:9600
        T2L  = 0xC0;        // 波特率:9600
        AUXR = 0x15;    // 0001 0101,T2R=1启动T2运行,T2x12=1,定时器2按1T计数,S1ST2=1
        // 下面代码设置定串口1
        SCON = 0x50;         // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允许接收)
        // 下面代码设置中断
        ES   = 1;                // 开串口1中断
        EA   = 1;                // 开总中断
}


回复

使用道具 举报

ID:624769 发表于 2021-12-2 13:14 | 显示全部楼层
波特率不是独立存在的,牵涉的时钟频率, 你用11.0592的时钟,波特率自然只有4800了……
回复

使用道具 举报

ID:986652 发表于 2021-12-2 13:23 | 显示全部楼层
188610329 发表于 2021-12-2 13:14
波特率不是独立存在的,牵涉的时钟频率, 你用11.0592的时钟,波特率自然只有4800了……

谢谢回复,我想请问这个是怎么计算的呢,我不知道我算的对不对,我把T2H改成0XFA波特率也不对,也不是9600,如果我想要9600的波特率该怎么做呢,盼望解答,非常感谢!
回复

使用道具 举报

ID:624769 发表于 2021-12-2 13:52 | 显示全部楼层
如果,你的晶振频率 是: 11.0592  你要 9600 波特率
则:
        T2L = 0xE0;                //设置定时初始值
        T2H = 0xFE;                //设置定时初始值

回复

使用道具 举报

ID:734017 发表于 2021-12-2 13:55 | 显示全部楼层
791310 发表于 2021-12-2 13:23
谢谢回复,我想请问这个是怎么计算的呢,我不知道我算的对不对,我把T2H改成0XFA波特率也不对,也不是960 ...

51hei截图_20211202135306.png 系统频率是分频后的时钟。

回复

使用道具 举报

ID:986652 发表于 2021-12-2 14:03 | 显示全部楼层
happy2058 发表于 2021-12-2 13:55
系统频率是分频后的时钟。

明白了,真的是太感谢了!
回复

使用道具 举报

ID:991930 发表于 2021-12-13 21:23 | 显示全部楼层
stc-isp里有波特率计算器,输入单片机型号,波特率什么的就可以自动生成代码
回复

使用道具 举报

ID:397211 发表于 2021-12-13 22:06 | 显示全部楼层
有一个绿色软件叫单片机小精灵,波特率啊延时啊定时器啊什么的都可以计算到
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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