AT24C02程序

AT24C02程序
bit write=0;
sbit SDA=P2^0;//定义SDA端口
sbit SCL=P2^1;//定义SCL端口

void delayus()//定义us级延时程序
{;;}

void start()//起始程序
{
	SDA=1;
	delayus();
	SCL=1;
	delayus();
	SDA=0;
	delayus();
}

void stop()//终止程序
{
	SDA=1;
	delayus();
	SCL=1;
	delayus();
	SDA=0;
	delayus();
}

时序图

void ack()//应答程序
{
	uchar i;
	SCL=1;
	delayus();
	while((SDA=1)&&i<250)i++;
	SCL=0;
	delayus();
}

在这里插入图片描述

void init()//初始化
{
	SDA=1;
	delayus();
	SCL=1;
	delayus();	
}

void write_byte(uchar dat)//写一个字节程序
{
	uchar i,temp;
	temp=dat;
	for(i=0;i<8;i++)//1个字节8位二进制数
	{
		temp=temp<<1;//将temp左移1位,最低位补0
		SCL=0;//将SCL置0允许SDA数据变化
		delayus();
		SDA=CY;	//将最高位移出的CY位赋给SDA
		delayus();
		SCL=1;//置1将数据写入
		delayus();
	}
	SCL=0;//置0允许数据变化
	delayus();
	SDA=1;//释放总线
	delayus();			
}

uchar read_byte()//读一个字节程序
{
	uchar i,k;
	SCL=0;//置0允许数据变化
	delayus();
	SDA=1;//假设SDA为1
	delayus();
	for(i=0;i<8;i++)
	{
		SCL=1;//上升沿时,IIC设备将数据放在SDA线上,并在高电平期间数据已经稳定,可以接收数据了
		delayus();
		k=(k<<1)|SDA;//将k左移一位跟SDA或运算,再赋给k	
		SCL=0;//拉低SCL,使发送端可以把数据放在SDA上  
		delayus();		
	}
	return k;
}

void write_byte(uchar address, uchar dat)//指定地址写一个字节
{
	start();
	write_byte(0xa0);
	ack();
	write_byte(address);
	ack();
	write_byte(dat);
	ack();
	stop();
}

在这里插入图片描述

char read_byte(uchar address, uchar dat)//随机读取一个字节
{
	start();
	write_byte(0xa0);
	ack();
	write_byte(address);
	ack();
	start();
	write_byte(0xa1);
	ack();
	dat=read_byte();
	stop();
	return dat;
}

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值