首页 > 算法 > 图像识别 > at24c02能存多少个字节,AT24C02有多少个字节可以用来存数据

at24c02能存多少个字节,AT24C02有多少个字节可以用来存数据

来源:整理 时间:2023-02-22 09:07:30 编辑:亚灵电子网 手机版

1,AT24C02有多少个字节可以用来存数据

256

AT24C02有多少个字节可以用来存数据

2,单片机 掉电保护 at24c02

你好:at24c02最多储存256字节,每字节大小8位。那么你要实现掉电保护,就是每次在变量改变时要往at24c02中特定位置写入这个数据,在上电时将它读出。有关at24c02的读写、启动、停止、应答函数需要自己去编写,我可以把我的程序给你参考一下,通过编译,运行稳定。不懂的可以随时回复我。希望我的回答能帮助到你。很抱歉,回答者上传的附件已失效

单片机 掉电保护 at24c02

3,at24c02保存多个数据

你好:先说说是哪儿不对,出现了什么现象。其次,每次写之后延时一会,让at24c02有时间去处理。或者,你是没加应答函数么,直接写入。

at24c02保存多个数据

4,AT24C02有多少个字节可以用来存数据

/***************************************************************功能:实现存储器EEPROM AT24C02的数据读写操作 采用IIC总线读写作者:SG时间:2004-03-15版本:V1.0***************************************************************/#include "INTRINS.H"#include "reg52.h"#define WriteDeviceAddress 0xa0 //写驱动地址指令#define ReadDeviceAddress 0xa1 //读驱动地址指令sbit AT24C02_SCL = 0xa4;sbit AT24C02_SDA = 0xa5;/*-------------------------------------------------------------功能:发起始信号------------------------------------------------------------*/void Start_Cond() AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 1; _nop_(); AT24C02_SCL = 1; _nop_(); AT24C02_SDA = 0; _nop_();}/*-------------------------------------------------------------功能:发停止信号------------------------------------------------------------*/void Stop_Cond() AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 0; _nop_(); AT24C02_SCL = 1; _nop_(); AT24C02_SDA = 1; _nop_();}/*-------------------------------------------------------------功能:发确认信号------------------------------------------------------------*/void Ack() AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 0; AT24C02_SCL = 1; _nop_(); AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 1;}/*-------------------------------------------------------------功能:发无确认信号------------------------------------------------------------*/void NoAck() AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 1; _nop_(); AT24C02_SCL = 1; _nop_(); AT24C02_SCL = 0; _nop_();}/*-------------------------------------------------------------功能:写一个字节数据------------------------------------------------------------*/bit Write8Bit(unsigned char input) unsigned char i; for (i=0;i<8;i++) AT24C02_SCL = 0; input <<= 1; AT24C02_SDA = CY; AT24C02_SCL = 1; } AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 1; AT24C02_SCL = 1; _nop_(); CY = AT24C02_SDA; return(CY) ;}/*-------------------------------------------------------------功能:读一个字节数据------------------------------------------------------------*/unsigned char Read8Bit() unsigned char temp,rbyte=0; for (temp = 8;temp != 0;temp--) AT24C02_SCL = 0; _nop_(); rbyte = (rbyte << 1) | AT24C02_SDA; AT24C02_SCL = 1; _nop_(); } return rbyte;}/*-------------------------------------------------------------功能:从EEPROM中给定一个地址连续读NLEN个字节数据存放在以指针nContent开头的往下内容。------------------------------------------------------------*/bit Read_Flash ( unsigned char *nContent, unsigned char nAddr, unsigned char nLen ) unsigned char Addr; Addr = nAddr; Start_Cond(); //写开始信号 Write8Bit(WriteDeviceAddress); //写驱动地址 Write8Bit(Addr); //写从EEPROM中读的开始地址 Start_Cond(); //写开始信号 Write8Bit(ReadDeviceAddress); //写读数据指令 while(--nLen) *nContent=Read8Bit(); //读出内容 nContent++; //指针加1 Ack(); //发确认信号 } *nContent=Read8Bit(); //读一字节 NoAck(); //没有确认信号 Stop_Cond(); //发停止信号 return(0); //返回}/*-------------------------------------------------------------功能:初始化EEPROM子程序内容为FF------------------------------------------------------------*/bit Init_Flash ( unsigned int nPage ) // 8 Byte/1Page init 0xFF unsigned char nLen; unsigned char Addr; nLen=8; Addr=8 *nPage; Start_Cond(); Write8Bit(WriteDeviceAddress); Write8Bit(Addr); for(;nLen!=0;nLen--) if(Write8Bit(0xff)) break; //if Write8Bit() Return 1 Write Flase } Stop_Cond(); return(CY);}/*-------------------------------------------------------------功能:从EEPROM中给定一个地址连续写NLEN个字节数据存放在以指针nContent开头的往下内容。------------------------------------------------------------*/bit Write_Flash ( unsigned char *nContent, unsigned char nAddr,unsigned char nLen) unsigned char i,temp; unsigned char Addr; Addr = nAddr; Start_Cond(); //写开始信号 Write8Bit(WriteDeviceAddress); //写驱动地址 Write8Bit(Addr); //写从EEPROM中写的开始地址 for(i = 0;i < nLen;i++) if(Addr%8==0) //每页8字节 //换页 Stop_Cond(); _nop_(); Start_Cond(); Write8Bit(WriteDeviceAddress); Write8Bit(Addr); } temp = *nContent; if(Write8Bit(temp)) break; //CY nContent++; Addr++; } Stop_Cond(); //发停止信号 return(CY);}/*-------------------------------------------------------------主程序功能:实现存储器EEPROM AT24C02的数据读写操作------------------------------------------------------------*/void main() unsigned char dat[16],i; Read_Flash(dat,0,16); //读出AT24C02中从地址0开始依次往后16个字节放入dat数组中 Init_Flash(0); //将AT24C02的第0页初始化为FF Read_Flash(dat,0,16); //读出AT24C02中从地址0开始依次往后16个字节放入dat数组中 for(i = 0;i < 16;i++ ) dat[i] = i; //对数组dat初始化为0---F } Write_Flash(dat,0,16); //将dat数组中的数据写入AT24C02中地址从0开始 Read_Flash(dat,1,16); //读出AT24C02中从地址1开始依次往后16个字节放入dat数组中 while(1) i = 9; }}

5,at24c02到底有多大内存书上说有2kb又说有32页每页码8B共

2Kb(b是bit),2KB(B是Byte)
不会啊
不会吧

6,AT24C02使用详解

这篇文章是写给一个学弟看的,关于IIC,关于24C02的单字节写入\读取..页写入和读取,,学弟总是害怕协议,,,我总是对人家说,本来就这样的,协议就是人家这样规定的,,,如果你早生几十年你也可能规定个IIC协议......我的单片机和24C02通信,,,我的单片机就叫主机,,,24C02叫从机 先看IIC IIC协议规定开始传输数据的时候要先发一个起始信号,,,目的应该是告诉从机要开始通信了,准备准备 终止信号就是拜拜啦,再见! 起始信号就是 在SCL在高电平期间SDA来一个下降沿,,终止信号就是在SCL在高电平期间SDA来一个上升沿(所以协议上才会说,在正常传输数据的时候,只有在SCL为低电平的时候,数据线SDA的高低电平状态才允许改变,要不然岂不是和起始信号或者终止信号冲突了)/******************************************************************* 起动总线函数 函数原型: void Start_I2c(); 功能: 启动I2C总线,即发送I2C起始条件. ********************************************************************/voidStart_I2c() SDA=1;/*发送起始条件的数据信号*/_Nop(); SCL=1; _Nop();/*起始条件建立时间大于4.7us,延时*/_Nop(); _Nop(); _Nop(); _Nop(); SDA=0;/*发送起始信号*/_Nop();/*起始条件锁定时间大于4μs*/_Nop(); _Nop(); _Nop(); _Nop(); SCL=0;/*钳住I2C总线,准备发送或接收数据*/_Nop(); _Nop(); }voidStop_I2c() SDA=0;/*发送结束条件的数据信号*/_Nop();/*发送结束条件的时钟信号*/SCL=1;/*结束条件建立时间大于4μs*/_Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1;/*发送I2C总线结束信号*/_Nop(); _Nop(); _Nop(); _Nop(); }发送完起始信号就能传输数据了 下面是程序voidSendByte(unsignedcharc) unsignedcharBitCnt;//SCL=0; 起始信号最后是SCL=0;所以不用写了for(BitCnt=0;BitCnt<8;BitCnt++)/*要传送的数据长度为8位*/ SDA=1; }else SDA=0; } _Nop(); SCL=1;/*置时钟线为高,通知被控器开始接收数据位*/_Nop(); _Nop();/*保证时钟高电平周期大于4μs*/_Nop(); _Nop(); _Nop(); SCL=0; } _Nop(); _Nop(); SDA=1;/*8位发送完后释放数据线,准备接收应答位*/_Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop();if(SDA==1)/*判断是否接收到应答信号*/ack=0;//没有接收到应答信号elseack=1;//接收到应答信号SCL=0; _Nop(); _Nop(); }现在说一下接收,,,假设上面发送完0xaa以后,从机就返回给我们数据(11001100, 0xcc),当然SCL为低电平的时候模块准备数据,,SCL为高电平的时候,从机就把数据放在了SDA上,这样循环8次,一个8位数据就过来了 整体上应该是 Start_I2c();起始信号程序 SendByte(0xaa); 判断下ack是不是等于1,应答了(是继续执行还是停止看自己了) Data = RcvByte();//接收数据 Ack_I2c(1);//发送非应答,就是SDA=1;,这个程序在下面 Stop_I2c();发送停止信号 接收程序如下unsignedcharRcvByte() unsignedcharretc; unsignedcharBitCnt; retc=0; SDA=1;/*置数据线为输入方式*/for(BitCnt=0;BitCnt<8;BitCnt++) _Nop(); SCL=0;/*置时钟线为低,准备接收数据位*/_Nop(); _Nop();/*时钟低电平周期大于4.7μs*/_Nop(); _Nop(); _Nop(); SCL=1;/*置时钟线为高使数据线上数据有效*/_Nop(); _Nop(); retc=retc<<1;if(SDA==1)retc=retc+1;/*读数据位,接收的数据位放入retc中*/_Nop(); _Nop(); } SCL=0; _Nop(); _Nop();return(retc); }应答或者非应答程序如下/******************************************************************** 应答子函数 函数原型: void Ack_I2c(bit a); 功能: 主控器进行应答信号(可以是应答0或非应答1信号,由位参数a决定) ********************************************************************/voidAck_I2c(bit a) _Nop(); _Nop(); _Nop(); SCL=1; _Nop(); _Nop();/*时钟低电平周期大于4μs*/_Nop(); _Nop(); _Nop(); SCL=0;/*清时钟线,钳住I2C总线以便继续接收*/_Nop(); _Nop(); }IIC其实就这样了,主要看支持IIC通信的芯片的资料了,写好这些就是IIC通用的了 资料链接 https://wenku.baidu.com/view/3fc8558002d276a200292ef9.html 现在看芯片资料如何写进去一个字节 关于器件的地址 写就是0xa0;;;;读就是0xa1 所以写函数就是/** * @brief 向24C02写数据 * @param Data--数据 * @param Address--地址 * @param None * @retval None * @example **/unsignedcharWriteData(unsignedcharData,unsignedcharAddress) Start_I2c(); SendByte(0xa0);//最后一位为0写入if(ack==0)return(0); SendByte(Address);//发送地址if(ack==0)return(0); SendByte(Data);//发送数据if(ack==0)return(0); Stop_I2c();//结束总线return(1); }关于应答哈我的SendByte(unsigned char c)函数里面发送完8位数据后就写了应答,然后把应答标志给ack,,后面直接判断的ack 现在想想为什么叫应答...直接说判断从机正没正确接收到数据就完了呗,就是把SDA拉高,然后把SCL拉高,等一会然后判断SDA引脚有没有被从机拉低,拉低了就说明好了......没拉低从机可能接收的数据不正确 _Nop(); _Nop(); SDA=1; /*8位发送完后释放数据线,准备接收应答位*/ _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA==1)/*判断是否接收到应答信号*/ ack=0;//没有接收到应答信号 else ack=1;//接收到应答信号 SCL=0; _Nop(); _Nop(); } 再看从任意地址读一个数据 注意哈第一个发送的器件地址是0xa0,后面的是0xa1 所以程序如下/** * @brief 从24C02读出数据 * @param None * @param Address--地址 * @param None * @retval 读到的数据 * @example **/unsignedcharReadData(unsignedcharAddress) unsignedcharData =0; Start_I2c(); SendByte(0xa0);//最后一位为0if(ack==0)return(0); SendByte(Address);//发送地址if(ack==0)return(0); Start_I2c(); SendByte(0xa1);//最后一位为1if(ack==0)return(0); Data=RcvByte(); Ack_I2c(1);//发送非就答位Stop_I2c();//结束总线return(Data); }现在看页写 把程序先放上,对了写的时候的开始地址最好是0,8,16,24,32,40,68,,,,8的倍数,要不然数据可能有错误,当然我用的芯片页写最多一次能写入8个字节.....感觉有点少哈......可以在现在的基础上再做一个函数实现哈,,或者用写单字节的for循环下..../** * @brief 向24C02写数据----页写,,,最多一次写入8个字节,多了会覆盖前面的 * @param Data--数据 * @param StartAddress--开始的地址--最大255 * @param None * @retval None * @example **/unsignedcharPageWrite(unsignedchar*Data,unsignedcharAddress,unsignedcharcnt) Start_I2c(); SendByte(0xa0);//最后一位为0写入if(ack==0)return(0); SendByte(Address);//发送地址if(ack==0)return(0);while(cnt--) SendByte(*Data++);//发送数据if(ack==0)return(0); DelayMs(10); } Stop_I2c();//结束总线return(1); }现在看页读 看程序/** * @brief 从24C02读出数据----页读 * @param Data--数据指针 * @param StartAddress--开始的地址--最大255 * @param None * @retval None * @example **/unsignedcharPageRead(unsignedchar*Data,unsignedcharAddress,unsignedcharcnt) Start_I2c(); SendByte(0xa0);//最后一位为0if(ack==0)return(0); SendByte(Address);//发送要读的地址if(ack==0)return(0); Start_I2c(); SendByte(0xa1);//最后一位为1if(ack==0)return(0);while(cnt--) Data++; Ack_I2c(0);//发送应答位DelayMs(10); } Ack_I2c(1);//发送非应答位Stop_I2c();//结束总线return(1); }说一下读的时候最好开始读取的地址是8的倍数,读取的数据个数也是8的倍数,,,我测试的如果不是这样有时候,第二次页读的时候就会读错........ 这芯片和8干上了............ 还有一个立即读,,,看明白就行,就是立即返回当前读地址加1后的那个数据 源码链接 链接: http://pan.baidu.com/s/1i4M7BId%20 密码:r9ov

7,at24c02能不能跨页写

你好:AT24C02一共就能存256字节,也就是只有256的存储单位。你若是问能不能不按顺序进行存储,这个是可以的。只要把地址写对,可以在任意单位进行存储数据。希望我的回答能帮助到你。
efafvaas

8,24C02 08 16 一个地址有多少个字节

这个eeprom是2k位,共有256*8字节,并不是2k字节所以8位地址就可以了!!!
24C02是一个2048位串行E2PROM,共有256字节。器件靠分配的地址工作,本身没有规划分页,如果设计时需要分,请自己规划。

9,AT24C02字节换算

我也没懂2kb是哪儿来的数据。就我所知,at24c02只能容纳256个1字节的数据。希望我的回答能帮助到你。
这个2k要分清是2kb还是2kb,如果是2kb的话,2k=2048bit,1字节=8bit,so...2k=256字节

10,为什么at24c02的2k256字节计算机明明是2k2048字节

这个2k要分清是2kb还是2KB,如果是2kb的话,2k=2048bit,1字节=8bit,so...2k=256字节
你好!你看错了吧,2k=2048bit 才正确。仔细看看,大意的造成的或是学艺不精。希望对你有所帮助,望采纳。
文章TAG:at24c02能存多少个字节at24c02多少字节

最近更新

  • k60芯片是不是arm,KIA6040p是什么芯片?k60芯片是不是arm,KIA6040p是什么芯片?

    芯片采用天玑芯片,由台积电制造,具有良好的声誉和性能。这款芯片在很多机型上都有不错的表现,性能更强,功耗表现也相对稳定,全血版本还是非全血版本?它是台积电科技的骁龙,至尊版由小米公司在.....

    图像识别 日期:2024-04-11

  • 给冰柜打压应该打多少钱,冰箱打压加氟多钱给冰柜打压应该打多少钱,冰箱打压加氟多钱

    冰箱打压加氟多钱2,冰箱冰柜检漏打压是多少3,容声冰箱BCD172AY的制冷压缩机鼓掌要多少钱1,冰箱打压加氟多钱参考价格:¥1299元最低价格:¥1200元超级静音,省电。室温15度,冰箱冷藏室8度,变温室8度,.....

    图像识别 日期:2024-04-10

  • 调谐变压器输出电压视频,变压器调频和调压调谐变压器输出电压视频,变压器调频和调压

    当系统电压不变时,改变变压比就是改变二次侧的输出电压。变压器反馈振荡器的输出电压随振荡频率而变化,根据变压器每匝的高低压相等的原理,开关电源变压器:开关电源变压器是一种带有开关.....

    图像识别 日期:2024-04-10

  • Rc低频补偿电路,低频补偿电路图Rc低频补偿电路,低频补偿电路图

    rc阻容降压电路输出低。检查电源电路,因此,rc阻容降压电路的输出为低,以检查电源电路,RC电路:由两个元件组成的电路:电阻R和电容C..RL电路:由电阻r和电感l两个元件组成的电路,rc振荡电路的.....

    图像识别 日期:2024-04-10

  • 锂电池一般充电电流多少时间,锂电池一般充几个小时锂电池一般充电电流多少时间,锂电池一般充几个小时

    锂电池一般充几个小时锂电池充电时间一般是3-5小时,早期的电池是镍氢,但是锂电池是没有记忆效应不需要这么做,充时间过长会对电池的循环使用寿命产生影响。锂电池是以锂金属或锂合金为阳.....

    图像识别 日期:2024-04-10

  • 105va等多少安,1KVA等于多少安105va等多少安,1KVA等于多少安

    1KVA等于多少安2,变压器上的105VA是什么意思3,彩环电阻105欧等于多少安4,1KVA等于多少安电流5,150V等于多少安倍6,10千伏高压电流表50515a等于底压多少安7,电池容量1瓦时等于多少毫安时1,1KVA.....

    图像识别 日期:2024-04-10

  • 铃木vsf1400多少钱,这个铃木摩托多少钱这车怎么样铃木vsf1400多少钱,这个铃木摩托多少钱这车怎么样

    这个铃木摩托多少钱这车怎么样新车7500元,看样子有2年了.开起来很舒服.2,请问铃木GSX1400摩托车市场价多小还有什么摩车找善烧托车好看些根据年数不同市场价有低有高我觉得大魔神不好看.....

    图像识别 日期:2024-04-10

  • 2362IC供电是多少V,电磁炉 电磁盘的供电电压是多少2362IC供电是多少V,电磁炉 电磁盘的供电电压是多少

    电磁炉电磁盘的供电电压是多少2,ic供电最好取多少伏3,功放管2SA1302集电极供电是多少4,为什么电源IC的供电电压规格书里写的最大是28V但实际上却用312V呢5,电脑usb接口供电量多少V6,3862芯.....

    图像识别 日期:2024-04-10