并行IO口模拟串行I2C总线技术Word文件下载.docx
《并行IO口模拟串行I2C总线技术Word文件下载.docx》由会员分享,可在线阅读,更多相关《并行IO口模拟串行I2C总线技术Word文件下载.docx(9页珍藏版)》请在冰点文库上搜索。
4键盘,4位IO口的简单的微控系统,通常需要48根线以上IO资源。
而一般的单片机,除去一些中断,复位,定时器IO口占用部分复用IO外,远不能满足需要,通常用8155、8255、373、245去扩展IO口,而硬件扩展IO口使系统线路复杂,印制板面积增大,成本增
高,且整体性能降低。
PHILIP公司推出I2C总线专利技术是解决资源紧张的有效措施。
I2C
总线是目前最完善的外围器件的扩展总线,具有最完善的总线规范和最方便用户界面,其上可挂接多达128个串行外围器件或设备。
用单片机普通IO口可模拟I2C总线,实现与外围器件或设备的通讯,只需占两个IO口,在硬件连接上省去片选线。
外围器件只需并行挂接于两IO上,连接必要的电源馈线Vcc或Vss既可,可节省大量的IO资源。
1 I2C总线规范
I2C总线是两线串行接口,即SDA串行数据线和SCL串行时钟线。
SDA是一个双向传输端,用于传输地址和数据进入器件或从器件发出数据。
SCL串行时钟端用于同步进入器件或从器件发出数据。
总线必须由一个主器件控制。
主器件为单片机或CPU,主器件产生串行时钟(SCL,控制与从器件通讯,并且产生开始和停止条件。
主器件和从器件均可工作在接收或者发送数据的状态,何种状态由主器件所发送的控制字的读写位决定。
读操作时,从器件为发送数据状态,主器件为接收数据状态,写操作则反之。
a
收稿日期:
1998209214
总线规程如下:
(1总线不忙时
数据和时钟线保持高电平。
(2开始数据传送(S
当时钟(SCL为高,SDA线由高到低变化决定开始条件。
所有命令必须在开始条件以后进行。
(3停止数据传送(P
当时钟(SCL为高,SDA线由低到高的变化决定停止条件。
所有操作必需在停止条件以前结束。
总线定时开始停止时序如图1
。
图1
(4数据有效
时钟信号低电平周期期间,数据线上数据才允许改变。
每位数据需要一个时钟脉冲。
总线定时数据传送时序如图2
图2
(5确认
在每一字节接收以后,当导址时,每一接收器件必须产生一确认信号(ACK。
主器件必须产生一个与确认位相对应的额外的额外时钟脉冲。
在额外时钟脉冲高电平期间主器件必须将SDA线拉为稳定的低电平,可确认器件。
若不在从器件输出的最后一个字节中产生确认位,主器件必须发送一个数据结束信号给从器件。
这种情况下,从器件必须保持为高电平,使主器件能产生停止条件。
(6从器件地址
总线规范中采用了七位地址方式,总线上每个从器件地址由四位器件编号地址和三位引脚地址给定。
七位地址数据D7-D1位,D7-D4为器件码,D3-D1为片选码。
D0为数据传输方向位,高电平为从器件的读操作,低电平为写操作。
2 应用实例
下面以单片机普通IO口模拟I2C总线与E2PROM存储器件通信为例,介绍其使用方法。
2.1 硬件设计
单片机选用89C2051单片机,存储器件采用八个与I2C总线兼容AT24C系列串行E2PROM,型号为ATMEL公司的AT24C0102。
它在应用系统中可进行+5v电源在线改写,无需配置专门写入电源,硬件连接线路如图3
图3
2.2 软件设计
单片机IO口模拟I2C总线,需严格遵循I2C总线规范。
(189C2051单片机作为主器件,其编程需严格按照I2C总线时钟规范,通过编程对P1.5置位或复位产生串行时钟,同时对P1.4操作,准备需发送的数据,总线定时开始停止时钟遵照图1,总线定时数据发送时钟遵照图2。
(224C0102B接收数据后,确认过程按I2C规程,通过编程使P1.5(SCL产生额外时钟脉冲,在P1.5为高电平期间,等候接收器件发出确认位,确认位使P1.4置低后,89C2051可继续发送第二字节。
(3从器件按I2C规程配置其控制字节。
24C0102B的器件码为1010,其控制字节配置为
操作方式
器件码片选读写读
1010×
×
I2.2.1 字节写操作编程
24C0102字节写周期如图4。
89c2051发出开始信号后,发送器件控制码,控制码包括四位器件码,三位片选码,以及低电平的读写位至总线,24C0102被寻址。
一个字地址字节将跟在第九时钟周期产生的确认位后。
因此,主器件发送的下一字节为地址字节,写入24C0102的地址指针,主器件接收来自24C0102的确认信号(ACK后,将发送数据字节,将其写入到寻址的存储器地址,24C0102再次发出确认信号,同时主器件产生停止条件
图4
将任意数分别存入三个24C0102中,地址都为00H,程序如下:
ORG 0000H
MAIN:
MOV R2,#00H ;
从器件首地址
MOV R1,A0H
;
第一块24C0102控制码ACALL CS
存数子程序MOV
R1,A2H ;
第二块24C0102控制码ACALL CS MOVE
R1,A4H ;
第三块24102控制码ACALL CS HERE:
AJMP
HERE FS:
SETB
P1.4 ;
开始条件SETB
P1.5 CLR
P1.4 CLR
P1.5 MOV
A,R1 ;
发送控制字ACALL FYZMOV A,R2 ;
发送首地址
ACALL FYZMOV A,R3 ;
发送数字
ACALL FYZSETB P1.4
停止条件SETB
P1.5 RET
FYZ:
MOV R6,#08H ;
发送一个字节程序XH:
CLR
P1.5 RLC
A MOV
P1.4,C SC:
P1.5 ;
SDA有效DJNZ
R6,XH CLR
P1.5 SETB
P1.4 ;
P1.4为输入状态SETB
P1.5 JB
P1.4,$ ;
等候接收从设备的ACK信号
P1.5RET
2.2.2 字节读操作编程要完成读随意地址字节的读操作,必须首先置字地址,通过将地址作为写操作一部分发送给24C0102完成。
发送字地址后,主器件在确认位后产生开始条件,以结束写操作。
主器件再次发出控制字节,使RW=1,24C0102产生确认位并发送出8位数据,主器件接收
后,不确认传递,产生一停止条件。
读随意地址字节周期如图5
图5
读出第一个24C0102,首地址为00H中的数。
程序如下:
QS:
SETB P1.4 ;
开始条件(S
SOETB P1.5
CLR P1.4
CLR P1.5
MOV A,#A0H
发送第一个24C0102写控制字ACALL FYZ
MOV A,#00H
发送从器件首地址ACALL FYZ
SETB P1.4
开始条件(SSETB P1.5
MOV A,#A1H
发送读控制字ACALL FYZ
LOOP:
MOV A,#00H
读数MOV R2,#08H
LOP:
SETB P1.4
P1.4为输入状态SETB P1.5
RL A
JNB P1.4, LP
SETB ACC.0
LP:
DJNZ R2,LOP
读出了一个字节CLR P1.5
停止条件(PSETB P1.5
SETB P1.4
RET
3 结束语
用单片机IO口模拟I2C总线,除存储器件外,各种I2C总线或与I2C总线兼容的外围器件,均可挂接在IO线,可有效解决IO的馈乏问题。
实际调试证明,所开发的软件系统
12西 南 工 学 院 学 报1999年工作正常,存取数据安全可靠。
参考文献1 ATMELCORP..SeriallCMOSEEPROMDatabook,A.S.A,19952 ATMELCorp.,AT89C2051MicrocontrollerDatabook,U.S.A,1995CONSTRUCTINGICBUSTECHNIQUEWITHPARALLELBUSMaJianguo LiuGuihua(SouthwestInstituteofTechnologyAbstract2 ConstructingI2Cbustechniquewithparallelbusatmirocontrollerisintroducedinthispaper.AApplicationhasdesigned,withAT89C2051,AT24C0102.Progrmmingandschemehasputforward.2KeyWords:
ICbus;
microcontroller;
parallelinterface;
serialinterface;
IOport©
1995-2005TsinghuaTongfangOpticalDiscCo.,Ltd.Allrightsreserved.