<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MCS-51單片機(jī)底層工作原理分析2——總線結(jié)構(gòu)

          MCS-51單片機(jī)底層工作原理分析2——總線結(jié)構(gòu)

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          了解了單片機(jī)內(nèi)部的大致工作原理之后,我們或許對單片機(jī)如何讀取指令代碼和數(shù)據(jù)的過程存在一定的疑問,這就是總線系統(tǒng)。51單片機(jī)內(nèi)部有三大塊總線系統(tǒng)AB,CB,DB即地址總線,控制總線和數(shù)據(jù)總線。51系統(tǒng)式的存儲(chǔ)形式是采用普林斯頓結(jié)構(gòu)(馮·諾依曼結(jié)構(gòu))的,即數(shù)據(jù)和代碼存放在重疊地址通過不同的控制總線控制不懂的物理存儲(chǔ)位置讀寫。馮·諾依曼結(jié)構(gòu)代碼和數(shù)據(jù)是公用數(shù)據(jù)和地址端口的所以在執(zhí)行程序的時(shí)候必須先讀取指令,然后再讀取數(shù)據(jù)這相對于哈弗結(jié)構(gòu)來說,在一定程度上限制了程序的執(zhí)行速度。借助下圖可以適當(dāng)說明一下馮諾依曼結(jié)構(gòu)程序和數(shù)據(jù)的存儲(chǔ)方式。外部ROM和RAM都是通過P2和P0作為地址輸出,P0作為數(shù)據(jù)或者代碼輸入。通過CB開控制是讀取代碼,還是讀寫RAM。由于很多資源是公用的所以在執(zhí)行速度上會(huì)受到一定的限制。


          馮諾依曼結(jié)構(gòu)圖

          本文引用地址:http://www.ex-cimer.com/article/201611/321409.htm

          這里值得注意的是,上圖是馮諾依曼的結(jié)構(gòu)圖,也是51單片機(jī)典型的外部存儲(chǔ)器(包括程序存儲(chǔ)器ROM和數(shù)據(jù)存儲(chǔ)器RAM)擴(kuò)展電路。擴(kuò)展程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器唯一不同點(diǎn)是通過CB(Control BUS控制總線)控制時(shí)序的不同實(shí)現(xiàn)對不同存儲(chǔ)器的操作。P0口為了滿足地址/數(shù)據(jù)總線復(fù)用的功能,其內(nèi)部具有和其他端口不同的結(jié)構(gòu)。P0在作為地址輸出時(shí)是具有‘0’,‘1’輸出的,而且驅(qū)動(dòng)能力比較強(qiáng),在作為數(shù)據(jù)讀入的時(shí)候是呈現(xiàn)高阻態(tài)的。

          對于哈佛結(jié)構(gòu)程序指令和數(shù)據(jù)指令分開組織和存儲(chǔ)的,執(zhí)行時(shí)可以預(yù)先讀取下一條指令。在最簡單的只有一級(jí)流水線的執(zhí)行條件下,程序在讀取本條指令的時(shí)候可以同時(shí)預(yù)取下調(diào)指令的數(shù)據(jù),這樣在執(zhí)行速度會(huì)有一定的提高。

          哈佛結(jié)構(gòu)圖



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();