完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
【1】24C02功能概述
24C02是一个2K Bit的串行EEPROM存储器,内部含有256个字节。在24C02里面有一个8字节的页写缓冲器。该设备的工作电压为1.8V到6.0V,芯片的第7引脚WP为写保护引脚,将该引脚接地允许正常的读写。 【2】设备地址 24C02的设备地址包括固定部分和可编程部分。可编程部分需要根据硬件引脚A0、A1和A2来设置。设备地址的最后一位用于设置数据传输的方向,即读/写位。格式如下图: 在IIC总线协议中,设备地址是起始信号后第一个发送的字节。如果硬件地址引脚A0、A1、A2均接地,那么,24C02的设备的读操作地址为:0xA1;而写操作地址则为:0xA0。 【3】读写操作中的应答信号 在写操作中,24C02每接收一个8位字节后会产生一个应答信号。在读操作中,24C02在发送一个8位数据后会释放SDA线并监视应答信号。一旦收到应答信号,将继续发送数据。如果主机没有发送应答信号,从机则停止发送数据且等待一个停止信号。 【4】字节写操作 24C02接收完设备地址后,产生应答信号;然后接收8位内存字节地址,产生应答信号,接着接收一个8位数据,产生应答信号;最后主机发送停止信号,字节写操作结束。 【5】页写操作 24C02有一个8字节的页写缓冲器,也就是说可以一次连续写入8个字节到缓冲器,然后由缓冲器一次性写到EEPROM。页写操作初始化与字节写操作相同,只是主机不会在写完第一个数据后就发送停止信号,而是在24C02应答后,接着发送7个数据。 需要注意的是,24C02接收到每个数据后,其字节地址的低3位会自动加1,高位地址不变,维持在当前页内。当内部产生的字节地址到达该页边界时,随后的数据将写入该页的页首,先前的写入的数据将会被覆盖。 【6】当前地址读操作 24C02内部的地址寄存器会保存着上次读/写操作最后一个地址加1的值。只要芯片有电,该地址就一直保存着。如果上次读/写操作的地址为N,那么当前地址读操作就从N+1开始。当读到最后一个字节(即255处),地址会回转到0。 【7】字节读操作 主机首先发送起始信号,接着发送设备地址和它想要读取的数据内存字节地址,执行一个伪写操作。在24C02应答主机之后,主机重新发送起始信号和从设备地址,进行读操作。24C02响应并发送应答信号,然后输出所要求的一个8位字节数据。主机接收完这个8位数据后,产生一个“非应答”信号,最后发送停止条件,字节读操作结束。 【8】连续读操作 在24C02发送完一个8位字节数据之后,主机产生一个应答信号来响应,告知24C02要求读取更多的数据,直到读完最后一个数据,主机向24C02发送一个“非应答”信号,然后发送一个停止信号,结束此操作。 【9】基本读写操作流程 24C02的字节写操作,参考代码: void Write_24C02(unsigned char addr, unsigned char dat) { IIC_Start(); //IIC总线起始信号 IIC_SendByte(0xa0); //24C02的写设备地址 IIC_WaitAck(); //等待从机应答 IIC_SendByte(addr); //内存字节字节 IIC_WaitAck(); //等待从机应答 IIC_SendByte(dat); //写入目标数据 IIC_WaitAck(); //等待从机应答 IIC_Stop(); //IIC总线停止信号 } 24C02的字节读操作,参考代码: unsigned char Read_24C02(unsigned char addr) { unsigned char tmp; //进行一个伪写操作 IIC_Start(); //IIC总线起始信号 IIC_SendByte(0xa0); //24C02写设备地址 IIC_WaitAck(); //等待从机应答 IIC_SendByte(addr); //内存自己地址 IIC_WaitAck(); //等待从机应答 //进行字节读操作 IIC_Start(); //IIC总线起始信号 IIC_SendByte(0xa1); //24C02读设备地址 IIC_WaitAck(); //等待从机应答 tmp = IIC_RecByte(); //读取目标数据 IIC_Ack(0); //产生非应答信号 IIC_Stop(); //IIC总线停止信号 return tmp; } 【10】进阶强化实训 【11】参考源码共享 #include "regx52.h" #include "absacc.h" #include "iic.h" unsigned char dat1 = 0, dat2 = 0, dat3 = 0; unsigned char code SMG_duanma[18]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f}; void DelaySMG(unsigned int t) { while(t--); } void DisplaySMG_Bit(unsigned char pos, unsigned char value) { XBYTE[0xE000] = 0xFF; XBYTE[0xC000] = 0x01 << pos; XBYTE[0xE000] = value; } void Write_24C02(unsigned char addr, unsigned char dat) { IIC_Start(); IIC_SendByte(0xa0); IIC_WaitAck(); IIC_SendByte(addr); IIC_WaitAck(); IIC_SendByte(dat); IIC_WaitAck(); IIC_Stop(); } unsigned char Read_24C02(unsigned char addr) { unsigned char tmp; IIC_Start(); IIC_SendByte(0xa0); IIC_WaitAck(); IIC_SendByte(addr); IIC_WaitAck(); IIC_Start(); IIC_SendByte(0xa1); IIC_WaitAck(); tmp = IIC_RecByte(); IIC_Ack(0); IIC_Stop(); return tmp; } void Read_Write() { dat1 = Read_24C02(0x01); dat2 = Read_24C02(0x03); dat3 = Read_24C02(0x05); dat1 = dat1 + 1; dat2 = dat2 + 2; dat3 = dat3 + 3; if(dat1 > 10) dat1 = 0; if(dat2 > 20) dat2 = 0; if(dat3 > 30) dat3 = 0; Write_24C02(0x01, dat1); DelaySMG(1000); Write_24C02(0x03, dat2); DelaySMG(1000); Write_24C02(0x05, dat3); DelaySMG(1000); } void DisplaySMG_24C02() { DisplaySMG_Bit(0, SMG_duanma[dat1/10]); DelaySMG(500); DisplaySMG_Bit(1, SMG_duanma[dat1%10]); DelaySMG(500); DisplaySMG_Bit(2, SMG_duanma[16]); DelaySMG(500); DisplaySMG_Bit(3, SMG_duanma[dat2/10]); DelaySMG(500); DisplaySMG_Bit(4, SMG_duanma[dat2%10]); DelaySMG(500); DisplaySMG_Bit(5, SMG_duanma[16]); DelaySMG(500); DisplaySMG_Bit(6, SMG_duanma[dat3/10]); DelaySMG(500); DisplaySMG_Bit(7, SMG_duanma[dat3%10]); DelaySMG(500); } main() { XBYTE[0x8000] = 0xFF; XBYTE[0xA000] = 0x00; Read_Write(); while(1) { DisplaySMG_24C02(); } } |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
3363 浏览 0 评论
3370 浏览 9 评论
3061 浏览 16 评论
3551 浏览 1 评论
9182 浏览 16 评论
1304浏览 3评论
669浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
663浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2411浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1978浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-23 19:30 , Processed in 1.069046 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191