社区
C语言
帖子详情
ATMEL的24C02跟24256的读写程序可以通用吗
csw20066
2008-05-14 11:28:12
我之前用的24c02存储数据的,但现在感觉存储空间太小,所以换作了24256,但是不知道2402的读写程序对24256能否通用,如果不能,有那些不同呢,需要怎么改的呢,谢谢!
...全文
634
1
打赏
收藏
ATMEL的24C02跟24256的读写程序可以通用吗
我之前用的24c02存储数据的,但现在感觉存储空间太小,所以换作了24256,但是不知道2402的读写程序对24256能否通用,如果不能,有那些不同呢,需要怎么改的呢,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuyin86
2009-04-01
打赏
举报
回复
24C01-24C256共9种EEPROM的字节读写操作程序
一个通用的24C01-24C256共9种EEPROM的字节读写操作程序,
此程序有五个入口条件,分别为读写数据缓冲区指针,
进行读写的字节数,EEPROM首址,EEPROM控制字节,
以及EEPROM类型。此程序结构性良好,具有极好的容错性,程序机器码也不多:
#pragma ot(6,SIZE)
#include <reg52.h>
#include <intrins.h>
#define ERRORCOUNT 10
sbit SDA=P0^0;
sbit SCL=P0^1;
enum eepromtype {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
enum eepromtype EepromType;
//DataBuff为读写数据输入/输出缓冲区的首址
//ByteQuantity 为要读写数据的字节数量
//Address 为EEPROM的片内地址
//ControlByte 为EEPROM的控制字节,具体形式为(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,
//表示读操作,R/W=0为写操作,A2,A1,A0为EEPROM的页选或片选地址;
//EepromType为枚举变量,需为M2401至M24256中的一种,分别对应24C01至24C256;
//函数返回值为一个位变量,若返回1表示此次操作失效,0表示操作成功;
//ERRORCOUNT为允许最大次数,若出现ERRORCOUNT次操作失效后,则函数中止操作,并返回1
//SDA和SCL由用户自定义,这里暂定义为P0^0和P0^1;
//其余的用户不用管,只要把只子程序放在你的程序中并调用它就可以了;
/***********************************************************************************/
bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
unsigned char ControlByte,enum eepromtype EepromType)
{
void Delay(unsigned char DelayCount);
void IICStart(void);
void IICStop(void);
bit IICRecAck(void);
void IICNoAck(void);
void IICAck(void);
unsigned char IICReceiveByte(void);
void IICSendByte(unsigned char sendbyte);
unsigned char data j,i=ERRORCOUNT;
bit errorflag=1;
while(i--)
{
IICStart();
IICSendByte(ControlByte&0xfe);
if(IICRecAck())
continue;
if(EepromType>M2416)
{
IICSendByte((unsigned char)(Address>>8));
if(IICRecAck())
continue;
}
IICSendByte((unsigned char)Address);
if(IICRecAck())
continue;
if(!(ControlByte&0x01))
{
j=ByteQuantity;
errorflag=0; //********clr errorflag
while(j--)
{
IICSendByte(*DataBuff++);
if(!IICRecAck())
continue;
errorflag=1;
break;
}
if(errorflag==1)
continue;
break;
}
else
{
IICStart();
IICSendByte(ControlByte);
if(IICRecAck())
continue;
while(--ByteQuantity)
{
*DataBuff++=IICReceiveByte();
IICAck();
}
*DataBuff=IICReceiveByte(); //read last byte data
IICNoAck();
errorflag=0;
break;
}
}
IICStop();
if(!(ControlByte&0x01))
{
Delay(255);
Delay(255);
Delay(255);
Delay(255);
}
return(errorflag);
}
/*****************以下是对IIC总线的操作子程序***/
/*****************启动总线**********************/
void IICStart(void)
{
SCL=0; //
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
SDA=1; //
}
/*****************停止IIC总线****************/
void IICStop(void)
{
SCL=0;
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
SCL=0;
}
/**************检查应答位*******************/
bit IICRecAck(void)
{
SCL=0;
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
CY=SDA; //因为返回值总是放在CY中的
SCL=0;
return(CY);
}
/***************对IIC总线产生应答*******************/
void IICACK(void)
{
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
SDA=1;
}
/*****************不对IIC总线产生应答***************/
void IICNoAck(void)
{
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
/*******************向IIC总线写数据*********************/
void IICSendByte(unsigned char sendbyte)
{
unsigned char data j=8;
for(;j>0;j--)
{
SCL=0;
sendbyte<<=1; //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
SDA=CY;
SCL=1;
}
SCL=0;
}
/**********************从IIC总线上读数据子程序**********/
unsigned char IICReceiveByte(void)
{
register receivebyte,i=8;
SCL=0;
while(i--)
{
SCL=1;
receivebyte=(receivebyte<<1)|SDA;
SCL=0;
}
return(receivebyte);
}
/***************一个简单延时程序************************/
void Delay(unsigned char DelayCount)
{
while(DelayCount--);
}
这是一个通用的代码
单片机与DSP中的用单片机实现
通用
存贮器IC卡的
读写
本文对AT24系列存贮器和AT89系列单片机的特征及总线状态作为介绍,并以AT24C01与AT89C2051为例详细描述了
通用
存贮器IC卡的工作原理及用单片机对其进行
读写
操作的基本电路连接和软件编程方法。
通用
存贮器IC卡是由
通用
存贮器芯片封装而成的,由于它的结构和功能简单,生产成本低,使用方便,因此在各领域都得到了广泛的应用。目前用于IC卡的
通用
存贮器芯片多为E2PROM,其常用的协议主要有两线串行连接协议(I2C)和三线串行链接协议,其中比较常用的是
ATMEL
公司生产的AT24系列芯片。以该系列中的AT24C01为例,它具有1k的存贮容量,适用于2V~5V的低电压/标准电压的操
单片机与DSP中的AT24C512中数据的文件系统化管理的分析
内容摘要:为方便单片机对AT24C512中的数据进行系统化管理,在介绍AT24C512基本结构和工作原理的基础上,按照PC机文件管理的思想实现AT24C512的文件系统,提高数据管理的效率。
ATMEL
在系统级集成方面所拥有的世界级专业知识和丰富的经验使其产品可以在现有模块的基础上进行开发,保证最小的开发延期和风险。凭借业界最广泛的知识产权(IP)组合,
Atmel
提供电子系统完整的系统解决方案的厂商。 这使客户能够带领他们与市场的电子产品的体积更小,更聪明,更符合成本效益比以往任何时候都
通用
的服务。
Atmel
集成电路的主要集中在消费,工业,安全,通信,计算和汽车市场。
ATMEL
公司
TOP2000BS型编程器
TOP2000BS型编程器 TOP2000
通用
编程器可以烧录Intel ,
Atmel
,LG,Philips,Winbond等51系列,AT90S系列、PIC12C、PIC16系列单片机,28、29、39、49、24C、93C、NV RAM,可以测试74、40、45系列数字电路。支持上千种芯片,很适合
读写
电脑BIOS、VCD存储器。可以对以下器件进行编程: *EPROM :各厂家 2716-27080 *EEPROM:各厂家28、29、39、48、49系列flesh 和 EEPROM。 *MPU/MCU: 51系列(Intel ,
Atmel
,LG,Philips,Winbond) *PIC系列(12c,16c5x,6x,7x,8x,9x)可以支持8、18、28、40脚的所有PIC单片机,烧录OTP系列单片机极其可靠。 *串口存储器:(24Cxxx,93Cxx) *PLD: (16v8x,20v8x,22v10A *测试静态RAM 6264-628256 *测试74,40,45系列
通用
集成电路好坏 *自动探测未知芯片的型号,可以支持74系列、40系列、45系列 *测试光电耦合器的好坏
AT24C01/AT
24C02
系列EEPROM芯片单片机
读写
驱动
程序
一、概述 EEPROM是嵌入式开发中比较常用的芯片,用来保存参数及掉电记忆的数据等,最常用的是
ATMEL
的AT24Cxx系列的IIC接口,也有其他厂家的如罗姆Rohm的BR24Gxx系列、ST的M24Cxx系列等。该系列芯片容量不等,如AT24C01即为1kbit,AT
24C02
为2kbit… 本文记录AT24C01/AT
24C02
的
读写
驱动。用到的IIC总线
读写
驱动可参考本人的另一篇博文4位数码管显示模块TM1637芯片C语言驱动
程序
。 二、芯片介绍 型号 容量bit 容量byte 页数 字节/
【mcuclub】数据存储AT
24C02
AT
24C02
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章