fosc:晶振頻率
baud rate:波特率
timer overflow rate:定時器溢位率
smod:雙倍波特率位(為1時:波特率翻倍;為0時:波特率不翻倍)(該位在pcon暫存器中)
假定我們用定時器1,將其設定為模式2(回憶一下:模式二特點是8位自動重灌)
定時時間 =(最大計數值 - 計數器初值)* 機器週期
=(最大計數值 - 計數器初值)(12 / fosc)
=(256 - th1)*(12 / fosc)----(時間單位都是s,頻率單位都是hz)
結果解釋:為什麼是256-th1:首先明確:由於我們是模式2,是8位自動重灌,8位轉換成十進位制最高就是256;那麼我們假定th1為0xf0,256-th1結果為16,這能說明:我們定時的時間為16個機器週期,在晶振為12m的情況下,1個機器週期位1us,我們這個定時器就是16us
故溢位頻率 = 1 / 定時時間
= fosc /((256-th1)*12)。
波特率 = (2smod/32)*(溢位頻率)
附上初值公式: th1 = 256 - fosc * 2smod)/ (32*波特率*12)
注意:2smod的關係為指數,即2指數倍smod(雙倍波特率位:功能介紹在前)
波特率的計算公式有了,我們就可以根據波特率推導出th1初值:
假設晶振頻率為11.0592mhz,我們需要波特率為9600bit / s,smod(波特率倍增位)= 0,th1初值應該為多少呢?根據上面公式可以計算得:th1 = 256 - 11059200 / (9600*32*12)= 256 - 3 = 0xff - 0x03 = 0xfd(千萬別算成0xfc!)
(為什麼要把晶振頻率設成這樣乙個奇怪的數:目的是:算出來的波特率為整數:因為波特率代表每秒傳輸的資料0或1的數量,如果波特率為小數,那就很麻煩了,想想我們能傳輸半個資料嗎?當然最好是不要是吧!)
好了,以上就是本期文章的全部內容,非常感謝看到最後的你,如果這篇文章對你有幫助的話,求讚求賞求**!您的支援將會是我寫文章的最大動力!
微控制器串列埠通訊波特率計算
在模式0和模式2下,串列埠波特率固定,模式0為fosc 12。模式2為fosc 32或fosc 64,具體由pcon暫存器的smod位決定。在模式1和模式3下,波特率是乙個可變值,波特率可以由定時器1產生 8052可以由定時2產生 那麼波特率到底為多少呢?波特率由定時器1的溢位率來決定 baud r...
關於串列埠通訊波特率的幾點思考
首先想說,12mhz真的是有問題。我使用的是 stc89c52rc的微控制器,他的最小系統板的的晶振是12mhz,但是這個開發板上買的晶振就沒寫頻率!我一直以為這是預設的11.0592mhz,因為之前用的最小系統板都是這個頻率。在沒有使用串列埠通訊的時候,不管是11.0592m還是12m,都對程式的...
imx6 配置串列埠波特率 PLC串列埠通訊除錯過程
串列埠通訊是一種簡單的通訊方式,通過連線少量線纜即可完成資料通訊。做串列埠通訊除錯,一般需要進行如下幾個過程 1 確認上位機通訊 2 確認下位機通訊 3 上 下位機聯調通訊。上位機是指plc,下位機是指進行串列埠通訊除錯的器件 硬體 usb rs232串列埠電纜 plc 膝上型電腦 若電腦自帶串列埠...