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