您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > AT24C02 连读连写 流水灯测试 存储设备C51 原创的。。免费下载已通过
/******************************************************************时序,还是时序在模拟时序时不能出错*写一个字节数据是AT24C02自动才生一个应答,我们只要检测到就行。。然后发送下一字节*读一个字节后我们要写另一个应答通知AT24C02,。它接收我们的信号才会发下一个字节,不然我们不能进行连读******************************************************************/#includeC51.H#includeINTRINS.H#includeCLIB.H//P1为流水灯。。。实验用来显示数据是否能够正常读写//实验板上A0A1A2全部接地而且SDASCL没有接上拉电阻#defineSDAP2_0#defineSCLP2_1#defineW_slave0XA0#defineR_slave0xa1typedefunsignedcharuchar;typedefunsignedintuint;bitack=0;ucharcodestr_1[]={0x01,0x02,0x03,0x30,0x35,0x36,0x37,0x38,0x39,0x30};ucharget_str_1[8];/*******************************************AT24C02初始化*******************************************/voidAT24C02_Init(void);/********************************************AT24C02起动*********************************************/staticvoidAT24C02_Start();/********************************************AT24C02停止*__nop_()为一个单指令周期*11.0592MHZ一个单指令周期为1.08us********************************************/staticvoidAT24C02_End();/******************************************写应答******************************************/staticvoidAT24C02_Write_ACK();/****************************************读应答****************************************/staticvoidAT24C02_Read_ACK();/****************************************发送一个字节****************************************/staticvoidAT24C02_Send_Char(ucharch);/****************************************接送一个字节****************************************/staticucharAT24C02_Get_Char();/****************************************AT24C02延时****************************************/staticvoidflash(void);/****************************************发关一个字节*****************************************/staticvoidAT24C02_Write_One(ucharaddress,uchardat);/*****************************************接收一个字节*****************************************/staticucharAT24C02_Read_One(ucharaddress);/*****************************************连续写N个字节*****************************************/voidAT24C02_Write_Str(ucharaddress,uchar*str,ucharnum);/******************************************************连读N个字节*****************************************************/voidAT24C02_Read_Str(ucharaddress,uchar*str,ucharnum);/****************************************MAIN()**********************************************/voidmain(void){//uchartample=0x00;ucharx=0;//uchar*_str;AT24C02_Init();//AT24C02_Write_One(0x20,0xa0);//test....写后立即读写需要时间延时,我这里用最小的1ms可以,比//delay1ms(1);//这更小的还没有进行测试,但是没有延时读取失败。//while(1)AT24C02_Write_Str(0x00,str_1,8);delay1ms(100);AT24C02_Read_Str(0x00,get_str_1,8);while(x++8){P1=get_str_1[x];delay1ms(600);}P1=0X55;while(1);}/********************************************AT24C02起动*__nop_()为一个单指令周期*11.0592MHZ一个单指令周期为1.08us********************************************/staticvoidAT24C02_Start(){SDA=1;flash();SCL=1;flash();SDA=0;flash();SCL=0;flash();}/********************************************AT24C02停止*__nop_()为一个单指令周期*11.0592MHZ一个单指令周期为1.08us********************************************/staticvoidAT24C02_End(){SDA=0;flash();SCL=1;flash();flash();SDA=1;flash();flash();SCL=0;}/******************************************写应答******************************************/staticvoidAT24C02_Write_ACK(){uchari=0;SDA=1;flash();SCL=1;flash();//_nop_();//_nop_();while((SDA==1)&&i255)i++;if(i==255){P1=0X7f;ack=0;//无应答}else{P1=0xfe;ack=1;//有应答}SCL=0;flash();}/****************************************读应答****************************************/staticvoidAT24C02_Read_ACK(){SDA=0;flash();SCL=1;flash();SCL=0;flash();SDA=1;flash();}/****************************************发送一个字节先发送高位然后才是低字节****************************************/staticvoidAT24C02_Send_Char(ucharch){ucharx;uchartample=ch;SCL=0;flash();for(x=8;x0;x--){tample=1;SDA=CY;flash();SCL=1;flash();SCL=0;flash();}}/****************************************接收一个字节****************************************/staticucharAT24C02_Get_Char(){uchartample=0X00;ucharx;SCL=0;flash();SDA=1;flash();for(x=0;x8;x++){tample=1;SCL=1;flash();if(SDA==1)tample|=1;elsetample&=0xfe;SCL=0;flash();}returntample;}/*******************************************AT24C02初始化*******************************************/voidAT24C02_Init(void){SDA=1;flash();SCL=1;flash();}/****************************************AT24C02延时****************************************/staticvoidflash(void){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}/****************************************发关一个字节address为写入字节的地址*dat为要写入的字节*****************************************/voidAT24C02_Write_One(ucharaddress,uchardat){AT24C02_Start();AT24C02_Send_Char(W_slave);//电路图上的AT24C02AT24C02_Write_ACK();AT24C02_Send_Char(address);//存储内容起始地此AT24C02_Write_ACK();AT24C02_Send_Char(dat);//写一个数据/AT24C02_Write_ACK();AT24C02_End();//AT24C02_End();}/*****************************************接收一个字节address为要读取数据的地址*****************************************/ucharAT24C02_Read_One(ucharaddress){uchar_data;AT24C02_Start();AT24C02_Send_Char(W_slave);//电路图上的AT24C02AT24C02_Write_ACK();AT24C02_Send_Char(address);//存储内容起始地此AT24C02_Write_ACK();AT24C02_Start();AT24C02_S
本文标题:AT24C02 连读连写 流水灯测试 存储设备C51 原创的。。免费下载已通过
链接地址:https://www.777doc.com/doc-1306202 .html