中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430非模擬IIC總線控制程序

        MSP430非模擬IIC總線控制程序

        作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏

        IIC.C

        #include
        #include "IIC.h"

        #define SLAVEADDR 0x50;

        int tx_count;
        int rx_count;
        unsigned char I2CBuffer[3];
        void Init_IIC(void)
        {
        //將P3.1和P3.3設(shè)置為I2C管腳
        P3SEL = 0x0A;
        //設(shè)置P3.1和P3.3管腳的方向
        P3DIR&= ~0x0A;
        //選擇為I2C模式
        U0CTL |= I2C + SYNC;
        //禁止I2C模塊
        U0CTL &= ~I2CEN;
        //設(shè)置I2C為7位地址模式,不使用DMA,
        //字節(jié)模式,時(shí)鐘源為SMCLK,
        //設(shè)置成傳輸模式
        I2CTCTL = I2CTRX + I2CSSEL_2;
        //定義從器件地址
        I2CSA = SLAVEADDR;
        //設(shè)置本身的地址
        I2COA = 0x01A5;
        //I2C時(shí)鐘為SMCLK / 160
        I2CPSC = 159;
        //SCL 高電平為:5 *I2C 時(shí)鐘
        I2CSCLH = 0x03;
        //SCL 低電平為:5 *I2C 時(shí)鐘
        I2CSCLL = 0x03;
        //I2C 模塊有效
        U0CTL |= I2CEN;
        tx_count = 0;
        rx_count = 0;
        }

        void I2CWriteInit(void) //對(duì)于AT24CXXX的寫操作是置成主模式并置位中斷使能.
        {
        //主(Master)模式
        U0CTL |= MST;
        //傳輸模式,R/W 為:0
        I2CTCTL |= I2CTRX;
        //清除中斷標(biāo)志
        I2CIFG &= ~TXRDYIFG;
        //發(fā)送中斷使能
        I2CIE = TXRDYIE;
        }

        void I2CReadInit(void)
        {
        //接收模式,R/W 為:1
        I2CTCTL &= ~I2CTRX;
        //接收中斷使能
        I2CIE = RXRDYIE;
        }

        void EEPROM_ByteWrite(unsigned char nAddr, unsigned char nVal)
        {
        //等待I2C模塊完成所有操作 //在選定的地址寫入數(shù)據(jù).
        while (I2CDCTL&I2CBUSY) ;
        //設(shè)置地址數(shù)據(jù)
        I2CBuffer[1] = nAddr;
        //設(shè)置數(shù)據(jù)
        I2CBuffer[0] = nVal;
        //設(shè)置緩沖區(qū)指針
        tx_count = 1;
        //寫數(shù)據(jù)初始化
        I2CWriteInit(); //設(shè)置為主模式
        //發(fā)送數(shù)據(jù)的長(zhǎng)度
        //1個(gè)控制字節(jié),2個(gè)數(shù)據(jù)字節(jié)
        I2CNDAT = 2;
        //開始和停止條件產(chǎn)生
        //開始I2C通信
        I2CTCTL |= I2CSTT+I2CSTP;
        return;
        }

        unsigned char EEPROM_CurrentAddressRead(void)
        {
        //等待I2C模塊完成所有操作
        while (I2CDCTL&I2CBUSY);
        //讀操作的初始化
        I2CReadInit();
        //主(Master)模式
        U0CTL |= MST;
        //接收1個(gè)字節(jié)的數(shù)據(jù)
        I2CNDAT = 1;
        //清除中斷標(biāo)志
        I2CIFG &= ~ARDYIFG;
        //開始接收,產(chǎn)生重新起始和停止條件
        I2CTCTL |= I2CSTT + I2CSTP;
        //等待傳輸完成
        while ((~I2CIFG)&ARDYIFG) ;
        //返回?cái)?shù)據(jù)
        return I2CBuffer[0];
        }

        unsigned char EEPROM_RandomRead(unsigned char nAddr)
        {
        //等待I2C模塊完成所有操作
        while (I2CDCTL&I2CBUSY);
        //設(shè)置地址
        I2CBuffer[0] = nAddr;
        //設(shè)置緩沖區(qū)指針
        tx_count = 0;
        //寫操作初始化
        I2CWriteInit();
        //傳輸數(shù)據(jù)長(zhǎng)度
        //1個(gè)控制字節(jié)和一個(gè)地址數(shù)據(jù)
        I2CNDAT = 1;
        //清除中斷標(biāo)志
        I2CIFG &= ~ARDYIFG;
        //起始條件產(chǎn)生
        I2CTCTL |= I2CSTT;
        //等待傳輸完成
        while ((~I2CIFG)&ARDYIFG);
        //讀操作初始化
        I2CReadInit();
        //接收一個(gè)字節(jié)的數(shù)據(jù)
        I2CNDAT = 1;
        //清除中斷標(biāo)志
        I2CIFG &= ~ARDYIFG;
        //開始接收,產(chǎn)生重新起始和停止條件
        I2CTCTL |= I2CSTT + I2CSTP;
        //等待傳輸完成
        while ((~I2CIFG)&ARDYIFG);
        //返回?cái)?shù)據(jù)
        return I2CBuffer[0];
        }

        void EEPROM_AckPolling(void)
        {
        unsigned int count;
        //等待I2C模塊完成所有操作
        while (I2CDCTL&I2CBUSY);

        count=0;
        //清除I2CEN位
        U0CTL &= ~I2CEN;
        I2CTCTL |= I2CRM;
        //使能I2C模塊
        U0CTL |= I2CEN;
        //設(shè)置NACKIFG標(biāo)志
        I2CIFG = NACKIFG;
        while (NACKIFG & I2CIFG)
        {
        //清除中斷標(biāo)志
        I2CIFG=0x00;
        //主(Master)模式
        U0CTL |= MST;
        //設(shè)置傳輸模式
        I2CTCTL |= I2CTRX;
        //產(chǎn)生起始條件
        I2CTCTL |= I2CSTT;

        //等待I2CSTT被清除
        while (I2CTCTL & I2CSTT) ;
        //產(chǎn)生停止條件
        I2CTCTL |= I2CSTP;
        //等待停止條件復(fù)位
        while (I2CDCTL & I2CBUSY) ;
        count = count + 1;
        }

        //清除I2CEN位
        U0CTL &= ~I2CEN;
        I2CTCTL &= ~I2CRM;
        //使能I2C
        U0CTL |= I2CEN;

        return;
        }


        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉