在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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)用 > 測試AVR的TWI寫24c02芯片的簡單函數(shù)

            測試AVR的TWI寫24c02芯片的簡單函數(shù)

            作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
            //文件名:"I2C.h"

            //描述:聲明讀寫24c02以及初始化TWI的全局函數(shù)

            本文引用地址:http://www.biyoush.com/article/201611/318916.htm

            #define uchar unsigned char
            #define uint unsigned int
            void I2C_Inti(void);
            void Write_24c02(uchar add,uchar data);
            uchar Read_24c02(uchar add);

            //文件名:"I2C.c"

            //描述:定義關(guān)于24c02以及TWI的相關(guān)函數(shù)

            #include
            #include
            #include"I2C.h"

            #define TW_START 0X08
            #define TW_REP_START 0X10
            #define TW_MT_SLA_ACK 0X18
            #define TW_MT_SLA_nACK 0X20
            #define TW_MT_DATA_ACK 0X28
            #define TW_MT_DATA_nACK 0X30
            #define TW_MT_LOST 0X38
            #define TW_MR_LOST 0X38
            #define TW_MR_SLA_ACK 0X40
            #define TW_MR_SLA_nACK 0X48
            #define TW_MR_DATA_ACK 0X50
            #define TW_MR_DATA_nACK 0X58

            //函數(shù)名;I2C_Inti
            //輸入:無
            //輸出:無
            //描述:初始化AVR的TWI端口

            void I2C_Inti(void)
            {
            TWBR=10;
            TWSR=0X00;
            TWAR=0X00;
            DDRC=0X80;
            PORTC=0XFF;
            }

            //函數(shù)名;I2C_Start
            //輸入:無
            //輸出:成功返回1,失敗返回0
            //描述:TWI開始(或重復(fù)開始)函數(shù)


            uchar I2C_Start(void)
            {
            TWCR=BIT(TWINT)|BIT(TWSTA)|BIT(TWEN);
            while(!(TWCR&BIT(TWINT)));
            if((TWSR&0XF8)==TW_START)//開始TWI成功
            {
            return 1;
            }
            if((TWSR&0XF8)==TW_REP_START) //再次開始TWI成功
            {
            return 1;
            }
            return 0;
            }

            //函數(shù)名;I2C_Stop
            //輸入:無
            //輸出:無
            //描述:TWI結(jié)束函數(shù)


            void I2C_Stop(void)
            {
            TWCR=BIT(TWINT)|BIT(TWEN)|BIT(TWSTO);
            }

            //函數(shù)名;Write_I2C
            //輸入:待寫的地址或數(shù)據(jù)
            //輸出:有應(yīng)答返回1,無應(yīng)答返回0
            //描述:主機(jī)寫

            uchar Write_I2C(uchar data)
            {
            uchar ack=1;
            TWDR=data;
            TWCR=BIT(TWINT)|BIT(TWEN);
            while(!(TWCR&BIT(TWINT)));
            if((TWSR&0XF8)==TW_MT_SLA_ACK) //發(fā)送芯片地址(寫)成功,有應(yīng)答
            {
            return ack;
            }
            if((TWSR&0XF8)==TW_MT_DATA_ACK) //發(fā)送數(shù)據(jù)成功,有應(yīng)答
            {
            return ack;
            }
            if((TWSR&0XF8)==TW_MR_SLA_ACK) //發(fā)送芯片地址(讀)成功,有應(yīng)答
            {
            return ack;
            }
            return 0;
            }

            //函數(shù)名;Read_I2C
            //輸入:是否應(yīng)答,1--發(fā)送應(yīng)答,0--不發(fā)送應(yīng)答
            //輸出:讀數(shù)據(jù)成功返回讀出的一個(gè)字節(jié)數(shù)據(jù),失敗返回0
            //描述:主機(jī)讀

            uchar Read_I2C(uchar ack)
            {
            if(ack)
            {
            TWCR=BIT(TWINT)|BIT(TWEN)|BIT(TWEA);
            while(!(TWCR&BIT(TWINT)));
            if((TWSR&0XF8)==TW_MR_DATA_ACK)
            {
            return(TWDR);
            }
            }
            else
            {
            TWCR=BIT(TWINT)|BIT(TWEN);
            while(!(TWCR&BIT(TWINT)));
            if((TWSR&0XF8)==TW_MR_DATA_nACK)
            {
            return(TWDR);
            }
            }
            return 0;
            }

            //函數(shù)名;Read_24c02
            //輸入:存儲(chǔ)地址add
            //輸出:返回讀出的一個(gè)字節(jié)數(shù)據(jù)
            //描述:主機(jī)讀24c02指定地址

            uchar Read_24c02(uchar add)
            {
            uchar data;
            I2C_Start();
            Write_I2C(0XAE);
            Write_I2C(add);
            I2C_Start();
            Write_I2C(0XAF);
            data=Read_I2C(0);
            I2C_Stop();
            return data;
            }


            //函數(shù)名;Write_24c02
            //輸入:存儲(chǔ)地址add,待寫的數(shù)據(jù)data
            //輸出:無
            //描述:主機(jī)寫24c02指定地址一個(gè)字節(jié)的數(shù)據(jù)

            void Write_24c02(uchar add,uchar data)
            {
            I2C_Start();
            Write_I2C(0XAE);
            Write_I2C(add);
            Write_I2C(data);
            I2C_Stop();
            }

            //文件名:"main.c"

            //描述:測試讀寫24c02的函數(shù),利用數(shù)碼管顯示

            #include
            #include
            #include"I2C.h"

            #define ON_138 PORTC|=BIT(PC7) //使能74138
            #define OFF_138 PORTC&=~BIT(PC7)

            const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //顯示的段碼值
            uchar buffer[]={0,0,0}; //存放待顯示的數(shù)據(jù)的段碼

            //函數(shù)名;Send_Buffer
            //輸入:待數(shù)碼管顯示的數(shù)據(jù)
            //輸出:無
            //描述:將顯示的數(shù)據(jù)譯碼

            void Send_Buffer(uchar data)
            {
            buffer[0]=table[data/100];
            data=data0;
            buffer[1]=table[data/10];
            data=data;
            buffer[2]=table[data];
            }

            //函數(shù)名;Display
            //輸入:待顯示的位置和段碼值,site--[0,2]
            //輸出:無
            //描述:在指定位置顯示指定數(shù)據(jù)

            void Display(uchar site,uchar data)
            {
            if(site==0)
            {
            PORTA=0X00;
            PORTB=data;
            }
            if(site==1)
            {
            PORTA=0X01;
            PORTB=data;
            }
            if(site==2)
            {
            PORTA=0X02;
            PORTB=data;
            }
            }

            //函數(shù)名;delay_ms
            //輸入:無
            //輸出:無
            //描述:延時(shí)1ms

            void delay_ms(uint ms)
            {
            uint i,j;
            for(i=0;i for(j=0;j<564;j++);
            }

            void main()
            {
            uchar temp;
            I2C_Inti();
            DDRA=0XFF;
            PORTA=0X00;
            DDRB=0XFF;
            PORTB=0X00;
            ON_138;
            temp=Read_24c02(0x08); //讀地址為0x08的存儲(chǔ)數(shù)據(jù)
            Send_Buffer(temp);
            temp++;
            Write_24c02(0x08,temp); // 寫temp到存儲(chǔ)地址0x08
            while(1)
            {
            Display(0,buffer[0]);
            delay_ms(3);
            Display(1,buffer[1]);
            delay_ms(3);
            Display(2,buffer[2]);
            delay_ms(3);
            }
            }

            附圖:



            關(guān)鍵詞: AVRTWI寫24c02芯

            評(píng)論


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

            關(guān)閉