![]() |
發(fā)布時間: 2019-2-8 12:41
正文摘要:12M的晶振,為什么波特率為4800的時候正常,為9600的時候就發(fā)回來錯誤呢,求大佬解答 /*波特率為9600*/ #include "reg52.h"   ... |
HC6800-ES-V2.0 發(fā)表于 2019-2-9 21:04 咳咳,用這個必須是STC公司的單片機吧,而且還要包含STC公司自己的頭文件(STC-ISP軟件里有)。 |
看看這個就知道了:![]() ![]() 12M晶振下,不論加不加倍,誤差都很大 ![]() 12M晶振下,4800波特率,不加倍時,誤差也是很大的 ![]() 12M晶振下,4800波特率,加倍時,誤差就小了 你自己或以試的,2400波特率下,加倍或不加倍,誤差都一樣,可以正常使用。 |
唉!你的波特率有問題。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 | 收起 理由 |
---|---|---|
![]() | + 10 | 大哥太強了,謝謝謝 |
![]() | + 5 | 回帖助人的獎勵! |
晶振12MHZ,波特率9600時誤差為8.51%,4800時誤差為6.99%,一般超過7%時通訊質(zhì)量較差,可改用晶振11.0592MHz,通訊波特率可達115200以上質(zhì)量也很好。 |
使用12M的晶振,波特率不要超過4800,否則誤差會很大,不能正常通訊。建議使用11.0592MHz的晶振。 |
Powered by 單片機教程網(wǎng)