⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24-2.c

📁 89C51读写24C02采用89C51, 24C读写
💻 C
字号:
//采用89C51,
//24C读写,11.0592M,经过测试ok,能读写24C02的所有字节,并在LED上显示读出的结果
//问题:如果读写24C08,最大地址03FF,该怎么读写?
//ljpwu◎21c.ncom
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#include<string.h>
#define uchar  unsigned char
#define uint  unsigned int
 

uchar  d10[4];
void del05s();
 void delay();
void  ask();
void stop();
void start();
uchar rdby();
void waddr();
void wrby(uchar x);
uchar  raddr();
uchar read(uchar address);
void write(uchar address,uchar dat);
void d5ms();
void w8addr(uchar x);
 
sbit ESDA=P1^3;
sbit ECLK=P1^2;
sbit KEY=P3^7;
 
 
sbit    ACC0=ACC^0;
sbit    ACC1=ACC^1;
sbit    ACC2=ACC^2;
sbit    ACC3=ACC^3;
sbit    ACC4=ACC^4;
sbit    ACC5=ACC^5;
sbit    ACC6=ACC^6;
sbit    ACC7=ACC^7;


uchar code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0-9
                   0x88,0x83,0xa7,0xa1,0x86,0x8e};//数码字型表A-F
//

//
void main()

{   unsigned int i,j,k;
  uchar re,re1,re2;

 
  while(1)
       {


         P0=0xff;
   
         j=0;
	  

	  for (k=0;k<256;k++) {	//256=0xff
	   write(k,k);}
       
	   for (k=0;k<256;k++){
	   re=read(k);
	   re1=re%0x10;	//取高4位
	   re2=re>>4;//	 取低4位
	    for (j=0;j<5;j++)
	
        {
      
         P0=ledcode[re1];
         P2=0xfe;
         delay();
		 P0=ledcode[re2];
         P2=0xfd;
		 delay();
     
        
     
         }
       P2=0xff;delay();delay();
       //del05s();
        
        }	  }

}


void delay()
{unsigned int kk=0x5ff;//0xff
    do{_nop_();kk--;}
    while(kk!=0);
   // ES=0;
   // KEY=1;
   // if(KEY==0){SBUF=0x99;while(TI==0){;}TI=0;}
   // ES=1;
}
void del05s()
{unsigned int kk=0xefff;//
    do{_nop_();kk--;}
    while(kk!=0);
}
 
void  ask()
    {
     unsigned int i=0xffff;
     ESDA=1;_nop_();ECLK=1;_nop_();
     do
     {i--;
     if(ESDA!=1)
        {ECLK=0;i=0;}
      }
      while(i!=0);
       }
/*###################################*/
void stop()
 {
    ECLK=0; _nop_();
    ESDA=0; _nop_();
    ECLK=1; _nop_();
    ESDA=1;_nop_();
    ECLK=0;_nop_();
    }
/*  */
/*###################################*/
/*24c start  */
void start()
 {
  ESDA=1;_nop_();
  ECLK=1;_nop_();
  ESDA=0;_nop_();
  ECLK=0;_nop_();
  }
/*###################################*/
/*24c rdby  */
uchar rdby()
 {      ESDA=1;
 ECLK=1;_nop_();ACC7=ESDA;ECLK=0;_nop_();
 ECLK=1;_nop_();ACC6=ESDA;ECLK=0;_nop_();
 ECLK=1;_nop_();ACC5=ESDA;ECLK=0;_nop_();
 ECLK=1;_nop_();ACC4=ESDA;ECLK=0;_nop_();
 ECLK=1;_nop_();ACC3=ESDA;ECLK=0;_nop_();
 ECLK=1;_nop_();ACC2=ESDA;ECLK=0;_nop_();
 ECLK=1;_nop_();ACC1=ESDA;ECLK=0;_nop_();
 ECLK=1;_nop_();ACC0=ESDA;ECLK=0;_nop_();
  return(ACC);
}
/*###################################*/
/*24c waddr  */
 void waddr()
 {
  start();
  wrby(0xa0);
  ask();}
/*###################################*/
/*24c raddr  */
 uchar  raddr()
 {
  start();
  wrby(0xa1);
  ask();
  ACC=rdby();
  stop();
  return(ACC);
}
/*###################################*/
void wrby(uchar x)

{       ACC=x;
        ESDA=ACC7;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC6;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC5;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC4;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC3;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC2;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC1;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC0;ECLK=1;_nop_();ECLK=0;_nop_();
 ESDA=1;_nop_();ECLK=1;
 }
/*####################################*/
//-----------------------------------------------------
//从指定的地址中读出一个字节数据涵
//-----------------------------------------------------
uchar read(uchar address)

  {     waddr();
        w8addr(address);
        //ACC=raddr();
  return(raddr());
  }
  
//-----------------------------------------------------
//向指定的地址中写入一个字节数据涵数
//----------------------------------------------------- 
void write(uchar address,uchar dat)
   {    //EWP=0;
    waddr();
   w8addr(address);
    wrby(dat);
    ask();
    stop();
    d5ms();
    //EWP=1;
   }
/* 延时*/
void d5ms()
 { uchar a, b;
   for (a=0;a<=15;a++)
   {
     for (b=0;b<0x7f;b++)
         {;}
   }
 }
 

void w8addr(uchar  x)
      { 
            wrby(x );
            ask();
             
        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -