找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機UART串口通信問題 波特率4800時ok,9600錯誤

查看數(shù): 9526 | 評論數(shù): 5 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2019-2-8 12:41

正文摘要:

12M的晶振,為什么波特率為4800的時候正常,為9600的時候就發(fā)回來錯誤呢,求大佬解答 /*波特率為9600*/ #include "reg52.h"                   ...

回復(fù)

ID:401113 發(fā)表于 2019-2-10 18:49

咳咳,用這個必須是STC公司的單片機吧,而且還要包含STC公司自己的頭文件(STC-ISP軟件里有)。
ID:164602 發(fā)表于 2019-2-9 21:04
看看這個就知道了:




12M晶振下,不論加不加倍,誤差都很大


12M晶振下,4800波特率,不加倍時,誤差也是很大的


12M晶振下,4800波特率,加倍時,誤差就小了
你自己或以試的,2400波特率下,加倍或不加倍,誤差都一樣,可以正常使用。
ID:401113 發(fā)表于 2019-2-9 15:42
唉!你的波特率有問題。12Mhz的晶振把T作為波特率發(fā)生器,按照波特率計算公式不能整除,很難計算出合理的波特率。
但是天無絕人之路,8052內(nèi)核的單片機有T2寄存器,它的溢出率計算公式為:晶振頻率除以【2乘(65536-RCAP2H RCAP2L)],波特率計算公式為:2的SMOD的次方除以T2溢出率;
我把你的程序改了改:
void UsartInit()
{
        SCON=0X50;               
        T2CON=0X34;//設(shè)置T2為波特率發(fā)生裝置               
        PCON=0X80;               
        RCAP2H=(65536-39)/256;               
        RCAP2L=(65536-39)%256;
        ES=1;                                
        EA=1;                                                      
}
對于T2寄存器的詳細信息你可以去單片機的查器件手冊。希望這些對你有幫助

評分

參與人數(shù) 2黑幣 +15 收起 理由
madnick16 + 10 大哥太強了,謝謝謝
還有誰? + 5 回帖助人的獎勵!

查看全部評分

ID:432823 發(fā)表于 2019-2-9 08:33
晶振12MHZ,波特率9600時誤差為8.51%,4800時誤差為6.99%,一般超過7%時通訊質(zhì)量較差,可改用晶振11.0592MHz,通訊波特率可達115200以上質(zhì)量也很好。
ID:213173 發(fā)表于 2019-2-9 08:03
使用12M的晶振,波特率不要超過4800,否則誤差會很大,不能正常通訊。建議使用11.0592MHz的晶振。

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

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

快速回復(fù) 返回頂部 返回列表