📄 ne24c256.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 + -