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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于單片機P0口的片外數(shù)據(jù)存儲器擴展

          基于單片機P0口的片外數(shù)據(jù)存儲器擴展

          作者: 時間:2010-04-26 來源:網(wǎng)絡 收藏


          3.2 的軟件實例分析
          分析對軟件設計可知,通過P1口讀、寫片外存儲單元時,軟件設計具有重要作用。下面通過一實例介紹訪問片外數(shù)據(jù)存儲單元的過程。
          以下程序段首先是將片外000000H單元中的內(nèi)容讀到片內(nèi)存儲器30H單元中,然后再將片內(nèi)存儲器30H單元中的內(nèi)容寫到片外存儲器077FFFH單元中。在程序中,首先將片內(nèi)存儲單元20H、21H和22H定義為地址信息存儲單元,20H是高8位地址信息存儲單元,僅低3位有效;21H是中8位地址信息存儲單元,低7位有效;22H是低8位地址信息存儲單元,8位全有效。所以,其尋址空間為000000H~007FFFH、010000H~017FFFH、020000H~027FFFH、030000H~037FFFH、040000H~047FFFH、050000H~057FFFH、060OOOH~067FFFH和070000H~077FFFH,共256 KB。MOVR和MOVW分別讀、寫子程序。


          從程序中分析可知,能夠僅用口及其他幾個很少的控制端口便可實現(xiàn)片外大容量數(shù)據(jù)存儲器的,主要是因為PO口具備地址線、數(shù)據(jù)線及片選擇控制線的功能,而這一功能是通過軟件方式實現(xiàn)的,即分時傳送地址信息,數(shù)據(jù)信息和控制信息。從MOVR和MOVW 2個子程序可以看出數(shù)據(jù)的具體傳送過程。此外,在編程過程中,每次讀、寫外部存儲器內(nèi)容時,只要將地址信息寫到DPHH、DPTRH和DPTRL3個單元中,然后調(diào)用子程序MOVR和MOVW便可實現(xiàn)對片外數(shù)據(jù)存儲器的讀、寫操作。

          4 結(jié)論
          介紹MCS-8051片外256 KB數(shù)據(jù)存儲器的擴展方法,其特點主要是擴展的存儲空間大,占用的端口少,數(shù)據(jù)傳送采用并行傳送方式。在外圍設備較多的情況下,有限的端口無法滿足要求,或是存儲空間難以滿足要求時,完全可采用該擴展方法。此外,如果將單片機與數(shù)據(jù)存儲器件的硬件連接部分稍作改動,便可直接訪問片外256 KB,2種訪問方式可完全獨立。如果256 KB的存儲空間還不能滿足實際需求,不妨將高位地址存儲單元的8位全部進行譯碼??傻玫?56個片選擇控制端口,那么原來的8片數(shù)據(jù)存儲器便可增加到256片。這樣,片外存儲空間就可以達到8 MB。完全滿足需求。而且,按此原理,還可以將原來的3個地址存儲單元改為4個地址存儲單元或更多,以增加其存儲空間。但這樣其讀、寫周期也將更長。因此需根據(jù)實際情況,綜合考慮,最終使單片機的硬件與軟件達到最優(yōu)化。

          霍爾傳感器相關(guān)文章:霍爾傳感器工作原理


          電度表相關(guān)文章:電度表原理


          霍爾傳感器相關(guān)文章:霍爾傳感器原理

          上一頁 1 2 下一頁

          評論


          相關(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); })();