導航:首頁 > 操作系統 > 單片機fdh

單片機fdh

發布時間:2025-03-10 13:56:17

A. 在知道單片機振盪頻率和波特率的情況下如何計算計數初值

這涉及到很多個知識點,我們一步一步來推導。

首先單片機的種類是很多的,不同單片機類型的時鍾樹結構和UART配置方式各有差異。這里我們只討論教學中較常用的51單片機。假定使用11.0592MHz外部晶體諧振器,需要獲得19200波特率。

經典51單片機是12分頻的,1個機器周期=12個振盪周期,所以內部的工作頻率實際是11.0592MHz÷12 = 921.6kHz。

經典51單片機的UART如果工作在模式1或模式3下,波特率由定時器1的溢出時間決定,並且還會經過16分頻(SMOD=1)或32分頻(SMOD=0)。921600÷19200 = 48,48無法被32整除、只能被16整除得到3,因此必須設置SMOD=1。

定時器1的工作方式是向上累加,溢出時產生重載。因此重載初值為 100h - 3h = FDh。

B. 51單片機波特率如何設置啊

串列口的四種工作方式對應三種波特率。由於輸入的移位時鍾的來源不同,所以,各種方式的波特率計算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =((2^SMOD)/64)• fosc
方式1的波特率 =((2^SMOD)/32)•(T1溢出率)
方式3的波特率 =((2^SMOD)/32)•(T1溢出率)
注意:SMOD為PCON寄存器的最高位(即PCOM<7>)。
T1 溢出率 = fosc /{12×[256 -(TH1)]} --將該公式代人方式1或3
最後推出公式:TH1=256-(fosc*2^SMOD)/(baudrate*12*32);
呵呵
如果你用方式2(波特率 =((2^SMOD)/64)• fosc )的話
12M的晶振就不能得到9600波特率了(除非你改變你的晶振,但是那樣的晶振好像沒有賣) 所以你只能選擇方式1或3
而且12M的晶振在串口傳輸時會有誤差,就如你上面算的那樣結果會有小數點
TH1又只能是整數的 所以傳輸時會有誤差.
參考:
#include<reg51.h>
#define baudrate 9600UL
#define fosc 11059200UL//其中,UL是不能省略的,代表長整型。
unsigned char a,flag;
void serial_init(void)
{ unsigned char S_MOD=1;
TMOD=0x20;//T1工作在方式2
SCON=0x50;//SM0=0 SM1=1->串口通信在模式1,
//SM2=0->多級通信中使用的位,REN=1;
PCON=0;
if((PCON&0x80)==0x80) S_MOD=2;
TH1=256-(fosc*S_MOD)/(baudrate*12*32);//其中SMOD=0,
TL1=256-(fosc*S_MOD)/(baudrate*12*32);
TR1=1;ES=1;EA=1;
}

閱讀全文

與單片機fdh相關的資料

熱點內容
用單片機測車距 瀏覽:394
去哪裡找加密的便簽 瀏覽:19
武漢訂酒店旅館哪個app平台好 瀏覽:114
c語言在線編譯器位元組流 瀏覽:317
帶隊伍pdf 瀏覽:951
電腦如何形成伺服器 瀏覽:522
javaprint換行 瀏覽:785
華為手機壓縮文件夾怎麼操作 瀏覽:99
c語言垃圾堆這個文件夾可以刪嗎 瀏覽:758
websocketssl加密 瀏覽:924
系統類演算法 瀏覽:657
ai演算法血檢t細胞衰老 瀏覽:473
如何查看文件夾是否安裝過程 瀏覽:195
編譯原理畫出下面的狀態轉換圖 瀏覽:40
倩女幽魂什麼伺服器比較火 瀏覽:466
內江市程序員招聘 瀏覽:466
程序員老師身份 瀏覽:52
手機生兼職app的哪個比較靠譜 瀏覽:569
lua編譯有什麼用 瀏覽:352
買了伺服器如何架設 瀏覽:931