⑴ 51單片機串列口工作在方式0,如何求波特率,及定時器初值!
方式0的波特率是系統時鍾的十二分之一,為固定波特率,與定時器無關
定時器計算: 溢出中斷的定時器 指令周期是 系統時鍾的十二分之一 ,16方式
fosc=11.0592M
fcyc=11059200/12 , 定時時間 tmer ms
TH=(65535-timer*1000/fcyc)/256
TL=(65535-timer*1000/fcyc)%256
⑵ 51單片機定時計數器溢出率計算和串口的波特率之間的關系
串口工作在方式1和3,則波特率由定時器T1的溢出率來決定,關系如下:
波特率 = ((2^SMOD)/32)*T1溢出率,
這里T1溢出率 = fosc/[12×(28-X)],則:
波特率=((2^SMOD)/32)×fosc/[12×(28-X)]
2^SMOD是2的SMOD次方,SMOD是波特率是否要加倍的控制位,默認是0,
fosc就是晶振的值,
X就是裝入TH1的值。
⑶ 51單片機波特率計算的原理。
你就記住51的振盪器進入串列模塊以後有一個可選的16/32分頻(默認32分頻)就好了。
不想死記硬背,就找51各個功能模塊的內部框圖好好看懂。
⑷ 已經51單片機的晶振頻率是12MHZ 要產生4800BPS的波特率 問波特率的計算公式 還有 計算 TH1 TL1的初始值
串列口的四種工作方式對應三種波特率。由於輸入的移位時鍾的來源不同,所以,各種方式的波特率計算公式也不相同。
方式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;
}
⑸ 51單片機串口波特率計算器
波特率和晶振頻率及時間常數的關系如下:
BAUND_RATE=FOSC/32*12*(256-TH)
FOSC=晶振頻率,TH=初值
⑹ 如何計算單片機的波特率
51的波特率計算根據它的串列口的工作方式 不同,而有不同的演算法。
1.方式 0
振盪頻率/12 的固定波特率
2.方式 1
(2^SMOD /32) X 定時器1的溢出率
3.方式 2
(2^SMOD /64) X 振盪器頻率
式中SMOD為特殊功能寄存器 PCON的最高位的值(0或1)
你可下載一個叫作單片機小精靈 MCUtool 的小工具,方便計算波特率,軟體還有其它一些很有用功能 。
⑺ 51單片機中波特率設置計算問題
波特率應該和T1有關,和T0沒有什麼關系。
11059200是晶振頻率,baud是波特率,例如 9600
12是指時鍾周期數。
⑻ 51單片機波特率初值怎麼計算
用專門軟體算吧,象STC燒錄軟體就附帶有定時器和波特率的計算程序,何必自己按計算器呢。
⑼ 51單片機串口波特率的演算法求解
這是51單片機的硬體典型結構,串口通信使用的頻率是晶振頻率的1/32或者1/16(PCON的最高位為1),這就是32的來源。
但是這種模式下,限制了波特率的提高,因此,現在一些改進的51單片機是1/2分頻。