新聞中心

        MSP430 IIC總線程序

        作者: 時(shí)間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
        #ifndef _I2C_H
        #define _I2C_H
        #define SDA_1 P4OUT|=0x02 //SDA = 1
        #define SDA_0 P4OUT&=~0x02 //SDA = 0
        #define SCL_1 P4OUT|=0x01 //SCL = 1
        #define SCL_0 P4OUT&=~0x01 //SCL = 0
        #define SDA_IN P4DIR&=~0x02; //I/O口為輸入
        #define SDA_OUT P4DIR|=0x02 //I/0口為輸出
        #define J_SDA_1_or_0 (P4IN&0x02)==0x02
        //--------------------------------------------
        //--------以下為24C64讀寫子函數(shù)
        //DELAY 函數(shù)程序//功能:延時(shí)子程序
        //==========================================
        static void Delay(unsigned int n)
        {
        while(n!=0)
        {n--;}
        }
        //=========================================
        //START 函數(shù)程序
        //功能:開始閃存操作
        //==========================================
        void Start(void)
        {
        SDA_OUT;
        SDA_1;
        Delay(10);
        SCL_1;
        Delay(10);
        SDA_0;
        Delay(10);
        SCL_0;
        Delay(10);
        }
        //=========================================
        //STOP 函數(shù)程序
        //功能:停止閃存操作
        //==========================================
        void Stop(void)
        {
        SDA_0;
        Delay(10);
        SCL_1;
        Delay(10);
        SDA_1;
        Delay(10);
        }

        void TX_Byte(unsigned char WriteData)
        {
        unsigned char i,j;
        j=WriteData;
        SDA_OUT;
        for (i=0; i<8; i++)
        {
        if ((j&0x80)==0)
        { SDA_0;}
        else
        { SDA_1;}
        j <<=1;
        Delay(10);
        SCL_1;
        Delay(10);
        SCL_0;
        Delay(10);
        }
        }

        unsigned char RX_Byte(void)
        {
        unsigned char i;
        unsigned char TempData = 0;
        SDA_IN;
        for (i=0; i<8; i++)
        {
        Delay(10);
        SCL_1;
        Delay(10);
        TempData <<= 1;
        if (J_SDA_1_or_0)
        { TempData++; }
        SCL_0;
        Delay(10);
        }
        SDA_OUT;
        return(TempData);
        }
        //=========================================
        //ACK 函數(shù)程序
        //功能:掛高電平表示閃存時(shí)鐘信號(hào)
        //==========================================
        void ReceiveAck(void)
        {
        SDA_IN;
        SCL_1;
        Delay(10);
        while (J_SDA_1_or_0)
        {}
        SCL_0;
        SDA_OUT;
        Delay(10);
        }

        unsigned char ReadWord(unsigned long int unit)
        {
        unsigned char LowAdd= 0;
        unsigned char HighAdd = 0;
        unsigned charTempData = 0;
        LowAdd= (unsigned char)unit;
        HighAdd = (unsigned char)(unit >> 8);
        SDA_OUT;
        Start();
        TX_Byte(0xa0);
        ReceiveAck();
        TX_Byte(HighAdd);
        ReceiveAck();
        TX_Byte(LowAdd);
        ReceiveAck();
        Start();
        TX_Byte(0xa1);
        ReceiveAck();
        TempData= RX_Byte();
        Stop();
        Delay(8000);
        return(TempData);
        }

        void WriteWord(unsigned long int unit, unsigned char WriteData)
        {
        unsigned char LowAdd= 0;
        unsigned char HighAdd = 0;
        LowAdd= (unsigned char)unit;
        HighAdd = (unsigned char)(unit >> 8);
        Start();
        TX_Byte(0xa0);
        ReceiveAck();
        TX_Byte(HighAdd);
        ReceiveAck();
        TX_Byte(LowAdd);
        ReceiveAck();
        TX_Byte(WriteData);
        ReceiveAck();
        Stop();
        Delay(8000);
        }
        #endif


        關(guān)鍵詞: MSP430IIC總線程

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 龙泉市| 南华县| 和田市| 盐城市| 济宁市| 任丘市| 原阳县| 滦南县| 耒阳市| 盈江县| 临夏县| 台安县| 南江县| 西宁市| 楚雄市| 会同县| 渝中区| 江达县| 施甸县| 海口市| 博白县| 瑞金市| 扶余县| 拉萨市| 白河县| 双鸭山市| 敖汉旗| 大宁县| 旬邑县| 呼伦贝尔市| 托里县| 上饶县| 韩城市| 达拉特旗| 佛山市| 芦山县| 秀山| 怀宁县| 会昌县| 襄樊市| 靖西县|