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

📄 ne24c256.c

📁 原创24C256读写程序
💻 C
字号:
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P0^6;
sbit SCL=P0^7;

//WP 蹈哏平写保护
void f_delay(uint n)
{

    uint i;
    for(i=0;i<n;i++);
}
void start(void)
{
SCL=1;_nop_();
SDA=1;_nop_();
SDA=0;_nop_();
SCL=1;_nop_();
}
/*-----------------------------------------------
调用方式:void stop_bit(void)
函数说明:停止位
-----------------------------------------------*/
void stop(void)
{
SDA=0;_nop_();
SCL=1;_nop_();
SDA=1;_nop_();
SCL=1;_nop_();/////////////////////////////////////////////////////////////////////
}
/*-----------------------------------------------
调用方式:void ack(void)
函数说明:应答函数
-----------------------------------------------*/
void ack(void)
{
SDA=1;_nop_();
SCL=0;_nop_();
SCL=1;_nop_();
SCL=0;_nop_();
}
/*-----------------------------------------------
调用方式:void no_ack(void)
函数说明:无需应答位,在读程序中用到
-----------------------------------------------*/
void no_ack(void)
{
SDA=1;_nop_();
SCL=1;_nop_();
SCL=0;_nop_();
}
/*-----------------------------------------------
调用方式:write_8bit(uchar ch)
函数说明:写一个字节(8位)数据
-----------------------------------------------*/
void write_8bit(uchar ch)
{
uchar i;
SCL=0;_nop_();
for(i=0;i<8;i++)
{
SDA=(bit)(ch&0x80);_nop_();
ch<<=1;
SCL=1;_nop_();
SCL=0;_nop_();
}
}
/*----------------------------------------------
调用方式:uchar read24c16(uint address)
函数说明:读24c16指定地址数据(字节读)
-----------------------------------------------*/
uchar read_8bit(uchar addrh,uchar addrl )
{
uchar temp;
uchar i;
start();
write_8bit(0xA0);
ack();
write_8bit(addrh);
ack();
write_8bit(addrl);
ack();
start();
write_8bit(0xA1);
ack();

 for(i=0;i<9;i++)
  {
   temp=temp|SDA;
   if(i<8)
   {
    temp=temp<<1;
   }
  SCL=0;_nop_();
  SCL=1;_nop_();
  }
ack();
no_ack();
stop();
return(temp);

}
/*-----------------------------------------------
函数说明:页写,自动累加地址,注:页读须软件累加地址!
-----------------------------------------------*/
void write_page(uchar addrh,uchar addrl,uchar *ddata,uint mun)
{
uchar i;
start();
write_8bit(0xA0);
ack();
write_8bit(addrh);
ack();
write_8bit(addrl);
ack();
for(i=0;i<mun;i++)
{
write_8bit(ddata[i]);
ack();
//addrl=addrl+1;       页写不须软件累加地址,器件按存入字节数自动累加地址
}
stop();
}
//-----------------------------------------------

void read_page(uchar addrh,uchar addrl,uchar *ddata,uint mun)
{
int i;
for(i=0;i<mun;i++)
{
ddata[i]=read_8bit(addrh,addrl);
f_delay(50);
addrl=addrl+1;   //页读须软件累加地址
}
}

void main(void)
{
uint qq=0;
uint pp=0;

uchar   k1[10]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10};
uchar   k2[10]={0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20};
uchar  i2[10],j2[10];
uchar a,b,c,d,e,f,g,h,i,j;
uchar k,l,m,n,o,p,q,r,s,t;

write_page(0,0,k1,10);
f_delay(5000);
write_page(255,245,k2,10);
f_delay(5000);
read_page(0,0,i2,10);

while(1)
{
a=i2[0];
b=i2[1];
c=i2[2];
d=i2[3];
e=i2[4];
f=i2[5];
g=i2[6];
h=i2[7];
i=i2[8];
j=i2[9];

k=j2[0];
l=j2[1];
m=j2[2];
n=j2[3];
o=j2[4];
p=j2[5];
q=j2[6];
r=j2[7];
s=j2[8];
t=j2[9];
}
}

⌨️ 快捷键说明

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