關於單片機位數的思考(8位、16位、32位)


8位、16位、32位是指單片機的“字長”,也就是一次運算中參與運算的數據長度,這個位是指二進制位。以8位為例,8位二進制的表達范圍是0000,0000~1111,1111即十進制的0~255,即每次參與運算的數據最大不能超過255。而16位機的字長是16位,其數據表達范圍是0~65535,即每次參與運算的數據最大不能超過65535;32位單片機的字長是32位,其數據表達范圍是0~4294967295,即每次參與運算的數據最大不能超過4294967295。

8位、16位、32位與單片機的性能密切相關,通常32位機的性能要高於16位機,而16位機的性能又要高於8位機。為什么會這樣呢?這要從2個方面來分析。第一,位數不同,運算效率不同。對於8位機而言,由於在一次運算中的每一個數都不能超過8位,因此即便如100+200=300這樣的運算,它也不能一次完成,因為300已超過了8位所能表達的最大范圍(255),因此,要對這樣的一個式子進行運算,就要編寫一段程序,將運算分步完成,最后合成起來得到一個正確的結果。而如果采用16位單片機來運算的話,那么一次運算就夠了,顯然分步完成所需要的時間要遠遠大於單步完成所需要的時間。同樣道理,當某個運算的結果或者中間值大於65535時,16位機也不能一次運算,要分步實現它,而32位機則可以一次運算完成。第二,商業因素。通常運算能力越高,表示這個單片機性能越強,當然,價格高一些人們也可以接受,有了價格空間,生產商通常都會在這些芯片中提供更多的其他的功能,使得芯片的整體性能得到更大的提升。

典型的單片機中,80C51系列,PIC系列,AVR系列都是8位單片機;80C196、MSP430系列是16位機;而目前非常熱門的ARM系列則是32位機。

 

另外在CSDN的討論中的一些比較好的回答:
=================================
8位單片機,典型的是51系列的,再高級點用AVR、pic的,功能方面,似乎都不會很復雜,一般可能是控制類的多一下。一般不跑嵌入式OS。
16位的單片機,我接觸的主要是MSP430,感覺16位的單片機比較尷尬,高不成低不就,要求低一點,8位MCU就夠,高級點不如用32位MCU。一般不跑嵌入式OS。16位就不說了
32位的,就高級點了,一般能跑嵌入式OS,例如ucos2,ucos3,uclinux等等,能做更多復雜的功能。用OS和不用OS的話,編程的思路差異比較大。功能一般有面向控制的,也有簡單消費類電子的。
================================
8位16位32位的區別就在於地址位和數據位位寬不同。其實都一樣。比如8位的51單片,網上同樣有人在上面移植ucos。16位的如430就更不用說了。32位的目前大多數是arm架構的,與前面的8位、16位的指令集不同。除掉前面的boot會用一小段匯編(主要是來clear寄存器,初使化堆棧--有些書上也叫棧)其它大多用C.只要用對應架構和平台的編譯器就可以了。故而作為一個c的RD,不需要考慮太多。
=================================
都玩過,單純C寫代碼沒啥區別,一般編譯器把初始化都做了,需要改的不多。匯編或者調試的時候會有區別,指令集不一樣,寄存器也會有點差異(尤其是跟匯編的時候),參數傳遞時會有差異(因編譯器而異),8位51單片機是(R0-R7),32位ARM是R0-R15(PC),然后就是int類型,8/16位通常是16bit,32位下是32bit(最蛋疼的是64位下int還是32bit)
=================================
學嵌入式的網友,接觸到的 32 位機往往是 ARM 內核的,運行 Linux。

但實際上,32 位的微處理器遠不止這一類。有些就是增強版本的微處理器,例如 M*Core 內核的微處理器。

32 位機的功能模塊寄存器可以是 32-bit 的(當然也可以是 8-/16-bit),而且存取都是單時鍾周期。CPU 的算邏單元也是 32 位的,當然,運算會更快。

32 位機的一個重要注意事項是 32-bit 字的自然邊界問題,也就是字對齊問題。例如,要從 RAM 中將一個 32-bit 的字寫入一個 32-bit 寄存器,那么,這個字在 RAM 中的地址必須是 32-bit 對齊的,也就是說地址最低十六進制位是 0, 4, 8, c。如果不是這樣(比如數據類型是 char,又恰好其起始地址未 4 字節對齊),需要先將此字復制到一個 32-bit 對齊的緩存,再賦值。

還有一個比較麻煩的事,就是用戶定義的結構中各個成員的對齊。如果在一個 32-bit 類型的成員前面,有 char 及 short 類型成員,且沒有湊齊到 32-bit 自然邊界,那么編譯器將會自動補 NULL 來填充。有不少從 8 位向 32 位機移植代碼的朋友,都在取成員長度的時候發生疑惑。問題往往是出在 32-bit 對齊上。

在有就是不同編譯器的規約差異。

不過,用過兩種微處理器之后,就會漸漸熟悉起來,相互移植也不會有很大困難。

=============================

數據總線的寬度為8、16、32。同時寄存器也達到相同位數。
============================
多少位寬不是指總線寬度,也不是存儲器的寬度,像51單片機的地址總線是16位的,但是它是8位機。像ARM的存儲器也有八位的,但是它是32位機。而是指CPU處理的數據的寬度,也就是CPU一次數據的吞吐量。比如同一條指令:MOV R0 R2
在51單片機里面,R0和R2都是8位的,所以51的CPU一次只能處理8位數據。
在ARM里面,R0和R2是32位的,所以ARM的CPU一次能處理32位數據。這就是區別

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM