您的位置 首页 传感器

i2c总线AT24C02存储器读写程序

includereg52h>defineuintunsignedint定义unsignedint为uintdefineucharunsignedchar定义unsignedchar

#include

#define uint unsigned int  //界说unsigned int 为uint#define uchar unsigned char //界说unsigned char  为uchar#define uchar unsigned char //界说unsigned char  为uchar#define uint unsigned int  //界说unsigned int 为uintsbit sda=P3^3;//界说I2C数据线sbit scl=P3^2;//界说I2C时钟线void delay2()//推迟6us函数{;;;}void start()//I2C开端时钟函数{sda=1;delay2();//推迟6us是时序要求。scl=1;delay2();sda=0;delay2();}void stop()//I2C完毕时钟函数{sda=0;delay2();//推迟6us是时序要求。scl=1;delay2();sda=1;delay2();}void respons()//应对函数{uchar i;//界说变量Iscl=1;delay2();while((sda==1)&&(i<250))i++;//没有收到应对信号在等//过一段时间后仍是没收到主动跳出该句子.相与。scl=0;delay2();}void init()//初始化函数。{scl=1;sda=1;}void write_byte(uchar date)//写一字节函数。{uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;//TEMP左移一位!scl=0;delay2();sda=CY;//送走最高位,顺次把八位送完。scl=1;//坚持数据安稳。delay2();}scl=0;delay2();sda=1;//总线开释。delay2();}uchar read_byte()//读一字节函数。带返回值的函数{uchar i,j,k;scl=0;delay2();sda=1;//总线开释。delay2();for(i=0;i<8;i++){ scl=1;delay2();j=sda;k=(k<<1)|j;//k左移一位最低位变成了0,再与J相或,J就送到K最低位。scl=0;//置低以便下次读数据。delay2();}return k;}void write_add(uchar address,uchar date){  start();//I2C开端时钟函数write_byte(0xa0);//at24c02的固定地址A,1010,AO-A3都接地都为0。respons();//写完后调用应对函数write_byte(address);//确认从at24c02的第address方位写数据。respons();//写完后调用应对函数write_byte(date);//在芯片第address方位写date.respons();//写完后调用应对函数stop();//I2C完毕时钟函数}uchar read_add(uchar address){ uchar date;start();//I2C开端时钟函数write_byte(0xa0);//开端读。respons();//读完后调用应对函数write_byte(address);//确认从at24c02的第address方位读数据。respons();//读完后调用应对函数start();//I2C开端时钟函数write_byte(0xa1);//读数据respons();//读完后调用应对函数date=read_byte();//送到P1口显现。stop();//I2C完毕时钟函数return date;}uint intnum,aa,ee,dd,cc;sbit D1=P3^4;//位界说sbit D2=P3^5;//位界说sbit D3=P3^7;//位界说sbit D4=P1^6;//位界说sbit D5=P1^7;//位界说void delay (uint z);void main (){P1=0xff;dd=0;D2=0;D3=0;delay (2200);  //aa=5;//ee=11000;while(1){ uchar f,k;f=2;init();//写直址,最终低位应为0。delay (1);k=read_add(f);//送到P1口显现。//从23地址读数据aa=k;ee=aa*2200;if(D4==0){  delay (100);   if(D4==1){aa++;delay (1);init();//写直址,最终低位应为0。write_add(2,aa);//23为at24c02内部贮存地址,0xaa为写到23地址的数据。delay (1);k=read_add(2);//送到P1口显现。//从23地址读数据aa=k;stop();if(aa==8){aa=7;}}}if(aa>1){if(D5==0){ delay (100);   if(D5==1){aa--;delay (1);init();//写直址,最终低位应为0。write_add(2,aa);//23为at24c02内部贮存地址,0xaa为写到23地址的数据。delay (1);k=read_add(2);//送到P1口显现。//从23地址读数据aa=k;stop();//ee=aa*2200;if(aa==1){aa=2;}}}}if(dd==0){if(D1==0){ delay (5000);if(D1==0){D2=0;D3=1;dd=1;delay (ee);D2=0;D3=0;}}}if(dd==1){if(D1==1){delay (5000);if(D1==1){D2=1;D3=0;dd=0;delay (ee);   D2=0;D3=0;}}}}}void delay(uint z)//代参数无返回值{ uint x,y;for (x=300;x>0;x--)for (y=z;y>0;y--);//100*2000次}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/255304.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部