at24c.c

来自「at24c.c 自己写的,也带有proteus.方便大家学习!!!」· C语言 代码 · 共 147 行

C
147
字号
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char 
#define uint unsigned int
#define nop _nop_();_nop_();_nop_();//定义空指令
#define addwr 0xa0
#define addrd 0xa1
sbit wp=P1^2;
sbit scl=P1^0;
sbit sda=P1^1;
uchar Number=0xaa;

mdelay(char j)
{
 unsigned int i;
 for(;j>0;j--)
 {
  for(i=0;i<20;i++);
 }
}

void star(void)	//起始条件
{scl=1;
 nop;
 sda=1;
 nop;
 sda=0;
 nop;
}

void stop(void)	   //停止
{
 sda=0;
 nop;
 scl=1;
 nop;
 sda=1;
 nop;
}

void ask(void)		//应答
{


scl=1;
nop;
sda=1;
mdelay(20);
scl=0;
nop;
}



void send(uchar date)  //发送写器件地址
{
		uchar i,temp;
		temp=date;
		for(i=0;i<8;i++)	
		{
			temp=temp<<1;
			scl=0;
			nop;
			sda=CY;
			nop;
			scl=1;
			nop;
		}
		scl=0;
		nop
		sda=1;
		nop
}

uchar read(void)		//读一个字节
{
	uchar m,k;
	scl=0;
	nop;
	sda=1;
	nop;
	for(m=0;m<8;m++)
	{
		scl=1;
		nop;
		k=(k<<1)|sda;
		scl=0;
		nop;
	}
	return 	k;

}

void write_rom(uchar data1,uchar add1) //写ROM
{ 
  star();
  nop;
  send(addwr);
  nop;
  ask();
  send(add1);
  nop;
  ask();
  nop;
  send(data1);
  nop;
  ask();
  nop;
  stop();
  nop;
  mdelay(20);
  nop;
 }


void read_rom(uchar add2) //读ROM
{uchar hehe;
 star();
 nop;
 send(addwr);
 nop;
 ask();
 nop;
 send(add2);
 nop;
 ask();nop;
 star();nop;
 send(addrd);nop;
 ask();nop;
 hehe=read();nop;
 scl=0;
 stop();
 Number=hehe;
}


void main()
{
 wp=0;
 write_rom(Number,4);
 mdelay(20);
 Number=0;
 read_rom(4);
P2=Number;
 while(1);

}

⌨️ 快捷键说明

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