在模式0和模式2下,串列埠波特率固定,模式0為fosc/12。模式2為fosc/32或fosc/64,具體由pcon暫存器的smod位決定。
在模式1和模式3下,波特率是乙個可變值,波特率可以由定時器1產生(8052可以由定時2產生),那麼波特率到底為多少呢?波特率由定時器1的溢位率來決定:
baud rate = (2smod/32)*(timer 1 overflow rate)
注意:2smod這裡的smod是指數,smod為波特率雙倍波特率位,該位在pcon暫存器中。
當使用timer 1作為波特率產生器時,通常需要將timer 1配置成8位自動重灌的工作模式下,同時還要禁止timer 1中斷,那麼timer 1的溢位率是怎樣計算的呢?溢位率即溢位的頻率,假設晶振頻率為12mhz,th1值為0xfe,則只需要兩個時鐘脈衝就會溢位,溢位的週期為2us,那麼溢位的頻率就為500khz。根據定時器一節,定時時間有如下計算公式:
定時時間=(最大計數值-計數器初值)*機器週期=(最大計數值-計數器初值)*(12/晶振頻率(hz))(s)=(256-th1)*(12/osc_freq(hz))(s)。
那麼溢位頻率自然就為:
osc_freq(hz)/((256-th1)*12)。
所以最後推到出波特率為:
(2smod/32)*(osc_freq(hz)/((256-th1)*12))。
波特率的計算公式有了,那自然就可以根據波特率推導出th1的初值了:
baud_rate=(2smod/32)*(osc_freq(hz)/((256-th1)*12))
32*12*(256-th1)=(2smod*osc_freq(hz))/baud_rate
256-th1=(2smod*osc_freq(hz))/(baud_rate*32*12)
th1=256-(2smod*osc_freq(hz))/(baud_rate*32*12)
假設晶振頻率為11.0592mhz,波特率為9600,smod=0,th1初值應該為多少呢?根據上面公式可以計算得th1=256-11059200/(9600*32*12)=0xfd。
**:
微控制器 波特率設定
在序列通訊中 收發雙方對傳送或接收的資料速率要有一定的約定,我們通過軟體對 mcs 51 序列口程式設計可約定四種工作方式。其中,方式 0和方式 2的波特率是固定的,而方式 1和方式 3的波特率是可變的,由定時器 t1的溢位率決定。序列口的四種工作方式對應著三種波特率。由於輸人的移位時鐘的 不同,所...
51微控制器的波特率
最近使用51微控制器的時候,設定串列埠的波特率,需要多種,固先記下來,晶振更改的時候可以通過excel中的改動來調整 excel在126中email的網盤中 51微控制器的波特率.et 下面列表是基於定時器2的方式2,自動重灌的方式 晶振 11.0592 11059200 波特率暫存器的值 1200...
51微控制器序列口波特率計算
方式0 這種工作方式比較特殊,與常見的微型計算機的序列口不同,它又叫 同步移位暫存器輸出方式。在這種方式下,資料從 rxd 端序列輸出或輸入,同步訊號從 txd 端輸出,波特率固定不變,為振盪率的 1 12 該方式是以 8 位資料為一幀,沒有起始位和停止位,先傳送或接收最低位。常用於序列口外接移位暫...