在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

            MSP430非模擬IIC總線控制程序

            作者: 時(shí)間:2016-12-02 來源:網(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) //對于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ù)的長度
            //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ù)長度
            //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;
            }


            評論


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

            關(guān)閉