單片機有很多種,AVR、PIC、MC6805系列等,他們的體系結構不盡相同,指令集也各異,有些是CISC,有些是RISC,51單片機的指令集采用的是CISC。
51單片機是單片機的一種,之所以這么流行,業界贊同的原因主要有兩個:
第一:由于intel公司(開發了51單片機)一開始就開放了授權。
第二:51單片機的體系結構不難,資料很多(也良莠不齊),學的人很多。
51單片機和電腦聯系很大的(單片機某種程度上可以說是一臺袖珍電腦),我們知道電腦由運算器、控制器、存儲器(RAM)、輸入設備和輸出設備,各個部分由總線聯接起來,聯想到實際設備我們看:
我們的電腦由一下部分組成:CPU、內存、主板、硬盤、光驅、軟驅(已淘汰)、顯卡、顯示器、鍵盤和鼠標。分析一下各個設備提供的功能:
CPU提供了運算和控制功能(隨著電腦的發展和改進,獨立顯卡代替了CPU了對圖形圖像相關的數據的運算,主板芯片代替了部分原來由CPU提供的控制功能,例如DMA,內存控制器等)
內存,即RAM,提供了程序運行的空間,就是存儲器的功能。
主板,確切地說是主板芯片,把各個部件連接起來,即總線的功能,近年來代替CPU提供一部分控制功能。
硬盤、光驅、軟驅,是保存程序的地方,幾十年前電腦可能是這樣工作的:插入可啟動的帶有操作系統的軟盤(DOS、Linux等),打開電源,BIOS檢查通過后,引導操作系統,進入系統后,在shell下(人機對話界面,在DOS下叫DOS界面),可以使用軟盤里面保存的程序或者文件。后來硬盤和光驅代替了軟盤的程序存儲功能。
顯卡,確切說是獨立顯卡,代替了CPU圖形圖像相關數據的運算。
顯示器提供了輸出功能,鍵盤和鼠標提供了輸入功能。
51單片機有以下部分組成:
數據存儲器,和電腦的內存類似,提供數據存儲功能,提供程序運行的空間。
程序存儲器,和電腦的硬盤、光盤、軟盤類似,提供程序存儲的空間。
各個部分由總線聯系起來。
總線是什么?
一開始系統很簡單的時候總線不是必須的,各個部件中需要通信的雙方用導線連接在一起,舉個例子,就像打局域網,兩臺電腦想通信,直接用一根交叉的雙絞線連接就OK了,不用買交換機,但是如果另外一臺電腦想加入,那么這臺電腦必須和這兩臺電腦各自連接一根線,第四臺電腦想進來,那么得連接3根線,第五臺要連接4根線……第N臺要連接N-1根線,是不是很麻煩,當然大家不會這么做,超過2臺我們就用交換機了,總線的作用和這個有點類似。總線技術使得相互關系的部分通過這個公共通道連接起來,通過控制信號來區分不同組件間的通信。
總線分數據總線(DB)、控制總線(CB)、地址總線(AB),顧名思義各自有各自的功能。
我們從51單片機的一個指令的取、譯和執行過程來理解一下總線。假如我們現在要求計算2+3=?
;PC是指針,指向程序存儲器的某個位置。PC指向的當前地址就是正在或即將執行的指令
;假設此時PC=2000H
MOV A,#02H;PC=2000H
ADD A,#03H;PC=2002H
通電后,PC值為0000H,隨著前面指令的取、譯和執行,PC值一直改變,當PC值為2000H時,MCU通過AB找到要執行指令的位置,通過內部DB從程序存儲器取的操作碼(指令由操作碼和操作數組成)是74H(是MOV匯編后的機器碼),同時PC=PC+1=2001H,通過譯碼,發現操作碼的意思是將后面的一個字節作為操作數送進累加器A,MCU通過CB發出控制信號,把程序存儲器的下一個字節通過內部DB送進累加器A,同時PC=PC+1=2002H,第一個指令執行完畢。
另外一條指令類似,通過對操作碼的譯碼,發現操作碼的意思是將后面一個字節作為操作數與累加器A中的內容相加,輸出結果放進累加器A。于是發出控制信號,把程序存儲器下一個字節通過內部DB送到暫存器,通過MCU進行計算,得出的結果放進累加器A。執行完PC=2004H。
總線有一定的寬度,所以我們有8位機、16位機、32位等等。總線越寬,每次取數據越多,8位寬度每次只能取1個字節,16位是2個字節,越寬每次取越多,同樣時間內執行的指令越多,所以,總線寬度是衡量MCU運算能力的重要指標。51單片機的AB寬度是16位,DB寬度是8位,CB寬度是8位,因為運算能力主要和DB寬度有關,所以我們以DB寬度來區分不同的MCU。
評論
查看更多