找回密码
 立即注册
查看: 88|回复: 11

请教下这个模拟串口程序里面怎么改波特率

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-04-17 08:39:53

2

主题

20

回帖

72

积分

注册会员

积分
72
发表于 2026-4-16 19:08:44 | 显示全部楼层 |阅读模式
各位大师们,请教下这个模拟串口程序里面怎么改波特率,谢谢!程序是“STC15系列只用一个定时器的红外接收程序”例程里面的,默认是9600,想改为115200应该要怎么改呢?
这部分应该就是调整延时来调整波特率的吧,就是不太清这个数值是怎么计算的。




/********************** 模拟串口相关函数************************/

void        BitTime(void)        //位时间函数
{
        uint i;
        i = ((MAIN_Fosc / 100) * 104) / 140000 - 1;                //根据主时钟来计算位时间
        while(--i);
}


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-04-17 08:39:53

2

主题

20

回帖

72

积分

注册会员

积分
72
发表于 2026-4-16 19:10:08 | 显示全部楼层
只要能发送就行了,不需要接收。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-04-30 01:26:24
已绑定手机

22

主题

401

回帖

1816

积分

金牌会员

DIY玩家

积分
1816
发表于 2026-4-16 19:14:44 | 显示全部楼层
按比例调整时间
高速通信稳定性有影响
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-04-30 01:26:24
已绑定手机

22

主题

401

回帖

1816

积分

金牌会员

DIY玩家

积分
1816
发表于 2026-4-16 19:17:02 | 显示全部楼层
得看接收和发生的设备
是否支持更高的速度
有可能出现乱码
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-04-17 08:39:53

2

主题

20

回帖

72

积分

注册会员

积分
72
发表于 2026-4-16 19:20:27 | 显示全部楼层
就用USB转串口小板来接收,就是不知道这个比例怎么算啊
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-04-17 08:39:53

2

主题

20

回帖

72

积分

注册会员

积分
72
发表于 2026-4-16 19:23:03 | 显示全部楼层
调整140000这个值吗?主要是不知道怎么计算的,难道要一个个值去试?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:334
  • 最近打卡:2026-04-28 11:53:20

85

主题

7349

回帖

1万

积分

超级版主

积分
15865
发表于 2026-4-16 22:07:35 | 显示全部楼层
115200对应8.68us一个位,值需要调整BitTime(void)的时间是8.68us就可以了,这个跟主频有关,你可以简化一下:
注意要关闭全局中断,模拟串口发送不可以被打断。
void        BitTime(void)        //位时间函数
{
        u8 i;
        i = 192/3 - 2;      //主时钟=22.1184MHz, 8.68*22.1184=192
//        i = 208/3 - 2;      //主时钟=24MHz, 8.68*24=208
        while(--i);
   //  NOP(2);              //根据实际情况添加NOP来精确调整位时间
}
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-04-17 08:39:53

2

主题

20

回帖

72

积分

注册会员

积分
72
发表于 2026-4-17 08:39:53 | 显示全部楼层
梁*** 发表于 2026-4-16 22:07
115200对应8.68us一个位,值需要调整BitTime(void)的时间是8.68us就可以了,这个跟主频有关,你可以简化一 ...

其它昨晚我按比例修改数值后已经可以用了,但是晶振要上到33.1776M才比较稳定没有乱码,我有空再试下这个,谢谢!
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:145
  • 最近打卡:2026-04-29 09:41:40

31

主题

1266

回帖

4796

积分

超级版主

积分
4796
发表于 2026-4-17 10:00:01 | 显示全部楼层
i = ((MAIN_Fosc / 100) * 104) / 140000 - 1;  
等价于下面的语句
i = MAIN_Fosc / 9600 / 14 - 1;

如果需要将波特率改为115200,这条语句可以改为
i = MAIN_Fosc / 115200 / 14 - 1;  


需要注意:软件延时产生的波特率,波特率越高,误差越大,可能需要微调
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-04-17 08:39:53

2

主题

20

回帖

72

积分

注册会员

积分
72
发表于 2026-4-17 10:46:46 | 显示全部楼层
zh*** 发表于 2026-4-17 10:00
i = ((MAIN_Fosc / 100) * 104) / 140000 - 1;  
等价于下面的语句
i = MAIN_Fosc / 9600 / 14 - 1;

谢谢版主的回复,就是还有一点不明白,这个14-1这个数是怎么来的,代表什么呢?

点评

“/14” 应该是while(--i);这条语句的执行周期数 (我没有实际的去数反汇编语句) “-1”是微调,减去当前的赋值语句,应该没有太大必要,软件模拟就不可能精确到1个时钟  详情 回复 发表于 2026-4-18 22:29
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-1 10:30 , Processed in 0.126360 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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