新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AT24C02EEPROM芯片《實現對其讀和寫》

        AT24C02EEPROM芯片《實現對其讀和寫》

        作者: 時間:2016-12-01 來源:網絡 收藏

        unsigned char readbyte() //讀一個字節

        {

        unsigned char i,j,k=0;

        scl=0; nop(); sda=1;

        for (i=0;i<8;i++)

        {

        nop(); scl=1; nop();

        if(sda==1)

        j=1;

        else

        j=0;

        k=(k<<1)|j;

        scl=0;

        }

        nop();

        return(k);

        }

        void clock() //I2C總線時鐘

        {

        unsigned char i=0;

        scl=1;

        nop();

        while((sda==1)&&(i<255))

        i++;

        scl=0;

        nop();

        }

        ////////從24c02的地址address中讀取一個字節數據/////

        unsigned char read24c02(unsigned char address)

        {

        unsigned char i;

        start();

        writebyte(0xa0);

        clock();

        writebyte(address);

        clock();

        start();

        writebyte(0xa1);

        clock();

        i=readbyte();

        stop();

        delay1(10);

        return(i);

        }

        //////向24c02的address地址中寫入一字節數據info/////

        void write24c02(unsigned char address,unsigned char info)

        {

        EA=0;

        start();

        writebyte(0xa0);

        clock();

        writebyte(address);

        clock();

        writebyte(info);

        clock();

        stop();

        EA=1;

        delay1(50);

        }

        void main()

        {

        unsigned char i;

        TMOD=0x01; //定時器工作在方式1

        ET0=1;

        EA=1;

        TH0=0x4c; //對TH0 TL0賦值

        TL0=0x00; //使定時器0.05秒中斷一次

        TR0=1; //開始計時

        init(); //初始化24C02

        sec=read24c02(1);//每次重新開機時,讀出保存的數據賦于sec

        while(1)

        {

        i=20;

        //num=read24c02(1);//讀出保存的數據賦于num

        while(i--)

        {

        display(sec/10,sec%10);

        }

        if(write==1) //判斷計時器是否計時一秒

        {

        write=0; //清零

        write24c02(1,sec); //在24c02的地址1中寫入數據sec

        }

        }

        }

        void timer0(void) interrupt 1 using 0 //定時中斷服務函數

        {

        TH0=0x4c; //對TH0 TL0賦值 ,每隔0.05s發出一次中斷。

        TL0=0x00; //重裝計數初值

        times++; //每過250ust tcnt加一

        if(times==20) //計滿20次(1秒)時

        {

        times=0; //重新再計

        sec++;

        write=1; //1秒寫一次24C08

        if(sec==60) //定時100秒,在從零開始計時

        {sec=0;}

        }

        }


        上一頁 1 2 下一頁

        關鍵詞: AT24C02EEPROM讀和

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 石泉县| 大田县| 孝义市| 桓台县| 成安县| 漯河市| 邛崃市| 陈巴尔虎旗| 涿鹿县| 安新县| 衢州市| 应城市| 噶尔县| 萨迦县| 岑溪市| 通江县| 神农架林区| 上思县| 洮南市| 微博| 隆子县| 淮滨县| 廊坊市| 八宿县| 郎溪县| 正镶白旗| 昭通市| 扬州市| 青川县| 军事| 宜宾县| 泽库县| 惠安县| 吉首市| 贵南县| 灵台县| 喀喇沁旗| 汉中市| 都江堰市| 通道| 门头沟区|