您好,歡迎訪問上海意泓電子科技有限責(zé)任公司網(wǎng)站!
      4新聞資訊
      您的位置: 首頁 ->  新聞資訊 -> 單片機(jī)

      ?MSP430學(xué)習(xí)的第一個(gè)模擬I2C程序

      文章出處:?jiǎn)纹瑱C(jī) 責(zé)任編輯:上海意泓電子科技有限責(zé)任公司 發(fā)表時(shí)間:
      2018
      05-20

      #include  
      unsigned char I2CBUF;
      unsigned char checkbit;
      #define SCL_H   (P10OUT |= BIT2)      // P10.2為SCL
      #define SCL_L   (P10OUT &= ~BIT2)
      #define SDA_H   (P10OUT |= BIT1)     //p10.1為SDA
      #define SDA_L   (P10OUT &= ~BIT1)
      #define SDA_OUT  (P10DIR |= BIT1)
      #define SDA_IN  (P10DIR &= ~ BIT1)
      void I2C_Start(void)    //I2C開始信號(hào)
      {
       SDA_OUT;
       SCL_L;
       SDA_H;
       __delay_cycles(5);
       SCL_H;
       __delay_cycles(5);
       SDA_L;
       __delay_cycles(5);
       SCL_L;
       __delay_cycles(5);
      }
      unsigned char testACK(void) {
       SDA_IN;
       __delay_cycles(5);
       SCL_H;
       __delay_cycles(5);
       checkbit = (P10IN & BIT1) >> 4;
       __delay_cycles(5);
       SCL_L;
       __delay_cycles(5);
       return (checkbit);
      }
      void I2C_ACK(void)                //應(yīng)答信號(hào)
      {
       SDA_OUT;
       SCL_L;
       SDA_L;
       __delay_cycles(5);
       SCL_H;
       __delay_cycles(5);
       SCL_L;
       __delay_cycles(5);
       SDA_H;
      }
      void I2C_NACK(void) {
       SDA_OUT;
       SDA_H;
       __delay_cycles(5);
       SCL_H;
       __delay_cycles(5);
       SCL_L;
       __delay_cycles(5);
      }
      void I2C_STOP(void)             //產(chǎn)生結(jié)束信號(hào)
      {
       SCL_L;
       __delay_cycles(5);
       SDA_L;
       __delay_cycles(5);
       SCL_H;
       __delay_cycles(5);
       SDA_H;
       __delay_cycles(5);
      }
      void I2C_WRITE(unsigned char data)
      {
       SDA_OUT;
       unsigned char i;
       for (i = 8; i > 0; i--)      //高位循環(huán)8次,發(fā)送1個(gè)字節(jié)數(shù)據(jù)
          {
        if (data & 0x80)   //判斷數(shù)據(jù)高位是0還是1
           {
         SDA_H;           //高位數(shù)據(jù)寫1
        }
        else
        {
         SDA_L;
        }
        SCL_H;
        __delay_cycles(5);  //發(fā)送數(shù)據(jù)
        SCL_L;
        __delay_cycles(5);
        data <<= 1;

       }
      }
      unsigned char I2C_READ(void)
      {
       unsigned char j;
       unsigned char BUFFER = 0X00;
       SDA_IN;
       for (j = 8; j >0; j--)      //高位循環(huán)8次,發(fā)送1個(gè)字節(jié)數(shù)據(jù)
          {
        SCL_H;
        __delay_cycles(5);
        BUFFER <<= 1;
        if ((P10IN & BIT1) == BIT1)   //判斷數(shù)據(jù)高位是0還是1
        {
         BUFFER |= 0X01;         //高位數(shù)據(jù)寫1
        }
        else
        {
         BUFFER |= 0XFE;
        }
        __delay_cycles(5);  //發(fā)送數(shù)據(jù)
        SCL_L;
        __delay_cycles(5);
       }
       return BUFFER;
      }
      void C16_WRITEDATA(unsigned char address, unsigned char DATA)
      {
       I2C_Start();
       I2C_WRITE(address);
       testACK();
       I2C_ACK();
       I2C_WRITE(0x00);
       testACK();
       I2C_ACK();
       I2C_WRITE(DATA);
       I2C_STOP();
      }
      unsigned char C16_READEDATA(unsigned char address)
      {
       unsigned char READDATA;
       I2C_Start();
       I2C_WRITE(0XA1);
       testACK();
       I2C_ACK();
       I2C_WRITE(address);
       I2C_Start();
       testACK();
       I2C_ACK();
       I2C_WRITE(0XA1);
       READDATA = I2C_READ();
       I2C_STOP();
       return READDATA;
      }
      int main(void)
      {
          const int DATA = 0X88;
       unsigned char READBUFFER;
       WDTCTL = WDTPW + WDTHOLD;
       P10DIR |= BIT1 + BIT2;
       P2DIR |= BIT0;
       P2OUT &= ~BIT0;
       C16_WRITEDATA(0X00, DATA);
       __delay_cycles(5);
       READBUFFER = C16_READEDATA(0X00);
       while (1)
       {
        if (READBUFFER == 0X88)
        {
         P2OUT |= BIT0;
        } else {
         P2OUT &= ~ BIT0;
        }
        __delay_cycles(15);
       }
      }


      上海意泓電子科技有限責(zé)任公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像

      CopyRight 2020-2025 m.topsschool.com All rights reserved   滬ICP備2021005866號(hào)

      亚洲精品无码va人在线观看,少妇 逼小 水多,国产区免费av,国产精品无码观看

          在线精品不卡中文字幕人妻| 成人精品一区| av国产精品毛片一区二区小说| 国产 无码 成人免费| 国产呦交精品免费视频| 免费国产午夜电影视频| 91久久国产精品| 免费 无码 国产在线观看观12| 久久综合88熟人妻| 亚洲精品久久久久中文第一幕| 国产精品日韩无码APP| 人妻在线免费超碰| 精品一级毛片| 亚洲熟妇熟女久久精品综合一区| 久久国产精品国产自线拍| 国产第一页线路1| 无码国产偷倩在线播放| 97免费视频人妻无码一区| 永久精品一区二区三区亚洲| 久久99精品久久久久久hb| 国产99视频在线| 久久国产真实性爱视频| 亚洲精品无码视频中文字幕| 国产凹凸在线一区二区| 99视频这有这里有精品| 一区精品无码动漫| 在线国产毛片手机小视频| 色窝窝91麻豆精品国产| 欧美综合亚洲日韩精品区一|