24c02简介
24C02是一个2Kbit的串行EEPROM存储芯片,可存储256个字节数据。工作电压范围为1.8V到6.0V,具有低功耗CMOS技术,自定时擦写周期,1000000次编程/擦除周期,可保存数据100年。24C02有一个16字节的页写缓冲器和一个写保护功能。通过I2C总线通讯读写芯片数据,通讯时钟频率可达400KHz。
51型号驱动程序
sbit I2C_SCL = P1^2; //控制24c02的SCL引脚
sbit I2C_SDA = P1^1; //控制24c02的SDA引脚
void I2C_Delay10us()//IIC协议所需:延迟10us函数
{
uchar a, b;
for(b=1; b>0; b--)
{
for(a=2; a>0; a--);
}
}
void I2C_Start() //开始启动IIC,IIC协议头
{
I2C_SDA = 1;
I2C_Delay10us();
I2C_SCL = 1;
I2C_Delay10us();//建立时间是I2C_SDA保持时间>4.7us
I2C_SDA = 0;
I2C_Delay10us();//保持时间是>4us
I2C_SCL = 0;
I2C_Delay10us();
}
void I2C_Stop() //停止IIC,IIC协议尾
{
I2C_SDA = 0;
I2C_Delay10us();
I2C_SCL = 1;
I2C_Delay10us();//建立时间大于4.7us
I2C_SDA = 1;
I2C_Delay10us();
}
/*******************************************************************************
* 函 数 名 : I2cSendByte(uchar num)
* 函数功能 : 通过I2C发送一个字节。在I2C_SCL时钟信号高电平期间,
* * 保持发送信号I2C_SDA保持稳定
* 输 入 : num ,ack
* 输 出 : 0或1。发送成功返回1,发送失败返回0
* 备 注 : 发送完一个字节I2C_SCL=0, 需要应答则应答设置为1,否则为0
*******************************************************************************/
uchar I2C_SendByte(uchar dat, uchar ack)
{
uchar a = 0,b = 0;//最大255,一个机器周期为1us,最大延时255us。
for(a=0; a< 8; a++)//要发送8位,从最高位开始
{
I2C_SDA = dat >> 7; //起始信号之后I2C_SCL=0,所以可以直接改变I2C_SDA信号
dat = dat < < 1;
I2C_Delay10us();
I2C_SCL = 1;
I2C_Delay10us();//建立时间 >4.7us
I2C_SCL = 0;
I2C_Delay10us();//时间大于4us
}
I2C_SDA = 1;
I2C_Delay10us();
I2C_SCL = 1;
while(I2C_SDA && (ack == 1))//等待应答,也就是等待从设备把I2C_SDA拉低
{
b++;
if(b > 200) //如果超过200us没有应答发送失败,或者为非应答,表示接收结束
{
I2C_SCL = 0;
I2C_Delay10us();
return 0;
}
}
I2C_SCL = 0;
I2C_Delay10us();
return 1;
}
uchar I2C_ReadByte() //IIC协议读取数据
{
uchar a = 0,dat = 0;
I2C_SDA = 1; //起始和发送一个字节之后I2C_SCL都是0
I2C_Delay10us();
for(a=0; a< 8; a++)//接收8个字节
{
I2C_SCL = 1;
I2C_Delay10us();
dat < <= 1;
dat |= I2C_SDA;
I2C_Delay10us();
I2C_SCL = 0;
I2C_Delay10us();
}
return dat;
}
/*******************************************************************************
* 函 数 名 : void At24c02Write(unsigned char addr,unsigned char dat)
* 函数功能 : 写入24c02的一个地址的一个数据
*******************************************************************************/
void At24c02Write(unsigned char addr,unsigned char dat)
{
I2C_Start();
I2C_SendByte(0xa0, 1);//发送写器件地址
I2C_SendByte(addr, 1);//发送要写入内存地址
I2C_SendByte(dat, 0); //发送数据
I2C_Stop();
}
/*******************************************************************************
* 函 数 名 : unsigned char At24c02Read(unsigned char addr)
* 函数功能 : 读取24c02的一个地址的一个数据
*******************************************************************************/
unsigned char At24c02Read(unsigned char addr)
{
unsigned char num;
I2C_Start();
I2C_SendByte(0xa0, 1); //发送写器件地址
I2C_SendByte(addr, 1); //发送要读取的地址
I2C_Start();
I2C_SendByte(0xa1, 1); //发送读器件地址
num=I2C_ReadByte(); //读取数据
I2C_Stop();
return num;
}
void main()
{
TMOD |= 0x01;
TH0=0XFC;
TL0=0X18;
TR0=1;
ET0=1;
EA=1;
while(1)
{
}
}
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
EEPROM
+关注
关注
9文章
1010浏览量
81395 -
存储芯片
+关注
关注
11文章
886浏览量
43082 -
掉电
+关注
关注
0文章
12浏览量
7656
发布评论请先 登录
相关推荐
24C02数据保存
=read_24C02(0);if(b==5)Alarm=1;}}这是我24C02的程序 这样写程序可以正常运行 蜂鸣器响但是下面这种写法24C02掉电以后蜂鸣器不响 没有读取到数据v
发表于 12-06 09:30
24C02芯片的相关资料分享
202007每月一练 的板子上还有一个24C02芯片没有写教程,今天介绍一下24C02这个芯片的驱动方法。串行EEPROM 24CXX是基于I2C
发表于 01-21 11:51
24C02读写操作程序设计实例,24C02 read / write process
24C02读写操作程序设计实例,24C02 read / write process
关键字:24C02读写操作程序设计实例
24C
24c02读写程序(已通过测试),24C02 read / write process
24c02读写程序(已通过测试),24C02 read / write process
关键字:24c02读写程序(已通过测试
使用51单片机和EEPROM存储器24C02保持保存实现流水灯的程序
本文档的主要内容详细介绍的是使用51单片机和EEPROM存储器24C02保持保存实现流水灯的程序。
发表于 06-06 17:50
•7次下载
24C02 EEPROM存储器的应用程序详细说明
24C02 是一个非挥发 eeprom 存储器器件,采用的 IIC 总线技术。24c02 在许多试验中 都有出现。24c02 的应用,主要在存储一些掉电后还要
发表于 12-22 08:00
•1次下载
24C02的秘密
本文主要介绍了一下目前市场上面24C02几种打线方式的区别,有利于消费者在芯片选型替代、电路设计、软件编程的注意一些细节,另外就是给出了用C语言软件模拟I2C协议和用汇编语言软件模拟I2C
评论