I2C总线器件应用设计.docx

上传人:b****3 文档编号:27094856 上传时间:2023-06-27 格式:DOCX 页数:25 大小:206.18KB
下载 相关 举报
I2C总线器件应用设计.docx_第1页
第1页 / 共25页
I2C总线器件应用设计.docx_第2页
第2页 / 共25页
I2C总线器件应用设计.docx_第3页
第3页 / 共25页
I2C总线器件应用设计.docx_第4页
第4页 / 共25页
I2C总线器件应用设计.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

I2C总线器件应用设计.docx

《I2C总线器件应用设计.docx》由会员分享,可在线阅读,更多相关《I2C总线器件应用设计.docx(25页珍藏版)》请在冰豆网上搜索。

I2C总线器件应用设计.docx

I2C总线器件应用设计

 

2012~2013学年第2学期

《单片机原理及应用》

课程设计报告

 

题目:

I2C总线器件应用设计

专业:

10自动化

班级:

指导教师:

电气工程系

2013年5月5日

 

1、任务书

课题名称

I2C总线器件应用设计

指导教师(职称)

林开司

执行时间

2012~2013学年第2学期第10周

学生姓名

学号

承担任务

 

设计目的

(1)掌握I2C总线器件的读写原理并设计一个器件写入0~4这5个数字,从地址0开始存入,然后把它读出来送到LCD1602液晶显示。

(2)通过设计巩固所学的知识

(3)提高我们的综合实践能力

 

 

设计要求

 

(1)挂接两个I2C总线器件(24C02),分别命名为A和B,向其中一个器件A写入0~4这5个数字,从地址0开始存入。

(2)将A中已经有的5个数倒叙存入B中,从地址0开始存放。

(3)从地址0开始到地址4结束,将B中每个地址的内容显示于数码管中。

(4)扩展:

在掌握了前三个操作原理的基础上,尝试使用I2C器件存储单片机要用到的有用信息,并在需要的时候调用。

 

摘要

在一些应用系统设计中,有时需要对工作数据进行掉电保护,如电子式电能表等智能化产品。

若采用普通存储器,在掉电时需要备用电池供电,并需要在硬件上增加掉电检测电路,但存在电池不可靠及扩展存储芯片占用单片机过多口线的缺点。

本文采用具有I2C总线接口的串行EEPROM器件AT24C02芯片可很好地解决掉电数据保持问题,且硬件电路简单。

关键字:

I2C总线;时钟信号;LCD液晶;存储芯片

 

I2C总线器件应用设计

 

第一章I2C总线的概念

I2C(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。

也可以简单地理解为I2C是微控制器与外围芯片的一种通讯协议。

在不同的书籍中,可能会称为I2C,IIC,或者I平方C,但是概念也是一样的,只是叫法不同。

I2C总线特点

I2C总线的优点非常多,其中最主要体现在1:

硬件结构上具有相同的接口界面;2:

电路接口的简单性;3:

软件操作的一致性。

I2C总线占用芯片的引脚非常的少,只需要两组信号作为通信的协议,一条为数据线(SDA),另一条为时钟线(SCL)。

因此减少了电路板的空间和芯片管脚的数量,所以降低了互联成本。

总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。

I2C总线还具备了另一个优点,就是任何能够进行发送和接收数据的设备都可以成为主控机。

当然,在任何时间点上只能允许有一个主控机。

图1总线连接图

I2C总线的构成及信号类型:

构成:

数据线SDA

时钟线SCL

数据传输的有效规则:

1.SCL高电平期间,SDA保持不变,数据有效。

2.SCL低电平期间,SDA改变,数据变化有效。

应用方式:

1.标准硬件i2C端口(硬核)。

2.软件模拟i2C端口(可编程器件用软件实现)

 

第二章I2C总线工作原理

图1为I2C总线的连接图。

I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。

在单片机与被控IC之间,最高传送速率100kbps。

各种I2C器件均并联在这条总线上,就像电话线网络一样不会互相冲突,要互相通信就必须拨通其电话号码,每一个I2C模块都有唯一地址。

并接在I2C总线上的模块,既可以是主控器(或被控器),也可以是发送器(或接收器),这取决于它所要完成的功能。

I2C总线在传送数据过程中共有四种类型信号,它们分别是:

起始信号、停止信号﹑应答信号与非应答信号。

[起始信号]SCL高电平时,SDA产生高到低的下降沿跳变

[停止信号]SCL高电平时,SDA产生低到高的上升沿跳变

[应答信号]接收数据的器件在接收到8bit数据后,向发送数据的器件发出低电平信号,表示已收到数据。

这个信号由接收数据的器件发出。

发送端收到应答信号后,作出分析判断。

若未收到应答信号,则判断为受控单元出现故障。

2.1I2C总线数据的传送规则

起始信号:

在I2C总线工作过程中,当SCL为高电平时,SDA由高电平向低电平跳变,定义为起始信号,起始信号由主控机产生。

如图2所示

图2开始信号

停止信号:

当SCL为高电平时,SDA由低电平向高电平跳变,定义为停止信号,此信号也只能由主控机产生。

如图3所示。

图3停止信号

应答信号:

I2C总线传送的每个字节为8位,受控的器件在接收到8位数据后,在第9个脉冲必须输出低电平作为应答信号,同时,要求主控器在第9个时钟脉冲位上释放SDA线,以便受控器发出应答信号,将SDA拉低,表示接收数据的应答(如图4所示)。

若果在第9个脉冲收到受控器的非应答信号(如图5所示),则表示停止数据的发送或接收。

图4应答信号图5非应答信号

其次,每启动一次总线,传输的字节数没有限制。

主控件和受控器件都可以工作于接收和发送状态。

总线必须由主器件控制,也就是说必须由主控器产生时钟信号﹑起始信号﹑停止信号。

在时钟信号为高电平期间,数据线上的数据必须保特稳定,数据线上的数据状态仅在时钟为低电平的期间才能改变(如图6),而当时钟线为高电平的期间,数据线状态的改变被用来表示起始和停止条件(如图2与3所示)。

图6数据的有效性

2.2总线数据传送的时序要求

为了保证数据传送的可靠性,标准的总线数据传送有着严格的时序要求,如总线上时钟信号的最小低电平周期为4.7us,最小的高电平周期为4us等。

用单片机的普通I/O口模拟总线的数据传送时,单片机的时钟信号都能满足SDA、SCL上升沿、下降沿的时间要求,因此,在时序模拟时,最重要的是保证典型信号。

图7为总线的完整时序,在这里有一点要加以说明的,当主控器接收数据时,在最后一个数据字节,必须发送一个非应答信号,使受控器释放数据线,以便主控器产生一个停止信号来终止总线的数据传送。

图7总线的完整时序

2.3I2C总线的控制程序实现

/*I2C的启动程序*/(时钟线高时,数据线上升沿)

VoidI2CStart(void)

{

SDA=1;//释放数据线

SomeNOP();//延时

SCL=1;//时钟线拉高

SomeNOP();//延时

SDA=0;//数据线拉低

SomeNOP();//延时

SCL=0;//时钟线拉低

SomeNOP();//延时

/*I2C的停止程序*/(时钟线高时,数据线上升沿)

voidI2CStop(void)

{

SDA=0;

SomeNOP();

SCL=1;

SomeNOP();

SDA=1;

SomeNOP();

}

/*I2C的应答程序*/

voidACK(void)//Acknowledge信号

{

SDA=0;//发送0,应答

SomeNOP();

SCL=1;

SomeNOP();//产生时钟高电平

SCL=0;

SomeNOP();

}

voidNACK(void)//没有Acknowledge信号

{

SDA=1;//发送1,非应答

SomeNOP();

SCL=1;

SomeNOP();//产生时钟高电平

SCL=0;

SomeNOP();

}

下面我们来看一下关于I2C总线的读操作与写操作:

图8总线写格式

写操作就是主控器件向受控器件发送数据,如图8所示。

首先,主控器会对总线发送起始信号,紧跟应该是第一个字节的8位数据,但是从地址只有7位,所谓从地址就是受控器的地址,而第8位是受控器约定的数据方向位,“0”为写,从图7中我们可以清楚地看到发送完一个8位数之后应该是一个受控器的应答信号。

应答信号过后就是第二个字节的8位数据,这个数多般是受控器件的寄存器地址,寄存器地址过后就是要发送的数据,当数据发送完后就是一个应答信号,每启动一次总线,传输的字节数没有限制,一个字节地址或数据过后的第9个脉冲是受控器件应答信号,当数据传送完之后由主控器发出停止信号来停止总线。

写8位数据

bitWrite8Bit(unsignedcharinput){

unsignedchartemp;

for(temp=8;temp!

=0;temp--){

SDA=(bit)(input&0x80);

SCL=1;

SCL=0;

input=input<<1;

}

}

图9总线读格式

读操作指受控器件向主控器件发送数,其总线的操作格式如图5-28。

首先,由主控器发出起始信号,前两个传送的字节与写操作相同,但是到了第二个字节之后,就要从新启动总线,改变传送数据的方向,前面两个字节数据方向为写,即“0”;第二次启动总线后数据方向为读,即“1”;之后就是要接收的数据。

从图9的写格式中我们可以看到有两种的应答信号。

一种是受控器的,另一种是主控器的。

前面三个字节的数据方向均指向受控器件,所以应答信号就由受控器发后出。

但是后面要接收的N个数据则是指向主控器件,所以应答信号应由主控器件发出,当N个数据接收完成之后,主控器件应发出一个非应答信号,告知受控器件数据接收完成,不用再发送。

最后的停止信号同样也是由主控器发出。

读8位数据

unsignedcharRead8Bit(){

unsignedchartemp,rbyte=0;

for(temp=8;temp!

=0;temp--){

SCL=1;

rbyte=rbyte<<1;

rbyte=rbyte|((unsignedchar)(SDA));

SCL=0;

}

return(rbyte);

}

 

2.4I2C器件24C02

24C02是一个2K串行CMOSE2PROM,内部含有256个8位字节,该器件通过I2C总线接功能列表。

图1024C02引脚排列

管脚名称

功能

A0﹑A1﹑A2

这三个引脚用于多个器件同时使用时设置区分器件地址,当这些引脚悬空时默

认为0。

在同一总线中最多可同时使用8个24C02器件。

如果总线只有一个24C02器件被寻址,这三个地址可悬或接地。

SDA

双向串行数据/地址管脚,用于器件所有数据的发送或接收,SDA是一个开漏输出管脚。

SCL

串行时钟。

串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚

WP

写保护引脚。

当WP引脚连接到VCC时芯片里面的内容为只读内容而不能进行写操作。

而当WP引脚连接到VSS时芯片里面的内容可进行正常的读/写操作。

VCC

+1.8V~6.0V工作电压

VSS

图1124C02引脚功能

图12是DIP封装的24C02与80C51的接口方案。

其中A0、A1、A2是芯片地址线,单片使用时接地;SCL是串行移位时钟端;SDA是串行数据或地址端,CPU通过SDA访问芯片;WP是写保护端,接高电平时芯片只能读。

 

图1224C02执行写操作时与80C51的接口

 

第三章I2C总线器件应用设计图

3.1复位电路及时钟电路

复位电路和时钟电路是维持单片机最小系统运行的基本模块。

复位/时钟电路

3.2系统显示电路

 

第四章仿真分析

由单片机向24C02—A号芯片写入“01234”,然后单片机再从该芯片相应的存储单元中读出刚才写入的信息,然后送LCD1602显示,显示如下图所示:

将24C02—A中读出”01234”信息,反过来送24C02—B存储,然后在LCD1602上显示如下图:

 

第五章心得与体会

这次我们做的是单片机课程设计,有很多的收获与体会,有关于电力电子方面的,更多的是关于人与人之间关系方面的。

我在自己的努力下,在老师同学们的帮助下,终于把整个课程设计完成了,实现了预定的目标。

在几天几夜的努力,终于有了头绪,然后又在同学的帮助下,找到了一些参考书,又在这写书的帮助下了解了电力电子设计的各种方法,在设计过程中常常出现一些棘手的问题,不过在团队的合作下,我们最终找到了解决的方法。

一个多星期后我们的课程设计终于完成了,虽然还有很多不完善的地方,但我们的基本目标已经实现。

我们回顾了很多以前的东西,也发现了很多的问题,以前都没遇见过的,收获很大,而且我还学会了使用一些新的软件。

看着我们大家做的课程设计,自己就会又欣慰又难过,欣慰的是我们终于把它做出来了,而且,做的还好,难过的是自己知道还有很多的不足,但是,由于认识的有限,无法去完善,才知道“书到用时方恨少”!

此次单片机课程设计让我们对软开关技术游乐更深入的了解,可以把它同实际相结合,同时,又让我们学会了一个新的应用软件。

在整个设计过程中,通过怎样对把实际问题和所学的知识联系起来分析,锻炼了我们对事情的分析能力,通过怎样解决过程中出现的问题,提高了我们查找文献的能力、对网络资源的利用能力和和其他同学的交流沟通能力。

而且,经历这次的课程设计,我们也学会了自学和分工协作。

我们觉得每一次的课程设计,都是让我们对原有的知识从了解表面到深入本质,从个体学习到整体把握的跳跃,对新知识的汲取,更是让我们把课本的知识应用到实际中,让我们了解了我们的学习有什么用,能够解决什么样的问题,增加我们的自信和学习的动力。

总之,通过这次的课程设计,我们收获匪浅。

 

参考文献

[1]李广弟等单片机基础北京航空航天出版社,2001.7

[2]楼然苗等51系列单片机设计实例北京航空航天出版社,2003.3

[3]唐俊翟等单片机原理与应用冶金工业出版社,2003.9

[4]刘瑞新等单片机原理及应用教程机械工业出版社,2003.7

[5]吴国经等单片机应用技术中国电力出版社,2004.1

[6]李全利,迟荣强编著单片机原理及接口技术高等教育出版社,2004.1

[7]侯媛彬等,凌阳单片机原理及其毕业设计精选2006年,科学出版社

[8]罗亚非,凌阳十六位单片机应用基础2003年北京航空航天大学出版社

[9]北京北阳电子有限公司,061A凌阳单片机及其附带光盘2003年

[10]张毅刚等,MCS-51单片机应用设计,哈工大出版社,2004年第2版

 

附录

#include

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharcodedis_code1[]={"24C02_A"};

unsignedcharcodedis_code2[]={"24C02_B"};

bitwrite=0;//写24C02的标志;

sbitsda=P2^4;

sbitscl=P2^3;

sbitlcden=P3^4;//液晶使能端

sbitlcdrs=P3^5;//液晶数据命令选择端

ucharsec,tcnt;

voiddelay()

{;;}

voiddelay1ms(uintxms)

{

uinti,j;

for(i=xms;i>0;i--)//i=xms即延时约xms毫秒

for(j=110;j>0;j--);

}

voidwrite_com(ucharcom)

{

lcdrs=0;

P0=com;

delay1ms(5);

lcden=1;

delay1ms(5);

lcden=0;

}

voidwrite_data(uchardate)

{

lcdrs=1;

P0=date;

delay1ms(5);

lcden=1;

delay1ms(5);

lcden=0;

}

voidinitlcd()

{

lcden=0;

write_com(0x38);//设置16X2显示,5X7点阵,8位数据接口

write_com(0x0c);//设置开显示,不显示光标

write_com(0x06);//写一个字符后地址指针加1

write_com(0x01);//显示清零,数据指针清零

}

voidstart()//开始信号

{

sda=1;

delay();

scl=1;

delay();

sda=0;

delay();

}

voidstop()//停止

{

sda=0;

delay();

scl=1;

delay();

sda=1;

delay();

}

voidrespons()//应答

{

uchari;

scl=1;

delay();

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

scl=0;

delay();

}

voidno_ack()

{

sda=1;

scl=1;

delayNOP();

sda=0;

scl=0;

}

voidinitIIC()

{

sda=1;

delay();

scl=1;

delay();

}

voidwrite_byte(uchardate)

{

uchari,temp;

temp=date;

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

{

temp=temp<<1;

scl=0;

delay();

sda=CY;

delay();

scl=1;

delay();

}

scl=0;

delay();

sda=1;

delay();

}

ucharread_byte()

{

uchari,k;

scl=0;

delay();

sda=1;

delay();

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

{

scl=1;

delay();

k=(k<<1)|sda;

scl=0;

delay();

}

returnk;

}

voidwrite_add(ucharadrIC,ucharaddress,uchardate)

{

start();

write_byte(adrIC);

respons();

write_byte(address);

respons();

write_byte(date);

respons();

stop();

}

ucharread_add(ucharadrIC,ucharaddress)

{

uchardate;

start();

write_byte(adrIC);

respons();

write_byte(address);

respons();

start();

write_byte(adrIC|1);

respons();

date=read_byte();

//no_ack();

stop();

returndate;

}

voidwr_string(unsignedcharstr[])

{

unsignedcharnum=0;

for(num=0;num<16;num++)

{

write_data(str[num]);

delay1ms(100);

}

}

voidlcd_display(unsignedcharadd,unsigneddat)

{

}

voidmain()

{

unsignedchari,date,data_b;

unsignedcharj=0;

initIIC();

initlcd();

write_com(0x80);

wr_string(dis_code1);

delay1ms(1000);

for(i=0;i<5;i++)//向1602中连续写入01234;

{

write_add(0xa0,i,i);

delay1ms(5);

}

for(i=0;i<5;i++)//读出A中的值送LCD1602显示

{

date=read_add(0xa0,i);

write_com(0xc0+2+i);

write_data(0x30+date);

}

delay1ms(200);

write_com(0x01);

write_com(0x80);

wr_string(dis_code2);

while

(1);

}

 

7、答辩记录及评分表

课题名称

I2C总线器件应用设计

答辩教师(职称)

答辩时间

 

 

评分表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1