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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機的P0口工作原理詳細講解

          51單片機的P0口工作原理詳細講解

          作者: 時間:2013-07-15 來源:網(wǎng)絡 收藏

          2、作為地址/數(shù)據(jù)復用口使用時的

          在訪問外部存儲器時口作為地址/數(shù)據(jù)復用口使用。

          這時多路開關‘控制’信號為‘1’,‘與門’解鎖,‘與門’輸出信號電平由“地址/數(shù)據(jù)”線信號決定;多路開關與反相器的輸出端相連,地址信號經(jīng)“地址/數(shù)據(jù)”線→反相器→V2場效應管柵極→V2漏極輸出。

          例如:控制信號為1,地址信號為“0”時,與門輸出低電平,V1管截止;反相器輸出高電平,V2管導通,輸出引腳的地址信號為低電平。請看下圖(蘭色字體為電平):

          反之,控制信號為“1”、地址信號為“1”,“與門”輸出為高電平,V1管導通;反相器輸出低電平,V2管截止,輸出引腳的地址信號為高電平。請看下圖(蘭色字體為電平):

          可見,在輸出“地址/數(shù)據(jù)”信息時,V1、V2管是交替導通的,負載能力很強,可以直接與外設存儲器相連,無須增加總線驅(qū)動器。

          口又作為數(shù)據(jù)總線使用。在訪問外部程序存儲器時,口輸出低8位地址信息后,將變?yōu)閿?shù)據(jù)總線,以便讀指令碼(輸入)。

          在取指令期間,“控制”信號為“0”,V1管截止,多路開關也跟著轉(zhuǎn)向鎖存器反相輸出端Q非;CPU自動將0FFH(11111111,即向D鎖存器寫入一個高電平‘1’)寫入P0口鎖存器,使V2管截止,在讀引腳信號控制下,通過讀引腳三態(tài)門電路將指令碼讀到內(nèi)部總線。請看下圖

          如果該指令是輸出數(shù)據(jù),如MOVX @DPTR,A(將累加器的內(nèi)容通過P0口數(shù)據(jù)總線傳送到外部RAM中),則多路開關“控制”信號為‘1’,“與門”解鎖,與輸出地址信號的流程類似,數(shù)據(jù)據(jù)由“地址/數(shù)據(jù)”線→反相器→V2場效應管柵極→V2漏極輸出。

          如果該指令是輸入數(shù)據(jù)(讀外部數(shù)據(jù)存儲器或程序存儲器),如MOVX A,@DPTR(將外部RAM某一存儲單元內(nèi)容通過P0口數(shù)據(jù)總線輸入到累加器A中),則輸入的數(shù)據(jù)仍通過讀引腳三態(tài)緩沖器到內(nèi)部總線,其過程類似于上圖中的讀取指令碼流程圖。

          通過以上的分析可以看出,當P0作為地址/數(shù)據(jù)總線使用時,在讀指令碼或輸入數(shù)據(jù)前,CPU自動向P0口鎖存器寫入0FFH,破壞了P0口原來的狀態(tài)。因此,不能再作為通用的I/O端口。大家以后在系統(tǒng)設計時務必注意,即程序中不能再含有以P0口作為操作數(shù)(包含源操作數(shù)和目的操作數(shù))的指令。

          51單片機相關文章:51單片機教程



          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();