欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7374|回復: 13
打印 上一主題 下一主題
收起左側

C51或C52單片機的波特率怎么設置,以500K為例?

  [復制鏈接]
回帖獎勵 40 黑幣 回復本帖可獲得 2 黑幣獎勵! 每人限 1 次(中獎概率 90%)
跳轉到指定樓層
樓主
本帖最后由 123fanfanfan 于 2020-6-15 15:47 編輯

我要通過串口發送數據,下邊的2400波特率是怎么設置的。如果改成500K程序該怎么寫
void Init_UART  (void)
{
    SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD  = 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
    TH1   = 0xF3;               // TH1:  重裝值 2400 波特率 晶振 12MHz  
    TR1   = 1;                  // TR1:  timer 1 打開                        
    EA    = 1;                  //打開總中斷
   // ES    = 1;                  //打開串口中斷
}

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

使用道具 舉報

沙發
ID:768770 發表于 2020-6-16 08:31 | 只看該作者
51單片機波特率計算的公式和方法51單片機芯片的串口可以工作在幾個不同的工作模式下,其工作
模式的設置就是使用SCON寄存器。它的各個位的具體定義如下: SMOSM1SM2RENTB8RB8TIRIS
M0、SM1為串行口工作模式設置位,這樣兩位可以對應進行四種模式的設置。串行口工作模式設
置。波特率在使用串口做通訊時,-個很重要的參數就是波特率,只有上下位機的波特率一樣時才可
以進行正常通訊。波特率是指串行端口每秒內可以傳輸的波特位數。這里所指的波特率,如標準960
0不是每秒種可以傳送9600個字節,而是指每秒可以傳送9600個二進位,而一個字節要8個二進位,
如用串口模式1來傳輸那么加上起始位和停止位,每個數據字節就要占用10個二進位,9600波特率
用模式1傳輸時,每秒傳輸的字節數是9600+ 10= 960字節。51芯片的串口工作模式0的波特率是固
定的,為fosc/12,以一個12M的晶振來計算,那么它的波特率可以達到1M。模式2的波特率是固定
在fosc/64或fosc/32,具體用那一種就取決于PCON寄存器中的SMOD位,如SMOD為0,波特率focs/64,SMOD為1,波特率為focs/32。模式1和模式3的波特率是可變的,取決于定時器1或2 (52芯片)的溢出速率,就是說定時器1每溢出一-次,串口發送一次數據。 那么我們怎么去計算這兩個模式的波特率設置時相關的寄存器的值呢?可以用以下的公式去計算。上式中如設置 了PCON寄存器中的SMOD
回復

使用道具 舉報

板凳
ID:491577 發表于 2020-6-16 10:20 | 只看該作者
到STC網站下載:stc-isp-15xx-v6.87E.exe,里面有相關程序。直接復制粘貼就好。
回復

使用道具 舉報

地板
ID:426861 發表于 2020-6-16 11:29 | 只看該作者
有軟件可用的

捕獲.PNG (93.05 KB, 下載次數: 61)

捕獲.PNG
回復

使用道具 舉報

5#
ID:780879 發表于 2020-6-16 12:04 | 只看該作者
51單片機波特率計算的公式和方法51單片機芯片的串口可以工作在幾個不同的工作模式下,其工作 模式的設置就是使用SCON寄存器。它的各個位的具體定義如下: SMOSM1SM2RENTB8RB8TIRIS M0、SM1為串行口工作模式設置位,這樣兩位可以對應進行四種模式的設置。串行口工作模式設 置。波特率在使用串口做通訊時,-個很重要的參數就是波特率,只有上下位機的波特率一樣時才可 以進行正常通訊。波特率是指串行端口每秒內可以傳輸的波特位數。這里所指的波特率,如標準960 0不是每秒種可以傳送9600個字節,而是指每秒可以傳送9600個二進位,而一個字節要8個二進位, 如用串口模式1來傳輸那么加上起始位和停止位,每個數據字節就要占用10個二進位,9600波特率 用模式1傳輸時,每秒傳輸的字節數是9600+ 10= 960字節。51芯片的串口工作模式0的波特率是固 定的,為fosc/12,以一個12M的晶振來計算,那么它的波特率可以達到1M。模式2的波特率是固定 在fosc/64或fosc/32,具體用那一種就取決于PCON寄存器中的SMOD位,如SMOD為0,波特率focs/64,SMOD為1,波特率為focs/32。模式1和模式3的波特率是可變的,取決于定時器1或2 (52芯片)的溢出速率,就是說定時器1每溢出一-次,串口發送一次數據。 那么我們怎么去計算這兩個模式的波特率設置時相關的寄存器的值呢?可以用以下的公式去計算。上式中如設置 了PCON寄存器中的SMOD
回復

使用道具 舉報

6#
ID:24758 發表于 2020-6-16 13:13 | 只看該作者
建議看看串口的工作原理,最好知道為什么那么去設置定時器T1的初值。

有個公式:

你把晶振頻率,SMOD 和需要的波特率待入到上面公式計算,得到的X就是定時器T1的初始值。

另外:在串行通信中,晶振最好選11.0592MHz的,這樣可以減小誤差。

你給的程序中,用的是12MHz的晶振,初始值是F3,產生的波特率是2404,而非2400。而用11.0592MHz的晶振算出來的值是F4。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:123289 發表于 2020-6-16 15:47 | 只看該作者
看來你不知道串行的CLK是什么,取自何處,去查一下書吧,對你理解這個問題有好處。
回復

使用道具 舉報

8#
ID:779648 發表于 2020-6-17 13:46 | 只看該作者
得先看你晶振了,舉例:
1:晶振為11.0592Mhz
我們知道T1可以作為波特率發生器,也知道波特率計算公式(方式1、3):2的SMOD的次方除以32再乘T1溢出率(晶振頻率除以12乘(256-TH1));
即:波特率=(2的SMOD次方/32)X晶振頻率/[12x(256-TH1)]

我們可以輕松的算出TH1和TL1內的值,列如:
計算9600bps ,設SMOD=1;

9600bps=(2/32)X[11059200/12X(256-TH1)]
算得(256-TH1)=6,則TH1=250 (0XFA);

計算波特率為9600、串口工作方式為方式1的程序:
void init_serial()
{
     TMOD=0X20;//設置T1工作方式為8位自動重裝
     SCON=0X50;//設置串口工作方式為10位異步收發器
     PCON=0X80;//SMOD置為1
     TH1=(256-6);//6的由來[(11059200/12)/16]/9600 (9600為所求波特率)
     TL1=(256-6);
     EA=1;//開總中斷
     ES=1;//開串口中斷
     TR1=1;//啟動T1
}
2:晶振為12Mhz
如果我們繼續將T1作為波特率發生器,那么計算的公式也沒變化。
列如:
波特率為2400,SMOD=1;
2400bps=(2/32)X[12000000/12X(256-TH1)]
算得(256-TH1)=26.041666,是個無限循環小數,如果取26帶進公式里算,波特率四舍五入后是2404,誤差不是很大。
void init_serial()
{
    TMOD=0X20;//設置T1工作方式為8位自動重裝
    SCON=0X50;//設置串口工作方式為10位異步收發器
    PCON=0X80;//SMOD置為1
    TH1=(256-26);
    TL1=(256-26);
    EA=1;//開總中斷
    ES=1;//開串口中斷
    TR1=1;//啟動T1
}



如果4800bps,SMOD=1;
4800bps=(2/32)X[12000000/12X(256-TH1)]

算得(256-TH1)=13.0208333,也是個無限循環小數,取13,算出波特率約為4808,誤差也不大。

void init_serial()
{
    TMOD=0X20;//設置T1工作方式為8位自動重裝
    SCON=0X50;//設置串口工作方式為10位異步收發器
    PCON=0X80;//SMOD置為1
    TH1=(256-13);
    TL1=(256-13);
    EA=1;//開放總中斷
    ES=1;//開放串口中斷
    TR1=1;//啟動T1
}
回復

使用道具 舉報

9#
無效樓層,該帖已經被刪除
10#
ID:519089 發表于 2020-6-30 13:59 | 只看該作者
到不了500K,,超過單片機允許范圍了
回復

使用道具 舉報

11#
ID:636538 發表于 2020-7-2 09:17 | 只看該作者
單片機愛好者223 發表于 2020-6-30 13:59
到不了500K,,超過單片機允許范圍了

這個500K是什么意思,1s500K字節
回復

使用道具 舉報

12#
ID:699464 發表于 2020-7-3 11:01 | 只看該作者
感覺串口到不了500K,RS232應該是跑不了那么大的,其他沒了解過
回復

使用道具 舉報

13#
無效樓層,該帖已經被刪除
14#
ID:633896 發表于 2020-7-7 11:24 | 只看該作者
我們教的比較淺。

123123.png (842.31 KB, 下載次數: 44)

123123.png
回復

使用道具 舉報

15#
ID:519089 發表于 2021-7-14 19:13 | 只看該作者
SKYLAR123 發表于 2020-7-2 09:17
這個500K是什么意思,1s500K字節

1秒500K bit 位
回復

使用道具 舉報

16#
ID:81196 發表于 2021-7-15 13:52 | 只看該作者
void init_serial(u32 baud)
{
     TMOD=0X20;//設置T1工作方式為8位自動重裝
     SCON=0X50;//設置串口工作方式為10位異步收發器
     PCON=0X80;//SMOD置為1
     TH1=(256-6);//6的由來[(11059200/12)/16]/baud (baud為所求波特率)
     TL1=(256-6);
     EA=1;//開總中斷
     ES=1;//開串口中斷
     TR1=1;//啟動T1
}
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

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