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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機(jī)—再論IIC—軟件通用包(匯編、c語言)—03

          51單片機(jī)—再論IIC—軟件通用包(匯編、c語言)—03

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

          //---------------------------------------------------------------
          //向器件指定地址按頁寫函數(shù)(這里雖然是說按頁,其實原理是一樣的~~,要是不明白可以看上一篇我整理的)
          //入口參數(shù)有4個:器件地址碼、器件單元地址、寫入的數(shù)據(jù)串的指針、寫入的字節(jié)個數(shù)
          //寫入成功,返回1;不成功,返回0,使用后必須結(jié)束總線
          bit mcu_send_string(uchar add,uchar rom_add,uchar *s,uchar num)
          {
          uchar i;
          IIC_start();
          send_byte(add);//發(fā)送器件地址碼
          IIC_ack_acc();
          if(ack==0)
          return(0);//有應(yīng)答,發(fā)送ROM的單元地址
          send_byte(rom_add);
          IIC_ack_acc();
          if(ack==0)
          return(0);
          for(i=0;i //連續(xù)發(fā)送num個字節(jié)數(shù)據(jù)
          {
          send_byte(*s);
          IIC_ack_acc();
          if(ack==0)
          return(0);
          s++;
          }
          IIC_stop();
          return(1);
          }

          4)從被控器件讀取n個字節(jié)數(shù)據(jù)子程序MCU_RDN_BYTE

          ;--------------------------------------------------------------------------------
          ;從器件地址讀取N個數(shù)據(jù)
          ;入口參數(shù):器件從地址,器件子地址SUBA,接收字節(jié)數(shù)NUM_BYTE
          ;出口參數(shù):接收數(shù)據(jù)緩沖區(qū)
          ;占用:A,R0,R1,R2,R3,CY
          MCU_RDN_BYTE:
          MOVR3,NUM_BYTE
          LCALLSTART
          MOVA,SLA
          LCALLWR_BYTE;發(fā)送器件地址
          LCALLCACK
          JNBACK,RET_RDN
          MOVA,SUBA;指定子地址
          LCALLWR_BYTE
          LCALLCACK
          LCALLSTART
          MOVA,SLA
          INCA;準(zhǔn)備進(jìn)行讀操作
          LCALLWR_BYTE
          LCALLCACK
          JNBACK,MCU_RDN_BYTE
          MOVR1,#MRD
          RDN1:
          LCALLRD_BYTE;讀操作開始
          MOV@R1,A
          DJNZR3,SACK
          LCALLMNACK;最后一個字節(jié)發(fā)非應(yīng)答位
          RET_RDN:
          LCALLSTOP
          RET
          SACK:
          LCALLMACK;發(fā)送應(yīng)答位
          INCR1
          SJMPRDN1

          //-------------------------------------------------------------------------------
          //從器件指定地址讀多個字節(jié)
          //入口參數(shù)有4個:器件地址碼、器件單元地址、讀出的數(shù)據(jù)串、讀出的字節(jié)個數(shù),寫入成功返回1,不成功返回0
          bit mcu_rec_string(uchar add,uchar rom_add,uchar *s,uchar num)
          {
          uchar i;
          IIC_start();
          send_byte(add); //發(fā)送器件的地址碼,這里最低位為0,寫
          IIC_ack_acc();
          if(ack==0)
          return(0);
          send_byte(rom_add);//發(fā)送器件的單元地址
          IIC_ack_acc();
          if(ack==0)
          return(0);
          IIC_start(); //重新發(fā)送開始信號,開始讀取數(shù)據(jù)
          send_byte(add+1);//發(fā)送器件的地址碼,這里最后一位為1,讀
          IIC_ack_acc();
          if(ack==0)
          return(0);
          for(i=0;i{
          *s=rec_byte();
          IIC_ack_send(0); //送應(yīng)答信號
          s++;
          }
          *s=rec_byte();
          IIC_ack_send(1); //送非應(yīng)答信號
          IIC_stop();
          return(1);

          }

          總算是好了~~呵呵,哦了,整理好了~~要是哪里不對~~我就shit了



          上一頁 1 2 3 4 下一頁

          關(guān)鍵詞: 51單片機(jī)IIC軟件通用

          評論


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