找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2482|回复: 4
打印 上一主题 下一主题
收起左侧

关于STC15单片机自动波特率

[复制链接]
跳转到指定楼层
楼主
ID:910171 发表于 2021-4-26 18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚开始学习C51单片机,用STC进行实验,现在想用CH340C芯片和STC15W204S单片机diy一个免冷启动的自动下载器。

拟用STC15W204S单片机检测STC-ISP软件点击下载时候发出的0x7F串,检测到足够数量的0x7F后,单片机输出控制信号,用MOS管切断下载器后面单片机的供电。

由于STC-ISP软件是可以设置不同的最低波特率的,为了让这个下载器能够自适应各种波特率设置值,到网上搜索了各种波特率自适应方案的源码,找到其中一段如下:
  1. void AutoUartBaud()                //这个是变化的串口参数
  2. {
  3.         ES=0;//关串口中断
  4.         switch(RSjishu)
  5.         {
  6.                 case 0:
  7.             T2L = 0x00;                //设定定时初值//1200bps@22.1184MHz
  8.             T2H = 0xEE;                //设定定时初值
  9.            break;
  10.                 case 1:
  11.                         T2L = 0x00;                //设定定时初值//2400bps@22.1184MHz
  12.                         T2H = 0xF7;                //设定定时初值
  13.                  break;
  14.                 case 2:        
  15.                         T2L = 0x80;                //设定定时初值//4800bps@22.1184MHz
  16.                         T2H = 0xFB;                //设定定时初值
  17.                  break;
  18.                 case 3:        
  19.                         T2L = 0xC0;                //设定定时初值//9600bps@22.1184MHz
  20.                         T2H = 0xFD;                //设定定时初值
  21.                  break;        
  22.                 case 4:
  23.                   T2L = 0x80;                //设定定时初值//14400bps@22.1184MHz
  24.             T2H = 0xFE;                //设定定时初值
  25.                   break;
  26.     case 5:
  27.                         T2L = 0xE0;                //设定定时初值//19200bps@22.1184MHz
  28.                         T2H = 0xFE;                //设定定时初值
  29.                  break;
  30.                 case 6:        
  31.                   T2L = 0x40;                //设定定时初值//28800bps@22.1184MHz
  32.             T2H = 0xFF;                //设定定时初值
  33.                   break;
  34.                 case 7:        
  35.                         T2L = 0x70;                //设定定时初值//38400bps@22.1184MHz
  36.                         T2H = 0xFF;                //设定定时初值
  37.                  break;
  38.                 case 8:        
  39.                         T2L = 0xA0;                //设定定时初值//57600bps@22.1184MHz
  40.                         T2H = 0xFF;                //设定定时初值
  41.                  break;
  42.                 case 9:        
  43.                         T2L = 0xD0;                //设定定时初值//115200bps@22.1184MHz
  44.                         T2H = 0xFF;                //设定定时初值
  45.                 break;
  46. }
  47. RSjishu++;
  48. if(RSjishu>9)RSjishu=0;
  49. delay(20);
  50. ES=1;//开中断
  51. }
复制代码
原程序作者说这程序是采用每0.1S改变一下串口的波特率,然后检查是否有7F的值,如有就停止改变波特率。我没看懂它是怎么检查有没有7F值的,然后怎么停下来不再改变波特率的,莫非是通过这个RSjishu变量来间接实现的?
初学者,可能问题比较菜,请各位老师赐教。这只是我摘取的一段程序,原程序功能比较多,我没有摘全。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2021-4-28 11:21 | 只看该作者
你是如何确定就在这个函数里的呢 ?
回复

使用道具 举报

板凳
ID:910171 发表于 2021-4-28 11:34 | 只看该作者
man1234567 发表于 2021-4-28 11:21
你是如何确定就在这个函数里的呢 ?

程序里面,别处都是按键处理、电压测量、数码管显示等,除了串口初始化程序之外,就只有这一段是在改变T2定时器初值改变波特率了。
回复

使用道具 举报

地板
ID:390416 发表于 2021-4-28 12:49 | 只看该作者
用不着这么麻烦 CH340 硬件就可以实现自动下载 我发的贴子有图纸 已经1000多人使用了 很稳定
回复

使用道具 举报

5#
ID:584814 发表于 2021-4-29 19:45 | 只看该作者
Fireflying 发表于 2021-4-28 11:34
程序里面,别处都是按键处理、电压测量、数码管显示等,除了串口初始化程序之外,就只有这一段是在改变T2 ...

从你贴出来的看,这个函数根据 RSjishu (疑似RS计数)来选择定时器初值,这个值从 0 到 9 不断循环。
但改变后的波特率是否合适的判断没有相关函数的影子,仅有这个函数就只能是玩具了。
至于还有说有CH340不用麻烦的说法就搞笑了,本坛上的钟一个比一个丑不如某一个宝花更低的价钱买个更好看的而且都是量产稳定好评过万连图纸都不需要呵呵呵

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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