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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 第三節(jié) 趣講51單片機之P1P2P3口深入講解

          第三節(jié) 趣講51單片機之P1P2P3口深入講解

          作者: 時間:2016-11-19 來源:網(wǎng)絡(luò) 收藏

          一、P1口

          P1口是4組Parallel Ports中最簡單的。其結(jié)構(gòu)圖如下:

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



          與P0口的區(qū)別是:由于沒有端口復(fù)用功能,所以,P0口的V1變成了一個上拉電阻。

          由于內(nèi)部就有上拉電阻,所以,作為GPIO時,P1口不需要接上拉電阻,當然,您接了也沒關(guān)系啦,就相當于兩個上拉電阻并聯(lián)嘛。

          讀端口、讀引腳、寫功能在P0中已經(jīng)講得非常詳細了,此處略個一萬字。

          二、P2口

          P2口的原理圖如下圖:



          咋一看,和P0口有點像,都有控制信號,選擇作為“地址/數(shù)據(jù)”總線還是作為GPIO;又和P0口有些不同,P2口沒有推挽式輸出的結(jié)構(gòu),即沒有V1 MOS管。

          我們說過,P0在作為“地址/數(shù)據(jù)”總線時,之所以會被稱為雙向口而非準雙向口,就是因為推挽式結(jié)構(gòu)的存在,那么,難道P2口不需要成為雙向口?

          的確如此,其實,上圖中說的“地址/數(shù)據(jù)”線的說法不太準確,因為,P2口在進行外部存儲器讀寫時,只是作為地址線的高8位,按理來講,應(yīng)該稱為“地址高8位”線。

          當控制信號為0時,與P1口完全一樣,當控制信號為1時,與P0口的分析一致,而且更簡單。此處不再重復(fù)說明。

          三、P3口

          P3口為多功能口,其結(jié)構(gòu)如下圖所示:

          先羅列一下P3口的第二功能:

          P3.0:RXD 串行通信數(shù)據(jù)接收引腳

          P3.1:TXD 串行通信數(shù)據(jù)發(fā)送引腳

          P3.2:/INT0 外部中斷0輸入引腳

          P3.3:/INT1 外部中斷1輸入引腳

          P3.4:T0 定時/計數(shù)器0外部事件計數(shù)輸入引腳

          P3.5:T1 定時/計數(shù)器1 外部事件計數(shù)輸入引腳

          P3.6:/WR 外部數(shù)據(jù)存儲單元寫選通信

          P3.7:/RD 外部數(shù)據(jù)存儲單元讀選信號

          當P3口作為第二功能使用時,Q始終為1,此時,引腳與第二功能輸出端的電平相同。

          那是使用第一功能還是第二功能是誰來控制的呢?還是指令集的微構(gòu)架,比如你通過串口指令向外傳送數(shù)據(jù),P3.1自動選擇第二功能,您就不用操心了。

          作為GPIO的情況和P1完全相同,此處不再贅述。



          關(guān)鍵詞: 51單片機P1P2P3

          評論


          技術(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); })();