标题: 单片机波特率设置的9600,但只有在串口波特率配置4800时才能收到数据 [打印本页]

作者: 791310    时间: 2021-12-2 10:57
标题: 单片机波特率设置的9600,但只有在串口波特率配置4800时才能收到数据
波特率设置的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;                // 开总中断
}



作者: 188610329    时间: 2021-12-2 13:14
波特率不是独立存在的,牵涉的时钟频率, 你用11.0592的时钟,波特率自然只有4800了……
作者: 791310    时间: 2021-12-2 13:23
188610329 发表于 2021-12-2 13:14
波特率不是独立存在的,牵涉的时钟频率, 你用11.0592的时钟,波特率自然只有4800了……

谢谢回复,我想请问这个是怎么计算的呢,我不知道我算的对不对,我把T2H改成0XFA波特率也不对,也不是9600,如果我想要9600的波特率该怎么做呢,盼望解答,非常感谢!
作者: 188610329    时间: 2021-12-2 13:52
如果,你的晶振频率 是: 11.0592  你要 9600 波特率
则:
        T2L = 0xE0;                //设置定时初始值
        T2H = 0xFE;                //设置定时初始值


作者: happy2058    时间: 2021-12-2 13:55
791310 发表于 2021-12-2 13:23
谢谢回复,我想请问这个是怎么计算的呢,我不知道我算的对不对,我把T2H改成0XFA波特率也不对,也不是960 ...

系统频率是分频后的时钟。


作者: 791310    时间: 2021-12-2 14:03
happy2058 发表于 2021-12-2 13:55
系统频率是分频后的时钟。

明白了,真的是太感谢了!
作者: adelaidee    时间: 2021-12-13 21:23
stc-isp里有波特率计算器,输入单片机型号,波特率什么的就可以自动生成代码
作者: 保持微笑    时间: 2021-12-13 22:06
有一个绿色软件叫单片机小精灵,波特率啊延时啊定时器啊什么的都可以计算到




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1