為什麼單片機的晶振會有 11.0592MHz 這個數字?


可以被準確分頻成各種通信常用的波特率 11.0592MHz = 192*57600 = 384*28800 = 576*19200 = 1152*9600

update:

@肖孝雲 : 很好的思路,但是這是什麼因果關係?那為什麼不能先是有個12M的頻率,然後分頻成其他的波特率呢?

答: 因為美國工業電子聯盟(Electronic Industries Alliance,EIA) RS-232-C標準中規定了數據傳輸速率為: 50、75、100、150、300、600、1200、2400、4800、9600、19200、38400

如果繼續問為什麼它要這麼制定, 這個我就不確定了, 據Google是因為

由電信線路特性決定的

電話線路的帶通是300--3KHz,當時HAYES先搞的modem,所以用的2400HZ信號,對應波特率是2400。由於基本頻率確定了,以後採用的提高通訊速率的方法都是在2400基礎上倍頻的,所以形成了9600,19200。。。。

當然, 實際原因就是大家通用標準都一樣了, 慢慢淘汰下來非主流的, 就是這樣了, 其實很多行業都是這樣, 為什麼要這麼做, 或許有一定的理由, 但追根究底還是歷史慣性, 大家都這麼做了, 更改起來沒有必要而且成本太大, 所以就一直延續了, 比如鍵盤的qwerty布局, 220v等等

另外12m不如11.0592M好分頻


上面說的有些複雜,本人沒有不敬的意思,說一下我在書上看的吧。

標準的51單片機晶振是1.2M-12M,一般由於一個機器周期是12個時鐘周期,所以先12M時,一個機器周期是1US,好計算,而且速度相對是最高的(當然現在也有更高頻率的單片機)。

11.0592M是因為在進行通信時,12M頻率進行串列通信不容易實現標準的波特率,比如9600,4800,而11.0592M計算時正好可以得到,因此在有通信介面的單片機中,一般選11.0592M


樓上說的大體上都是對的:

這麼奇葩的頻率目的是————分頻,產生通信用的同步信號

(同步信號的頻率,就是那個波特率)

但是為什麼是11.0592而不是12?

原因是——12分不出整數的波特率,或者說常用的整數波特率。

我放上教材一頁,一看就懂:

12MHZ分出來的那幾個頻率,是有誤差的

至於為什麼是那幾個頻率,參見@郭昊的答案。


謝邀,但是發現已經沒什麼好答的了。上面已經有人回答的很詳細了。


有 11.0592MHz 晶振的原因確實如其他人回答的那樣。但至於這個頻率是否真的方便了編程,我個人覺得是幫大家養成了一些編程的不良習慣

首先,串口速率的一點誤差有多大影響呢?答:沒有影響。單片機常用的 3 線(GND, TX, RX)串口是非同步的,非同步代表誤差是沒有累積的,所以一點點的誤差不會有任何影響。

第二,有人會說,如果用其它頻率的晶振,計算得到的結果會不整。我想問,難道你們在設置寄存器的時候真的是拿計算器先計算出需要的值,再硬編碼到源代碼中的嗎?難道沒聽說過魔數?

#define CRYSTAL_FREQUENCE 8888 /* Mhz */
#define BAUD_RATE 9600
/* 寄存器 0 的值 */
#define REGISTER0 CRYSTAL_FREQUENCE + - * / BAUD_RATE
/* 寄存器 1(如果有的話) 的值 */
#define REGISTER1 CRYSTAL_FREQUENCE + - * / BAUD_RATE

如果使用上面的方法的話,晶振頻率是多少都沒有關係。

還有就是,除了在古老的 51 單片機上我見過用 11.0592 M 這個頻率的,在其他比如 AVR 或者 Cortex-M 系列, 我見過用得最多的一般是 8 MHz。

setbaud.h Source File 這是來自 Savannah 的 AVR Libc 中設置波特率的頭文件,很實用,考慮十分周全,當然也有點複雜,可供參考。


119 請教:在歐洲國家(西班牙和葡萄牙)能使用11.0592Mhz 的產品 嗎 ? 如果能使用,是否合法?


我之前看過一個說法是工藝的原因


已經有人說了,串列通訊波特率相關。還有一個時鐘晶振32.768KHz也是為了分頻方便。32.768KHz的15分頻就是1Hz。


通常晶振表面都會有數字,這些數字一般都是晶振的頻率。


推薦閱讀:

電風扇的搖頭與扇葉轉動是什麼關係?
PCB布線時,1oz銅厚,1mm線寬可以通過1A電流的說法是怎麼來的?依據是什麼?科學么?
電調的原理是什麼,如何diy一個電調?
如何自學altium designer?
汽車行業里,電子模塊的硬體設計流程是怎樣的?

TAG:電子 | 單片機 | 晶元集成電路 |