手把手教学51单片机第七课 | AT24C02的I²C总线数据传输

发布者:EnchantingEyes最新更新时间:2022-05-28 来源: eefocus关键字:51单片机  AT24C02  I²C总线  数据传输 手机看文章 扫描二维码
随时随地手机看文章

SCL(clock)时钟信号

SDA(data)数据总线


数据位的有效性规定

I²C总线进行数据传输时,时钟信号为高电平期间。数据总线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或者低电平状态才允许变化。


时序图

时序图

起始信号和终止信号

当时钟信号高电平,

SDA变低电平,为起始信号,若SDA变高电平,为终止信号

时序图

起始信号产生后 ,总线处于占用状态

终止信号产生后,总线处于空闲状态


void start()//起始信号

{

sda=1;

delay();

scl=1;

delay();

sda=0;

delay();

}


void stop()//终止信号

{

sda=0;

delay();

scl=1;

delay();

sda=0;

delay();

}


数据传送格式

(1)字节传送与应答

一帧=一个字节+应答位=9位,一个字节八位,第九位是应答位

在这里插入图片描述

从机如果接收不了信号,就将SDA数据线置于高电平 ,中断通信;若主机要中断通信,就要发送一个终止信号,从机应答,就能终端通信。


void responds()//应答信号

{

uchar i;

scl=1;

delay();

while((sda==1)&&(i<250))i++;

scl=0;

delay();

}


(2)数据帧格式

灰色为主机 白色为从机


发送数据

在起始信号后必须传送一个从机地址(7位),第八位是数据的传送放方向位(R/T),0表示主机发送数据给从机T(transmit),1表示主机接受从机数据R(receive)

在这里插入图片描述

读数据

在这里插入图片描述
在这里插入图片描述

E²PROM

这里用的是AT24C02


芯片地址1010(固定的)

地址控制字格式1010 A2A1A0 R/W, A2 A1 A0接高低电平后得到三位确定的编码,和1010形成确定的7位编码,即地址码。R/W为芯片读写控制位,0表示写操作,1表示读操作。(为了便于观察最后一位0或1,我们这里的A2A1A0全都接地)

片内子地址寻址:有256个,地址码相当于大楼的地址,子地址相当于大楼内的每一个房间号,0-255,共256个

字节写入方式

在这里插入图片描述

void write_byte(uchar date)//写地址

{

uchar i,temp;

temp=date;

scl=0;

delay();

for(i=0;i<8;i++)

{

temp=temp<<1;

sda=CY;//最高位

delay();

scl=1;

delay();

scl=0;

delay();

}

sda=1;

delay();

}


接下来解释补充


左移:最高位向左移动,移入PSW的CY位,最低位补0;右移最低位移除,最高位保留。

temp=temp<<1;//左移一位


数据是一个一个送出来的,具体如下

在这里插入图片描述

指定地址读操作

在这里插入图片描述


start();//启动

write_byte(0xa0);//器件地址+写

responds();//应答

write_byte(3);//子地址

responds();//应答

start();//这里要多一个应答

write_byte(0xa1);//器件地址+读

responds();//应答

P1=read_byte();//赋值

stop();//停止

while(1);


其中read_byte 具体如下


uchar read_byte() 

{

uchar i,j,k=0;

scl=0;

delay();

sda=1; 

delay();

for(i=0;i<8;i++)

{

scl=1;

delay();

j=sda;

k=(k<<1)|j;

scl=0;

delay(); 

}

return k;

}


k的起始数值为0,相当于0000 0000B


或运算,有1为1,全0位0


对于 “ k=(k<<1) | j; ”解释如下 

在这里插入图片描述

具体事例

#include

#define uchar unsigned char

#define uint unsigned int


sbit sda=P2^0;

sbit scl=P2^1;


void delay()

{

 ;;

}


void delay1(uchar z)

{

uchar x,y;

for(x=z;x>0;x--)

for(y=100;y>0;y--);

}

void start()//ÆðʼÐźÅ

{

sda=1;

delay();

scl=1;

delay();

sda=0;

delay();

}


void stop()//ÖÕÖ¹ÐźÅ

{

sda=0;

delay();

scl=1;

delay();

sda=1;

delay();

}


void responds()//Ó¦´ðÐźÅ

{

uchar i=0;

scl=1;

delay();

while((sda==1)&&(i<255))

i++;

scl=0;

delay();

}

void write_byte(uchar date)//дµØÖ·

{

uchar i,temp;

temp=date;

scl=0;

delay();

for(i=0;i<8;i++)

{

temp=temp<<1;

sda=CY;//×î¸ßλ  

delay();

scl=1;

delay();

scl=0;

delay();

}

sda=1;

delay();

}


uchar read_byte() //¶ÁÊý¾Ý

{

uchar i,j,k=0;

scl=0;

delay();

sda=1; 

delay();

for(i=0;i<8;i++)

{

scl=1;

delay();

j=sda;

k=(k<<1)|j;

scl=0;

delay(); 

}

return k;

}


void init()

{

scl=1;

sda=1;

}


void write_add(uchar address, uchar date)

{

start();//ÆðʼÐźÅ

write_byte(0xa0);//Æ÷¼þµØÖ· ¸ßËÄλ¹Ì¶¨1010 0±íʾҪд device adress

responds();

write_byte(address);//д 0-256 word adress

responds();

write_byte(date);//data

responds();

stop();

}


uchar read_add(uchar address)

{

uchar date;

delay1(100);

start();

write_byte(0xa0);//µØÖ·

responds();

write_byte(address);

responds();

start();//»»·½Ïò

write_byte(0xa1);//Æ÷¼þµØÖ· ºóÃæ±ä1 ÒòΪÊǶÁ

responds();

date=read_byte();

stop();

return date;

}


void main()

{

init();//³õʼ»¯ 

write_add(23,0xaa);

delay1(100);

P1=read_add(23);

while(1);

}

关键字:51单片机  AT24C02  I²C总线  数据传输 引用地址:手把手教学51单片机第七课 | AT24C02的I²C总线数据传输

上一篇:手把手教学51单片机 | 第五课 独立键盘 矩阵键盘
下一篇:手把手教学51单片机 | 1602液晶

推荐阅读最新更新时间:2024-11-16 22:48

51单片机C编程(三、4位数码管飞入效果)
4位数码管飞入效果,PROTEUS仿真电路图如下: #include reg51.h #define uchar unsigned char #define LED P0 uchar code tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳数码管数字码 uchar disp1 ={{8,10,10,10},{0,8,10,10},{5,0,8,10},{1,5,0,8},{10,1,5,0},{10,10,1,5},{10,10,10,1},{10,10,10,10}}; //数码管的8个显示状态 uchar scan;
[单片机]
I2C之知(五)--I2C总线的10bit地址以及通用广播地址
其实,10bit地址我没用过,通用广播地址更没用过.通用广播地址应该是在多个mcu之间用i2c进行通信时使用的.虽说没用到,但还是做了翻译,说不定以后有机会用到: 10bit地址 10bit的寻址扩展可能寻址的数目.有7bit地址和10bit地址的设备可以连接到相同的I2C总线上,而且7bit寻址和10bit寻址都可以用在所有的总线速度模式下.不过,10bit寻址用的不多. 10bit的从机地址由开始条件(S)或重复开始条件(Sr)后的两个字节组成.第一个字节的前7位是1111 0XX,XX是10bit地址的最高有效位的前两位.第一个字节的第8bit是读写位,决定传输方向. 尽管1111 XXX有8种可能的组合,然后只有1111 0
[嵌入式]
51单片机IO口模拟串口通讯6
/*************************************************************** *模拟接收程序,这个程序的作用从模拟串口接收数据,然后将这些数据发送到实际串口 *在单片机上模拟了一个串口,使用P3.2作为发送和接收端 *以P3.2模拟串口接收端,从模拟串口接收数据发至串口 *本程序来源于《单片机IO口模拟串口程序(发送+接收)》 *硬件环境:11.0592MHz, RXD P3.2 ***************************************************************/ #include reg51.h #include stdio.h
[单片机]
51单片机精确延时设计
在我们使用单片机的时候,很多情况下需要用到精确的延时。比如在跟DS18B20进行通讯的时候需要遵循严格的时序,这就需要我们严格把控程序执行的时间。 一般我们都是通过执行空语句的方式来使程序延时。这种方法是用循环嵌套的方式使程序执行空操作,达到延时的目的;除此之外还有使用中断的方式等。 我们可以通过debug来验证我们的函数延时是否准确。本次实验采用12M的晶振进行仿真模拟,应当对软件进行一些设置。在option中将晶振频率改为12M。用12M的晶振是因为这时候一条指令周期恰好是1us,方便我们计算。 首先我们构建一个延时函数void delay_10us( unsigned char tick ),即每次延时的最小单位
[单片机]
<font color='red'>51单片机</font>精确延时设计
51单片机~数码管电路原理分析,计算
数码管简介: 2. 电路分析:(原理如图)==74H573芯片原理分析 74H573芯片相当于一个锁存器,给公共引脚高电平就是给P2.6=1,之后给P0=0XFF,最后再给P2.6=0,就完成输出了。 最后当给了P2.6=0,后0XFF锁存在Q1~Q7,无论P0输入在变化,输出还是0XFF固定 加上210欧电阻防止数码管过亮,WEI对应输出端,前面的芯片对应A~G数码管输入端。所以想让数码管亮,需要给前一个芯片(接a ~g的)加0X00,后一个芯片(接WEI)接0XFF,这样才达到正负导通。 数码管断码编码表计算方法: 代码区:(详细解释看代码区)(调用74H595芯片是用来关闭其他电器的) 段选控制数字显
[单片机]
<font color='red'>51单片机</font>~数码管电路原理分析,计算
基于51单片机的电动车手机充电器设计
0 引言 众所周知,现在车载充电器在汽车产业中是非常普遍。在全球提倡环保和低碳节能的重要时期,骑自行车或电动自行车的人也越来越普遍,然而,现在的电动自行车都没有为手机充电的功能,因此,设计一种电动自行车车载手机充电器无疑是非常有必要的。本文就是利用电动车的太阳能电池板作为电源,设计一种种电动车车载手机充电器,以使骑电动车的人不再为手机充电发愁。 1 系统原理 在电动车的车篮上方位置处安装一块太阳能电池板套件,再将单片机控制电路与套件通过线路相连接,在太阳光充足的情况下,太阳能电池板可以工作,将吸收来的光辐射转换电能,为单片机控制电路提供电流和电压,再通过单片机控制电路为手机充电。太阳能电池板套件工作时,既可以为充电器单路
[单片机]
基于<font color='red'>51单片机</font>的电动车手机充电器设计
AT89S51单片机定时计数器的使用技巧详细说明
1. 实验任务 用AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,如此循环下去。0.2秒的闪烁速率也由定时/计数器T0来完成,也就是一个闪烁灯。 2. 电路原理图 图4.16.1 3. 系统板硬件连线 (1. 把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4上 4. 程序设计内容 (1. 由于采用中断方式来完成,因此,对于中断源必须它的中断入口地址,对于定时/计数器T0来说,中断入口地址为000BH,因此在中
[单片机]
AT89S<font color='red'>51单片机</font>定时计数器的使用技巧详细说明
基于LVDS的高速串行数据传输系统设计
  引言   在某型雷达信号处理系统中,要求由上位机(普通PC)实时监控雷达系统状态并采集信号处理机的关键变量,这就要求在处理机与上位机之间建立实时可靠的连接。同时,上位机也能对信号处理板进行控制,完成诸如处理机复位、DSP程序动态加载等功能。实验中,处理机和上位机之间的数据传输距离不小于8m。在这种前提下,计算机上现有的串口、并口显然不能满足要求,而USB2.0接口工作在高速模式时传输距离只有3m,其它诸如以太网传输的实时性难于满足要求,光纤通道传输的构建成本又太高。基于此,本文提出了一种采用LVDS高速串行总线技术的传输方案。   数据传输系统方案   由于系统要求传输距离大于8m,需采用平衡电缆。对于两端LVDS接口,可以采
[测试测量]

推荐帖子

CMOS电路中空闲引脚的处理方法
由于CMOS电路具有极高的输入阻抗,极易感应干扰电压而造成逻辑混乱,甚至损坏。因此,对于CMOS数字电路空闲的引脚不能简单地不管,应根据CMOS数字电路的种类、引脚功能和电路的逻辑要求,分不同情况进行处置。1、对于多余的输出端,一般将其悬空即可。如下图所示;2、CMOS数字电路往往在一个集成块中包含有若干个互相独立的门电路或触发器。对于一个集成块中多余不用的门电路或触发器,应将其所有输入端接到系统的正电源VDD,如下图所示。也可将一个集成块中多余不用的门电路或触
tiankai001 综合技术交流
做研发的一点心得体会!
出来作研发也一年了,很有些体会。在这里想与大家分享下!1.不要把自己搞成“实验机器”,要多在课题开展前进行详细的课题论证,信息搜集和筛选。企业一般做课题都很着急,课题进度要求很快,作为研发人员,要做大量的实验,筛选路线,打通路线,优化工艺,放大。其中最容易省略第一步,一般直接查文献,有几篇国内的,直接开做。有时忙活一个月,才发现路线选得有问题,三废多,成本高,或者做不出理想的产率,风风火火的又去查文献,查1,2片又开始新的路线。这样做其实事倍功半的。而且做月度总结时就只有一点,做的实验
songbo 单片机
网页post数据给嵌入式服务器,怎么样才能一个包发给服务器呢?
我们公司的嵌入式web服务器只能接收第一个包的数据。而且只能用post方法。一般数据post都分好几个包传倒服务器的。我想问下做网页的时候怎样才能使数据在一个包里发到服务器。网页post数据给嵌入式服务器,怎么样才能一个包发给服务器呢?接分是王道!这个简单啊,网上搜一下就得到答案了.友情Up!使用MySQL的嵌入式服务器,能够在客户端应用程序中使用具备全部特性的MySQL服务器。主要优点:?只要一个动态库就可以了,不需要安装ODBC驱动。?增加了速度,并使得嵌入
fgaggag 嵌入式系统
TUSB9261 -- USB3.0转SATA接口桥接芯片 烧录指南
TUSB9261是TI的一款USB3.0转SATA接口的桥接芯片,其相关的参考资料如下:http://www.ti.com/product/TUSB9261在使用过程中,因为需要对SPIflash做programming,所以会涉及到一定的操作步骤,很多人对此有些疑虑,其实只需要TUSB9261和USB口设计正确,。特别是在板子设计调试时,需要直接通过板载的方式直接进行SPIflash烧录的时候,可以按照下述的步骤来进行。从板卡角度上来看,只需要,只需要通
fish001 微控制器 MCU
改装原装电池为增强数码摄像机电池的技巧
本帖最后由jameswangsynnex于2015-3-319:57编辑SONY的特点之一就是标准配置低。比如记忆卡,8M容量简直就是鸡肋。又比如标配电池,容量小,使用时间短。所以大家买机,一般都要多配大容量卡、厚电池。对于手头这些“食之无味、弃之可惜”的鸡肋,其实只要动动手,鸡肋也可以升级的。虽然最近网上说小容量ms卡可破解的传言只是假消息,但电池是绝对可以改装的。以下贴出改造手头数块F330的pp,望能抛砖引玉。早一点的sonyDV标配是这种电池。7.2V5.0WH(
lorant 移动便携
CYT4BF芯片的掉电检测(BOD)问题
如题,如图该芯片手册中的BOD怎么还分high-voltage和low-voltage图片中的上升沿检测点,下降沿检测点怎么理解?CYT4BF芯片的掉电检测(BOD)问题ConfigurableoptionsforrobustBODTwothresholdlevels(2.7Vand3.0V)forBODonVDDDandVDDAOnethresholdlevel(1.1V)forBODonVCCD高压
shaorc 单片机
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved