找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3346|回復: 4
打印 上一主題 下一主題
收起左側(cè)

關(guān)于STC15單片機自動波特率

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:910171 發(fā)表于 2021-4-26 18:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛開始學習C51單片機,用STC進行實驗,現(xiàn)在想用CH340C芯片和STC15W204S單片機diy一個免冷啟動的自動下載器。

擬用STC15W204S單片機檢測STC-ISP軟件點擊下載時候發(fā)出的0x7F串,檢測到足夠數(shù)量的0x7F后,單片機輸出控制信號,用MOS管切斷下載器后面單片機的供電。

由于STC-ISP軟件是可以設置不同的最低波特率的,為了讓這個下載器能夠自適應各種波特率設置值,到網(wǎng)上搜索了各種波特率自適應方案的源碼,找到其中一段如下:
  1. void AutoUartBaud()                //這個是變化的串口參數(shù)
  2. {
  3.         ES=0;//關(guān)串口中斷
  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變量來間接實現(xiàn)的?
初學者,可能問題比較菜,請各位老師賜教。這只是我摘取的一段程序,原程序功能比較多,我沒有摘全。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:584814 發(fā)表于 2021-4-28 11:21 | 只看該作者
你是如何確定就在這個函數(shù)里的呢 ?
回復

使用道具 舉報

板凳
ID:910171 發(fā)表于 2021-4-28 11:34 | 只看該作者
man1234567 發(fā)表于 2021-4-28 11:21
你是如何確定就在這個函數(shù)里的呢 ?

程序里面,別處都是按鍵處理、電壓測量、數(shù)碼管顯示等,除了串口初始化程序之外,就只有這一段是在改變T2定時器初值改變波特率了。
回復

使用道具 舉報

地板
ID:390416 發(fā)表于 2021-4-28 12:49 | 只看該作者
用不著這么麻煩 CH340 硬件就可以實現(xiàn)自動下載 我發(fā)的貼子有圖紙 已經(jīng)1000多人使用了 很穩(wěn)定
回復

使用道具 舉報

5#
ID:584814 發(fā)表于 2021-4-29 19:45 | 只看該作者
Fireflying 發(fā)表于 2021-4-28 11:34
程序里面,別處都是按鍵處理、電壓測量、數(shù)碼管顯示等,除了串口初始化程序之外,就只有這一段是在改變T2 ...

從你貼出來的看,這個函數(shù)根據(jù) RSjishu (疑似RS計數(shù))來選擇定時器初值,這個值從 0 到 9 不斷循環(huán)。
但改變后的波特率是否合適的判斷沒有相關(guān)函數(shù)的影子,僅有這個函數(shù)就只能是玩具了。
至于還有說有CH340不用麻煩的說法就搞笑了,本壇上的鐘一個比一個丑不如某一個寶花更低的價錢買個更好看的而且都是量產(chǎn)穩(wěn)定好評過萬連圖紙都不需要呵呵呵

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表