微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > i2c总线AT24C02存储器读写程序

i2c总线AT24C02存储器读写程序

时间:11-29 来源:互联网 点击:
#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次}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top