51单片机用C51语言实现I2C24C02存储器用法和实例
一、I2C24C02存储器用法步骤:
1.把24C02的SCK/SDA引脚跟单片机的管脚连接。
2.调用Bus_Initialize()进行初始化。
3.根据实际情况,调用Write_Data()/Read_Data()
二、电路图
电路
三、简单存储实例代码截图
代码
四、at24c02.h头文件代码
#include<intrins.h>
#include<AT89X51.H>//#include<REG52.H>
#define uchar unsigned char
sbit SCL=P1^6;
sbit SDA=P1^7;
/*************************************
//延时5us
*************************************/
void Delay(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
/*************************************
//总线初始化
*************************************/
void Bus_Initialize(void)
{
SDA=1;
Delay();
SCL=1;
Delay();
}
/*************************************
//---启动信号,开始数据传输
*************************************/
void Start_Signal(void)
{
SDA=1;
Delay();
SCL=1;
Delay();
SDA=0;
Delay();
}
void Response_Signal(void)
{
uchar i;
SCL=1;
Delay();
while((SDA==1)&&(i<250))
i++;
SCL=0;
Delay();
}
/*************************************
//---停止信号,停止数据传输
*************************************/
void Stop_Signal(void)
{
SDA=0;
Delay();
SCL=1;
Delay();
SDA=1;
Delay();
}
void Write_One_Byte(uchar m)
{
uchar temp,i;
temp=m;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
Delay();
SDA=CY;
Delay();
SCL=1;
Delay();
}
SCL=0;
Delay();
SDA=1;
Delay();
}
uchar Read_One_Byte()
{
uchar k,i;
SCL=0;
Delay();
SDA=1;
Delay();
for(i=0;i<8;i++)
{
SCL=1;
Delay();
k=(k<<1)|SDA;
SCL=0;
Delay();
}
return k;
}
/*************************************
//写一个字节数据函数,开始写数据到存储器
*************************************/
void Write_Data(uchar address,uchar Data)
{
Start_Signal();//启动总线
Write_One_Byte(0XA0);//发送从机写地址
Response_Signal();//等待从机应答
Write_One_Byte(address); //发送从机字地址
Response_Signal();//等待从机应答
Write_One_Byte(Data);//发送字节数据
Response_Signal();//等待从机应答
Stop_Signal();//结束总线
}
/*************************************
//读一个字节数据函数,从存储器读取数据
*************************************/
uchar Read_Data(uchar address)
{
uchar Data;
Start_Signal(); //启动总线
Write_One_Byte(0XA0);//发送从机写地址
Response_Signal(); //等待从机应答
Write_One_Byte(address);//发送从机读地址
Response_Signal();//等待从机应答
Start_Signal(); //启动总线
Write_One_Byte(0XA1);//发送从机读地址
Response_Signal();//等待从机应答
Data=Read_One_Byte();//存储到DATA
Stop_Signal();//结束总线
return Data;//返回存储的数据DATA
}
51单片机i2c总线
51单片机i2c总线
一句话描述
i2c使用2根线传输数据,一根是时钟线,一根是数据线。
i2C总线介绍
1、12C总线 (Inter IC BUS) 是由Philips公司开发的一种通用数据总线。
两根通信线:SCL (Serial Clock) 、SDA (Serial Data)。同步、半双工,带数据应答通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用着来说,使用通用的通信协议可以避免学习各种各样的自定义协议降低了学习和应用的难度。i2c电路规范
1、所有12C设备的SCL连在一起,SDA连在一起
2、设备的SCL和SDA均要配置成开漏输出模式
3、SCL和SDA各添加一个上拉电阻,阻值一般为4.7KQ左右
4、开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题
热上拉模式是指引脚一端接高电平,一端接gnd,当开关闭合式为低电平,开关断开时被上拉成高电平。
开漏输出模式是指引脚直接接一个开关和gnd连接,开关闭合卫低电平,开关断开为悬空状态。cpu与设备1通信时,其他设备全部断开(理用开漏模式),互不影响。
i2c时序结构
开始条件
SCL高电平期间,SDA从高电平切换到低电平。
终止条件
SCL高电平期间,SDA从低电平切换到高电平。
发送或接收一位
SCL低电平时,发送端在SDA放入数据电平(0,1);SCL高电平时,接收端读取SDA线上的电平。SCL线随时间变化而变化,变化一个周期发送一位数据。
发送接收应答
在接收完一个字节之后,主机在下一个时钟发送一位数据,0表示应答,1表示非应答。
和发送数据一样,只是发送的这一位数据表示应答数据。
i2c数据帧
发送或接收数据
标识开始发送或接收数据 S标识数据发送或接收的地址 + 应答发送或接收数据1 + 应答发送或接收数据2 + 应答发送或接收数据N + 应答标识发送或接收数据完成 P相关问答
用 51单片机 做一个模拟 I2c 的实验,E2PROM用的是at24c512b,但是...空气净化器BlueairBlueairProM讨论回答(2)延时函数有问题!24C512的地址位是16位的,不能只传送八位地址位2条回答:延时函数有问题!
蓝牙与 51单片机 该怎么连接?蓝牙模块最次也有串口,用串口可实现互连也可以用SPI、IIC,甚至用GPIO总线、GPIO自己设计通讯方法,这些都可以实现交互数据蓝牙模块最次也有串口,用串口可实现...
stm32和 51单片机 有什么区别?STM32和51单片机是两种常见的嵌入式系统开发平台,区别如下:1.架构:STM32系列采用了现代化的ARMCortex-M内核架构,具有强大的处理能力和丰富的资源,支持高...
51单片机 串口怎么找?在51单片机中,串口通常是通过两个引脚来实现的,即TXD(发送引脚)和RXD(接收引脚)。下面是找到51单片机串口的一般步骤:1.确定串口的引脚:查阅51单片机的...
stc 单片机i2c 的应用?STC单片机内部集成了一个I2C接口电路,对外引脚是I2CSCL和I2CSDA,前者是时钟线,后者是数据线,硬件上这两个引脚需接10K左右的上拉电阻。这个接口可外挂I2C外...
stc15w 单片机 有iic接口吗?I2C是外部的EEPROM芯片24CXX的通信协议,而STC15F2K60S2内部是有EEPROM的,同样是可掉电保护的,但是并行的,直接读/写8位数据,只需几条指令就搞定了。比I2C的...
有IIC总线的 单片机 和没有的有什么区别?编程的时候为什么都需要模拟IIC时序呢?只有STM32F103C8051F等档次较高的单片机才有IIC总线接口.大多数单片机都没有IIC总线接口,用普通IO口模拟程序也不复杂,传输速度也不低,所以一般都用模拟I...
单片机 ,什么是串行口,什么是并行口? - 小葵的杂货铺 的回...串口数据是按1位为单位传输数据的口,51单片机是P3.0、P3.1组成串口。并口是以1字节为单位传输数据的口,51单片机一般以P0口扩展并口。两种接口都是...
单片机 的IO口是不是既可以串行使用也可以并行使用?是的。所有的I/O都可以并行使用也可以串行使用,但串行使用要看情况,如果单片机内部具有诸如UART、I2C、SPI硬件模块的,可以通过对模块进行配置而直接使用。如...
对 单片机 编程要用什么软件? 单片机 编程如何快速入门?你好,我就是做单片机嵌入式软件开发的,对于第一个问题,单片机开发一般都是用C语言,单片机的开发平台即编译器通用的有keil、IAR、eclipse等,现在eclipse也支...