|
各位高手:
麻煩賜教下:
1. 51單片機(jī)波特率公式中TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率,16是因為它一個字節(jié)要采集16次檢測,但是為什么還要去除以2呢。。。求解!
2. 把波特率提高一倍,TH1 = TL1 = 256 - 晶振值/12 /16 /波特率——這里把波特率提升1倍,那么波特率不就變成了原來的2倍么,那這個初始值為什么不是TH1 = TL1 = 256 - 晶振值/12 /2/16 /(2*波特率)?....求解!。
教材描述內(nèi)容:
如果用定時器 2,需要配置額外的寄存器,默認(rèn)是使用定時器 1 的,我們本章內(nèi)容主要就使用定時器 T1 作為波特率發(fā)生器來講解,方式 1 下的波特率發(fā)生器必須使用定時器 T1 的模式 2,也就是自動重裝載模式,定時器的重載值計算公式為:
TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率
和波特率有關(guān)的還有一個寄存器,是一個電源管理寄存器 PCON,他的最高位可以把波特率提高一倍,也就是如果寫 PCON |= 0x80 以后,計算公式就成了:
TH1 = TL1 = 256 - 晶振值/12 /16 /波特率
公式中數(shù)字的含義這里解釋一下,256 是 8 位定時器的溢出值,也就是 TL1 的溢出值,晶振值在我們的開發(fā)板上就是 11059200,12 是說 1 個機(jī)器周期等于 12 個時鐘周期,值得關(guān)注的是這個 16,我們來重點說明。在 IO 口模擬串口通信接收數(shù)據(jù)的時候,采集的是這一位數(shù)據(jù)的中間位置,而實際上串口模塊比我們模擬的要復(fù)雜和精確一些。他采取的方式是把一位信號采集 16 次,其中第 7、8、9 次取出來,這三次中其中兩次如果是高電平,那么就認(rèn)定這一位數(shù)據(jù)是 1,如果兩次是低電平,那么就認(rèn)定這一位是 0,這樣一旦受到意外干擾讀錯一次數(shù)據(jù),也依然可以保證最終數(shù)據(jù)的正確性。
了解了串口采集模式,在這里要給大家留一個思考題!熬д裰/12/2/16/波特率”這個地方計算的時候,出現(xiàn)不能除盡,或者出現(xiàn)小數(shù)怎么辦,允許出現(xiàn)多大的偏差?把這部分理解了,也就理解了我們的晶振為何使用 11.0592M 了。
|
|