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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機io擴展程序設計

          單片機io擴展程序設計

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

          下面介紹兩種的方法
          !!!!用8243擴展IO接口
          /*------------------------------------------------------------------------------------------------
          函數(shù)名稱:Config.h
          功能描述:配置
          輸入?yún)?shù):無
          輸出參數(shù):無
          特殊說明:在不同的應用系統(tǒng)中,需要做相應調整
          //----------------------------------------------------------------------------------------*/
          #include reg52.h>
          sbit ContrBit0=P1^0;
          sbit ContrBit1=P1^1;
          sbit ContrBit2=P1^2;
          sbit ContrBit3=P1^3;
          sbit PROG =P1^4;
          sbit CS =P1^5;
          sfr data_buf=0x90;


          /*------------------------------------------------------------------------------------------------
          函數(shù)名稱:driver8243
          功能描述:驅動8243
          輸入?yún)?shù):sele_P端口選擇,sele_M工作模式選擇,out_data輸出模式下的輸出數(shù)據(jù)
          輸出參數(shù):in_data接收模式返回接收到的數(shù)據(jù),其它模式返回0
          特殊說明:在不同的單片機應用系統(tǒng)中,需要做相應得調整
          //----------------------------------------------------------------------------------------------------------------*/
          #includeconfig.h>
          char driver8243(char sele_P,char sele_M,char out_data)
          {
          char in_data=0;
          PROG=1; //置PROG為高電平
          //開始寫控制字
          if((sele_P0x01)==0) //將控制字最低位送到8243的p2.0
          {
          ContrBit0=0;
          }
          else
          {
          ContrBit0=1;
          }
          if((sele_P0x02)==0) //將控制字第二位送到8243的p2.1
          {
          ContrBit1=0;
          }
          else
          {
          ContrBit1=1; //以上兩位共同指定端口地址
          }
          //寫端口工作模式控制字

          if((sele_M0x01)==0) //將端口工作模式控制字低位送到8243的p2.2
          {
          ContrBit2=0;
          }
          else
          {
          ContrBit2=1;
          }

          if((sele_M0x01)==0) //將端口工作模式控制字高位送到8243的p2.3
          {
          ContrBit3=0;
          }
          else
          {
          ContrBit3=1;
          } //寫控制字完成

          PROG=0; //在PROG上產生下降沿
          switch(sele_M0x03) //判斷工作模式
          {
          case 0: break; //sele_M=B00為輸入,不處理,等待上升沿
          case 1: data_buf=out_data;break; //sele_M=B01為輸出,直接送數(shù)據(jù)
          case 2: data_buf=out_data;break; //sele_M=B10為邏輯或,直接送數(shù)據(jù)
          case 3: data_buf=out_data;break; //sele_M=B11為邏輯與,直接送數(shù)據(jù)
          }

          PROG=1; //在PROG上產生上升沿
          if((sele_M0x03)==0) //sele_M=B00為輸入,接收數(shù)據(jù)
          in_data=(data_buf0x0F);
          return(in_data); //sele_M=B00,返回接收到的數(shù)據(jù)
          //sele_M!=B00,返回0
          }

          void main( void)
          {
          char receive_data;
          receive_data= driver8243(1,0,5);
          }

          單片機方法2:
          =======================單片機中IO口擴展IC===================================


          單片機中IO口數(shù)量非常有限,做一些少量的外圍控制還可以,如果系統(tǒng)稍大一些就要加外加芯片來擴展IO數(shù)量,在應用過程

          中我發(fā)現(xiàn)PCF8574 這款芯片非常理想具有8路的輸入輸出的IO口同時具有鎖存功能,和MCU的通訊方式為I2C,還具有中斷

          輸出功能當其中一個腳拉低時,就從中斷腳輸出一個低電平來通知單片機響應,這樣MCU就可以按自己的方式工作當有外部觸

          發(fā) 時才讀取PCF8574做為外部擴展按鍵等非常方便。

          現(xiàn)在這種片子在使用中由于在使用中沒有規(guī)化好端口的輸入輸出,在具體的應用時不太符合常規(guī),大家也有所看法,所以philips最近

          又出了一款新的IO擴展芯片打算取爾代之,地址也是和PCF8574一樣它的名字叫PCA9554

          ======================================================



          評論


          相關推薦

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