<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MCS-51單片機底層工作原理分析1

MCS-51單片機底層工作原理分析1

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò ) 收藏
在大學(xué)學(xué)了2年的單片機,差不多也用了兩年的單片機了,但是對其內部細致的工作原來(lái)還是有點(diǎn)模糊不清(可能平時(shí)的應用可以不涉及到底層工作原理,大部分工作都讓編譯器和匯編器替我們做了,這也阻礙了我們對底層工作原理的了解?。?。一直在不知其理的狀態(tài)下開(kāi)發(fā)了這么多年,內心有很多疑問(wèn),也有一種被架空的感覺(jué)??赡芪冶容^喜歡踏實(shí),所以一直想把內部原理搞明白,這里總結了幾點(diǎn)。

首先,我們分析一下單片機(一般處理器)的大致工作原理吧。我們都學(xué)過(guò)簡(jiǎn)單的加法電路,計數電路,存儲器讀寫(xiě)電路和其它具有特定功能的時(shí)序電路,這些都是數字電路的時(shí)序電路課程中的簡(jiǎn)單的應用,我們可以把單片機理解為由這些基本時(shí)序電路組合而成的較為復雜的數字電路。在正常程序執行流程下,單片機在時(shí)鐘時(shí)序的推動(dòng)下PC自動(dòng)計數,控制器根據PC值從程序存儲器ROM中讀取程序代碼(一條指令的存儲空間有可能占用一個(gè)字節,也有可能占用兩個(gè)字節,最多占用三個(gè)字節),經(jīng)過(guò)程序代碼譯碼后可以得到具體的操作方式(如MOV操作)和操作數(如RO,R1)。

本文引用地址:http://dyxdggzs.com/article/201611/321408.htm

其次,我們理解一下指令系統。我們可以把單片機的一條指令理解為單片機支持的可執行的一個(gè)小流程,當然這個(gè)流程是需要單片機內部工藝和硬件的支持的(所以一般單片機指令系統的指令都是有限的,如51單片機支持111條指令)。我們可以理解成一個(gè)系列的單片機指令越多(當然這里指的指令都是有意義的指令),單片機運行就會(huì )越靈活越高效,當然這對單片機內部處理器硬件要求也越高,這也是制約單片機高效處理的因素之一,不過(guò)當下一些高端的單片機系列如ARM系列單片機在指令系統方面已經(jīng)非常高效。

我們都知道存儲指令是需要存儲空間的,也就是內部ROM,執行指令需要執行時(shí)間,也就是指令周期。對于51單片機中的111條指令最多占用三個(gè)字節的存儲空間,指令最大的程序執行周期是四個(gè)時(shí)鐘周期(即乘法和除法指令)。這里的存儲空間指的是匯編代碼匯編成機器碼后,機器碼占用的存儲空間。這里我們或許會(huì )思考,一條機器語(yǔ)言必須要包含足夠的信息,單片機才能夠根據指令運行程序。如MOV ACC #0xff 對于這條語(yǔ)句必須占用兩個(gè)以上字節,因為數據“0xff”占用一個(gè)字節,還需要存儲操作方式MOV和ACC兩個(gè)信息。但是如果要對一個(gè)地址如0xffff賦一個(gè)0xffff的值,那這樣理解不是要至少占用5個(gè)字節(4個(gè)字節分別存儲操作地址和操作數,1個(gè)字節存儲操作方式)??赡艽髱焸円幌驴闯隽藛?wèn)題所在,不過(guò)當初我就是有這么思考過(guò)。結合51指令系統根本沒(méi)有直接進(jìn)行將一個(gè)16位數賦值給一個(gè)16位地址的指令(我承認當時(shí)我想多了),這需要由很多指令組合完成操作,那內部存儲方式也就是很多指令一起的存儲方式了(可能遠不止5個(gè)字節)。這也是指令系統的微妙之處,他既要考慮存儲空間,也要考慮執行周期,同時(shí)還要考慮指令功能的全面性。

在51系列單片機中指令中一個(gè)周期是可以同時(shí)讀取兩個(gè)字節的代碼,這相對一個(gè)周期讀取一個(gè)字節的方式來(lái)說(shuō)一定程度上也減少了雙字節指令的執行周期。由于讀取三字節的指令至少占用兩個(gè)周期,所以三字節指令執行周期必須是兩個(gè)周期及以上。

















以上是各個(gè)指令對應的匯編指令碼,機器碼和機器執行周期,有助于理解指令的細節。

對于指令系統中不同指令是有不同的尋址方式的,這是單片機內部對數據處理的一套機制,任何其他操作都是建立在這套機制之上的。所以對指令系統的理解有助于對單片機內部的細節工作過(guò)程的理解和運用。



關(guān)鍵詞: MCS-51單片機底

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>