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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430普通I/0口模擬IIC總線

          MSP430普通I/0口模擬IIC總線

          作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          #include "main.h"

          #define SLAVE_ADDRESS 0x04
          #define SLAVE_WRITE_ADDRESS (SLAVE_ADDRESS<<1)|0x00
          #define SLAVE_READ_ADDRESS (SLAVE_ADDRESS<<1)|0x01

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

          #define I2C_SDABIT3
          #define I2C_SCLBIT4
          #define I2C_PORT_INP6IN
          #define I2C_PORT_OUTP6OUT
          #define I2C_PORT_DIRP6DIR

          #define SDA_IN(I2C_PORT_IN & I2C_SDA)
          #define SCL_IN(I2C_PORT_IN & I2C_SCL)
          #define S_SDAI2C_PORT_DIR &= ~I2C_SDA
          #define C_SDAI2C_PORT_DIR |= I2C_SDA;I2C_PORT_OUT &= ~I2C_SDA
          #define S_SCLI2C_PORT_DIR &= ~I2C_SCL
          #define C_SCLI2C_PORT_DIR |= I2C_SCL;I2C_PORT_OUT &= ~I2C_SCL

          void I2C_init(void)
          {
          I2C_PORT_DIR &= ~(I2C_SDA|I2C_SCL);
          I2C_PORT_OUT |= (I2C_SDA|I2C_SCL);
          }

          void I2C_DELAY(void)
          {
          asm("nop");asm("nop");
          asm("nop");asm("nop");
          asm("nop");asm("nop");
          asm("nop");asm("nop");
          }

          void I2C_Start(void)
          {
          S_SDA;
          S_SCL;
          I2C_DELAY();
          C_SDA;
          I2C_DELAY();
          C_SCL;
          }

          void I2C_Stop(void)
          {
          C_SDA;
          I2C_DELAY();
          S_SCL;
          I2C_DELAY();
          S_SDA;
          I2C_DELAY();
          }

          void I2C_Send_Ack(void)
          {
          C_SDA;
          I2C_DELAY();
          S_SCL;
          I2C_DELAY();
          C_SCL;
          I2C_DELAY();
          }

          void I2C_Send_NoAck(void)
          {
          S_SDA;
          I2C_DELAY();
          S_SCL;
          I2C_DELAY();
          C_SCL;
          I2C_DELAY();
          }


          void I2C_Read_Ack(void)
          {
          unsigned char i = 0;
          S_SCL;
          S_SDA;
          I2C_DELAY();
          for(i=0; i<100; i++)
          {
          if(SDA_IN == 0)
          {
          I2C_DELAY(); break;
          }
          I2C_DELAY();
          }
          C_SCL;
          I2C_DELAY();
          }

          void I2C_WriteByte(unsigned char one_byte)
          {
          unsigned char i = 0;
          S_SDA;
          for (i=0; i<8; i++)
          {
          if (one_byte&0x80)
          {
          S_SDA;
          }
          else
          {
          C_SDA;
          }
          one_byte<<=1;
          I2C_DELAY();
          S_SCL;
          I2C_DELAY();
          C_SCL;
          I2C_DELAY();
          }
          }

          unsigned char I2C_ReadByte(void)
          {
          unsigned char read_byte=0;
          unsigned char i = 0;
          S_SDA;
          //C_SCL;
          I2C_DELAY();
          for (i=0; i<8; i++)
          {
          S_SCL;
          I2C_DELAY();
          read_byte<<=1;
          if (SDA_IN != 0)
          {
          read_byte |= 0x01;
          }
          //I2C_DELAY;
          C_SCL;
          I2C_DELAY();
          }
          return read_byte;
          }


          void I2C_write_Nbyte(unsigned char *pbuf, unsigned char cnt)
          {
          unsigned char i = 0;
          I2C_Start();
          I2C_WriteByte(SLAVE_WRITE_ADDRESS);
          I2C_Read_Ack();
          for (i=0; i {
          I2C_DELAY();I2C_DELAY();
          I2C_WriteByte(*pbuf);
          pbuf++;
          I2C_Read_Ack();
          }
          I2C_Stop();
          }

          void I2C_read_Nbyte(unsigned char *pbuf, unsigned char cnt)
          {
          unsigned char i = 0;
          I2C_Start();
          I2C_WriteByte(SLAVE_READ_ADDRESS);
          I2C_Read_Ack();
          for (i=1; i {
          I2C_DELAY();I2C_DELAY();
          *pbuf = I2C_ReadByte();
          pbuf++;
          I2C_Send_Ack();
          }
          *pbuf = I2C_ReadByte();
          I2C_Stop();
          }



          關(guān)鍵詞: MSP430普通I0口模擬IIC總

          評論


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