- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51单片机的I2C通信
1. I2C概念
I2C总线,是INTER INTEGRATED CIRCUITBUS的缩写,即“内部集成电路总线”。 I2C总线是Philips公司推出的一种双向二线制总线。目前Philips公司和其它集成电路制造商推出了很多基于I2C总线的外围器件。I2C总线 包括一条数据线(SDA)和一条时钟线(SCL)。协议允许总线接入多个器件,并支持多主工作。总线中的器件既可以作为主控器也可以作为被控器,既可以是发送器也可以是接收器。总线按照一定的通信协议进行数据交换。在每次数据交换开始,作为主控器的器件需要通过总线竞争获得主控权,并启动一次数据交换。系 统中各个器件都具有唯一的地址,各器件之间通过寻址确定数据接收方。AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8位存储空间,具有工作电压宽 (2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。AT24C02中带有片内寻址寄存器。每写入或读出一个数据 字节后,该地址寄存器自动加1,以实现对下一个存储单元的操作。所有字节都以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8字节的数据。图 6为AT24C系列芯片的封装图。各引脚功能如下:EPROM(Erasable Programmable ROM,可擦除可编程ROM)芯片可重复擦除和写入,解决了PROM芯片只能写入一次的弊端。EPROM芯片有一个很明显的特征,在其正面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以看到其内部的集成电路,紫外线透过该孔照射内部芯片就可以擦除其内的数据,完成芯片擦除的操作要用到EPROM擦除器。EPROM内资料的写入要用专用的编程器,并且往芯片中写内容时必须要加一定的编程电压(VPP=12—24V,随不同的芯片型号而定)。EPROM的型号是以27开头的,如27C020(8*256K)是一片2M Bits容量的EPROM芯片。EPROM芯片在写入资料后,还要以不透光的贴纸或胶布把窗口封住,以免受到周围的紫外线照射而使资料受损。 EPROM芯片在空白状态时(用紫外光线擦除后),内部的每一个存储单元的数据都为高电平。EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。一般用在即插即用。 EEPROM(电可擦写可编程只读存储器)是可用户更改的只读存储器(ROM),其可通过高于普通电压的作用来擦除和重编程(重写)。不像EPROM芯片,EEPROM不需从计算机中取出即可修改。在一个EEPROM中,当计算机在使用的时候是可频繁地重编程的,EEPROM的寿命是一个很重要的设计考虑参数#includereg52.h
#define uchar unsigned char
sbit sda=P1^1;
sbit scl=P1^0;
bit flag;
uchar a;
uchar sec;
uchar t;
void delay()
{ ;; }
void start() //开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop() //停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons() //应答
{
uchar i;
scl=1;
delay();
while((sda==1)(i250))i++;
scl=0;
delay();
}
void init()
{
sda=1;
delay();
scl=1;
delay();
}
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i8;i++)
{
temp=temp1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
// scl=0;
// delay();
}
scl=0;
delay();
sda=1;
delay();
}
uchar read_byte()
{
uchar i,k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i8;i++)
{
scl=1;
delay();
k=(k1)|sda;
文档评论(0)