APP下载

基于proteus的C51单片机I2C总线的实现

2017-09-03王九龙郑贵金

绥化学院学报 2017年8期
关键词:绥化字节时序

王九龙 郑贵金

(绥化学院电气工程学院 黑龙江绥化 152061)

基于proteus的C51单片机I2C总线的实现

王九龙 郑贵金

(绥化学院电气工程学院 黑龙江绥化 152061)

I2C总线是由Philips公司设计的一款具有两根接口的总线,其中一个接口为SCL,为时钟信号,另一个接口为SDA,是数据信号,这种总线具有很多有优点,如:接口线的数量少,通信速度比较快等。由于80C51系列单片机并没有配置I2C总线接口,给I2C总线的使用带来了不便。文章分别通过C语言与汇编语言分别对I2C时序进行编程,模拟了I2C总线在芯片间的通信。并在proteus软件上进行了读写仿真验证。

I2C 总线;proteus;数据传输;AT24C04

一、I2C总线的架构

I2C总线是能够自动找寻从器件的地址、使得较高速率设备与较低速率的设备之间实现同步传输和优化的挑选需要的从器件进行高性能数据传送的总线。这种总线是以串行的方式在主期间与从器件之间进行数据传送的。I2C总线有两根可以进行双向数据传送的端口,一个端口是SDA,另一个端口是SCL[1-2]。其中,SCL负责时钟信号的输入,用来控制数据双向传送的时间顺序,SDA负责数据的串行输入,互相连接设备的所有数据端口均悬挂在此线上。图1为所示I2C的架构。

图1 I2C总线的架构

二、I2C总线的时序及程序实现

(一)I2C总线的典型信号及实现。I2C总线的数据传输有严格的时序要求,但主要包括以下四种典型信号:1)起始信号 S,2)终止信号 P,3)发送应答信号(0),4)发送非应答信号(1)[3-4]。如图2所示。

图2 起始信号、终止信号、发送应答信号、发送非应答信号时序

1.起始信号S。起始信号是用来启动该总线的,为了保证起始信号有效,需要严格按照图2所示的时间顺序进行,其中两种信号的持续时间,均不能低于图中所标示的时间。实现程序如下:

2.终止信号P。终止信号是用来释放该总线的,为了保证终止信号有效,需要严格按照图2所示的时间顺序进行,其中两种信号的持续时间,均不能低于图中所标示的时间。实现程序如下:

3.发送应答信号(0)。从器件通过接受应答信号通知主器件,一个字节的数据已被成功接受。只有严格按照图中所标示的时间顺序进行且两种信号的持续时间均不低于所标注的时间,发送应答信号才有效。实现程序如下:

4.发送非应答信号(1)。从器件通过接受非应答信号通知主器件,一个字节的数据接受失败。只有严格按照图中所标示的时间顺序进行且两种信号的持续时间均不低于所标注的时间,发送非应答信号才有效。实现程序如下:

(二)I2C总线的读写传输格式。

1.主机的写操作格式。首先,主机会先发出起始信号S,从而使得I2C总线启动;之后进行从器件的选择,会下发一个控制字节;刚才被选中的从器件在进行确认地址后,会在SDA线上发送一个应答信号,以回复主器件。主机接收到应答信号后开始数据传送。传送数据开始后,主机发送一个字节内容以确认写入地址,当主机接收到从器件发送回来的应答信号之后,主机开始一个个发送需要传送的字节的每一位(从高位到低位)。每完成一个数据需等待一个回答。当主机发送了P信号后,总线的控制权将被交出,终止操作[5]。如图3。

图3 主机写操作格式

2.主机的读操作格式。对从机进行读出时,主机须先发送一个对该从器件的控制字节即“伪写”。伪写的目的是选择读出从器件,从器件确认是自己的地址后,在总线上产生一个应答信号作为响应。随后,主机发送一个字节数据以确定读出首地址,主机收到从器件的应答信号后,重复一次起始信号,并将数据传送方向确定为“读出”。收到应答信号后开始读取各字节。每读取一个字节,主机都要回复应答信号。直到所有的数据读取完后,主机将返回一个“非应答信号(0)”,以通知从器件所有的数据均以读取完毕,随后,主机将会发出一个P信号,总线的控制权将被交出,结束操作[6]。如图4。

图4 主机读操作格式

三、89C51单片机的I2C总线硬件搭建

为了模拟I2C总线在89C51系列单片机背景下芯片间的通信。本文在proteus上搭建了AT89C51单片机与AT24C04C的通信模型[7]。AT24C04 E2PROM是典型的I2C总线接口器件,容量为512B[8-9]。仿真电路模型如图5所示。

图5 AT89C51与AT24C04C通信仿真电路

仿真电路包含复位电路、晶振电路、I2C通讯部分电路与输出电路四部分。利用P1.4口输出SCL时钟信号,利用P1.5口输出SDA数据信号[10-11]。

四、AT89C51单片机模拟I2C的仿真运行

在上文给出的通信仿真电路上,模拟AT89C51与AT24C04C通信[12-13]。

(一)模拟AT89C51单片机向AT24C04C内写入数据。通过控制SCL时钟线与SDA信号线,预将16个十六进制数分别写入AT24C04C的0x00~0x0f单元中。对应单元的内容见表1。

表1 16个单元内的16个数据对照表

仿真运行后,AT24C04C0x00~0x0f单元的数据见图6。

图6 仿真后AT24C04C中0x00~0x0f单元的数据

由此可见,AT24C04C的0x00~0x0f单元内的数据与预写入数据内容一致,AT89C51单片机向AT24C04C内写入数据仿真成功。

(二)模拟AT89C51单片机从AT24C04C内读出数据。将刚刚写入的16个数据从AT24C04C内部读入89C51单片机[14],并由P2.0口输出,驱动共阳极的8个LED等闪烁,根据读出数据可知,将产生流水灯的效果。P2口的字节地址为0xa0,当然,也可从C51的特殊功能寄存器(SFR)内读该数据。如图7、如图8所示。

图7 P2口输出0x04时,对应的仿真现象

图8 89C51单片机SFR的0xa0中同一时刻数据

经过仿真验证,89C51单片机所读数据与所写数据一致,AT89C51单片机向AT24C04C内读出数据仿真成功。

五、总结

本文通过proteus搭建了AT89C51单片机与AT24C04C芯片进行I2C通信的仿真电路,经proteus仿真通信模型验证后,表明数据的写入与读取均能顺利完成。在C51系列单片机没有I2C总线的情况下,成功模拟出I2C总线在芯片间的通信。并使用C语言与汇编语言编写出I2C的4种典型时序及其数据的读写格式。经验证,程序简洁有效。

[1]李全利.单片机原理及接口技术[M].北京:高等教育出版社,2009.

[2]李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,2005.

[3]马忠梅,等.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2007.

[4]伍冯洁.Proteus虚拟仿真技术在I2C总线通信中的应用[J].太赫兹科学与电子信息学报,2015(4):675-678.

[5]黄鑫,王玉林,谢静.基于I2C总线的单片机系统设计与虚拟仿真[J].仪器仪表用户,2010(4):44-46.

[6]刘文光,张铭铭.51单片机I2C总线接口仿真研究[J].电子制作,2012(10):1-2.

[7]张远辉,张鼎,许昌,等.基于Proteus的XY数控工作台仿真模型设计[J].实验技术与管理,2015(3):133-136.

[8]赵辉,董德存.I2C总线技术及其应用实例[J].微型电脑应用,2005(4):61-63+66.

[9]石宗义.I2C总线时序分析及其模拟[J].太原理工大学学报,2004(1):53-56.

[10]刘心红,郭福田,孙振兴,等.Proteus仿真技术在单片机教学中的应用[J].实验技术与管理,2007(3):96-98+102.

[11]汪宁.Proteus软件的单片机仿真方法[J].山东轻工业学院学报(自然科学版),2007(1):24-27.

[12]周灵彬,张靖武.PROTEUS的单片机教学与应用仿真[J].单片机与嵌入式系统应用,2008(1):76-79.

[13]叶建波,朱双东.基于Proteus的单片机电路的虚拟仿真[J].电子工程师,2008(11):23-24+67.

[14]陈知红,王锦兰.Proteus仿真软件在电工学中的应用[J].实验技术与管理,2014(2):93-95+128.

[责任编辑 郑丽娟]

TP273

A

2095-0438(2017)08-0151-05

2017-02-02

王九龙(1988-),男,陕西宝鸡人,绥化学院电气工程学院助教,硕士,研究方向:嵌入式开发设计。

猜你喜欢

绥化字节时序
何藩纪实摄影创作中的主观因素研究
基于Sentinel-2时序NDVI的麦冬识别研究
No.8 字节跳动将推出独立出口电商APP
绥化天气雷达系统建设实施过程的关键点回顾
No.10 “字节跳动手机”要来了?
新闻评论应注意在“度”和“点”上着力——《绥化日报》加强舆论引导能力的实践与思考
基于FPGA 的时序信号光纤传输系统
简谈MC7字节码
一种毫米波放大器时序直流电源的设计
DPBUS时序及其设定方法