原创 I2C串行总线在单片机8031应用系统中的设计与实现

2009-8-13 19:24 1794 5 5 分类: MCU/ 嵌入式
摘要】目前,MCS51系列、ATMEL89系列、68HC05系列等单片机应用很广,但他们均没有I2C总线接口,限制了在这些系统中使用具有I2C总线接口器件的应用。本文将介绍I2C串行总线的性能,并以串行E2PROM为例,给出在8031上利用I/O线实现I2C串行总线的方法和软件设计。电子园51单片机学习网 Br'|/P8Fp$cqX
  关键词:单片机,I2C总线,接口

电子园51单片机学习网-KJqv z0ei \/R


1 I2C总线概述
o_$]X:Lc8|YG |0  I2C (inter IC bus)总线是由Philips公司提出的串行通信接口规范,常见的中文译名有“集成电路间总线”或“内部集成电路总线”。它使用两条线:串行数据线(SDA)和串行时钟线(SCL),使连接到该总线上可访问的器件之间传送信息,属于多主控制总线。总线上的每个器件均可设置唯一的地址,从而可实现器件的有效访问。自Philips公司推出I2C总线后,Philips公司及其他公司纷纷相继推出了许多I2C总线产品,如各种微处理器、存储器(PCF8571/8570,128/256 字节)、A/D(PCF8591)、D/A(TDA8442/8444)转换器、E2PROM及各种I2C总线接口电路(PCF8584)等。由于I2C总线的使用可以简化电路,省掉了很多常规电路中的接口器件,提高产品的可靠性,在许多领域尤其在目前使用的IC卡获得了广泛的应用,国际标准ISO7816-2规定了IC卡与读写设备信息传输是基于I2C总线传输协议的。不仅如此,I2C总线在家电方面也有较广泛的应用,如国产长虹NC-3机芯彩电,东芝火箭炮等。尽管Philips公司推出带有I2C 总线接口的80C31系列单片机,如:8XC528、8XC552、8XC562、8XC751等,但在单片机组成的智能化仪表和测控系统中,乃有相当比例数量使用的是MCS51、AT89C5X系列单片机,如8031、8751、AT89C51、AT89C52等,它们不具有I2C串行总线接口。本文将结合笔者在开发智能化产品用到的E2PROM,介绍在不具有I2C串行总线接口的单片机8031应用系统中实现I2C总线接口的方法和软件设计。
电子园51单片机学习网|5s rP0A6iPk3R%D E


2 I2C总线的组成及I2C总线性能电子园51单片机学习网+K2IK/]3~!s aKI
2.1 I2C总线的特点
(}|9Xe0S&^tgN-k0  由于I2C总线仅用二条线来传达信息,因而具有独特的优点:电子园51单片机学习网$|hJ6Tr|4a
  ① 可最大限度地简化结构;可实现电路系统的模块化、标准化设计。电子园51单片机学习网%|z,p?/v
  ② 标准I2C总线模块的组合开发方式大大地缩短了新产品的开发周期。
;gI$?+N8U` {CN`?0  ③ I2C总线系统具有很大的灵活性;I2C总线各节点具有独立的电气特性。电子园51单片机学习网c:r!t0A8r+g8n
  ④ I2C总线系统可方便地对某一节点电路故障进行诊断与跟踪,有很好的可维护性。电子园51单片机学习网d1R2OQEH5nke
2.2 I2C总线的组成电子园51单片机学习网1^P/N]pY_$n
  I2C总线是芯片间串行传输总线,与SPI,MICROWIRE/PLUS接口不同,它以一根串行数据线和一根串行时钟线组成,如图1所示,它是全双工双向数据传输线,核心是主控CPU,被控器的SDA,SCL要相应地接到I2C总线的SDA,SCL上,可以方便地构成多机系统和外围器件扩展系统。I2C总线采用了器件地址的硬件设置方法,从而使硬件系统具有简单而灵活的扩展方法。按照I2C总线的规定,其SDA、SCL各要通过上拉电阻接到电源VCC上。
电子园51单片机学习网8CA~8}sxx)Z@


1701.gif (5395 bytes)

[!M6c;R)tKB4B3s0

图1 I2C总线的组成电子园51单片机学习网8h!nl k"T


2.3 I2C总线协议
o1HH1hd(@!nt0  任何总线的推出及应用都有其特有的规定,其总线时序图如图2所示。
电子园51单片机学习网i[ h(?~ d+H6r3bp


1702.gif (2639 bytes)

hDGX0Q8z]7x0

图2 I2C总线时序图

v~6ST6W(j D0

  I2C总线一般须满足如下协议:电子园51单片机学习网Z1L!X b"? ~'E![4[
  ① 只有当总线不忙时,数据传送才能开始;
4S-U%Idqb1q0  ② 数据传送期间,无论何时时钟线为高,数据线必须保持稳定。当时钟线为高时,数据线的变化将认为是传送的开始或停止;电子园51单片机学习网 p~yR}jT
  ③ 当时钟线为高时,数据线由高到低的变化决定开始条件;电子园51单片机学习网k5f D T/dk8U
  ④ 当时钟线为高时,数据线由低到高的变化决定停止条件;电子园51单片机学习网[:qW$p(h _0EL
  ⑤ 在开始条件后,SCL低电平期间,SDA允许变化,每位数据需一个时钟脉冲,当SCL为高时,SDA必须稳定;电子园51单片机学习网3]N,\3Qr*b
  ⑥ 主控器在应答时钟脉冲高电平期间释放SDA线高,转由接收器控制。受控器在应答时钟脉冲高电平期间必须拉低SDA线,以使之为稳定的低电平作为有效应答;电子园51单片机学习网5D u%R/~#A
  ⑦ 总线不忙时,数据线和时钟线保持为高电平。电子园51单片机学习网s)\|/usx5MOG(W1K
2.4 I2C总线上的数据传输方式电子园51单片机学习网.\,v}L1q*T5`m x
  图3为I2C 总线数据传输格式示意图,第一部分为数据传输起始信号,即由此开始进行数据传送;第二部分为受控IC的地址,用来选择向哪一个受控IC传送数据;第三部分为读/写位,它指示出受控IC的工作方式;第四部分为应答信号,它是被CPU选中的受控IC向CPU传回的确认信号;第五部分为传送的数据;第六部分为停止位。在I2C总线上挂接的所有被控IC都要有一个自己的地址,CPU在发送数据时,I2C总线上的所有被控IC都会将CPU发出位于起始信号后面的受控电路地址与自己的地址相比较,如果两者相同,则该被控IC认为自己被CPU选中,然后按照读/写位规定的工作方式接收或发送数据。
电子园51单片机学习网rQv {3{)Q




起始被控IC地址读/写控制位应答位数据停止


图3 I2C总线数据传输格式电子园51单片机学习网%A6su p y R~\


3 I2C总线在单片机8031中的实现电子园51单片机学习网 u#wzU F{7S$\
  因为8031单片机不带有I2C总线硬件接口,只能靠编写软件来模拟I2C总线时序。这里以单片机应用系统中较为常见的E2PROM中AT24C02为例,给出了在8031上利用I/O线实现I2C串行总线的方法和软件设计。根据I2C总线时序图和I2C总线的数据传输规范,给出详细的AT24C02起始、停止、发送和接收R7个字节的驱动程序清单。

\F%j2c^`;M:[%u7U B*F0

1704.gif (3197 bytes)电子园51单片机学习网@){3vH:nq


图4 I2C总线接口原理图

;o!?8gKB!CVO0

 ORG  ××××       ;程序开始地址。
4H/\ ?j/n}#H o0 SCL  EQU P1.1    ;选择P1.1作时钟线。
q @ O"D3a[2k0 SDA  EQU P1.0    ;选择P1.0作数据线。
_g Z0gMBzEe.o0  功能:WRITE是写入程序。将R1指示的R7个片内字节写入AT24C02中,写入首址由R0指示。电子园51单片机学习网IpWvWh9V
 WRITE:ACALL STAR    ;发出起始信号。
\ [I \m/i0     MOV A,#0A0H   ;发出写命令。电子园51单片机学习网IIdE&@_
     ACALL OUTB
KrR,p0m9^V0     JC WBE      ;无回答,结束操作。
cHxR/Z giu#\ KYy0     MOV A,R0    ;发出E2PROM首址。
/Z'O8j[w8o0     ACALL OUTB
B\bH6B._2n#m'Q-jp0     JC WBE      ;无回答,结束操作。电子园51单片机学习网6{$\)A*wO*YHy
 WR1: MOV A,@R1    ;取一字节内容。电子园51单片机学习网$w*U#E3e4`I}
     ACALL OUTB    ;写入E2PROM中。电子园51单片机学习网!Zq7yO _:D
     JC WBE      ;无回答,结束操作。电子园51单片机学习网Er6S^'s3i,u;i
     INC R1      ;指向下一字节。
&|1SE ` eyM)X2g q/O0     DJNZ R7,WR1   ;写完全部字节。
[+f^ T HFG1wI%t0 WBE: AJMP STOP    ;发出结束信号。
/o+L1cJ I4p8W1@GB0  功能:READ是读出程序。将R1指示的R7个E2PROM字节读入片内RAM中,首址由R0指示。电子园51单片机学习网x cB.XH _ G
 READ: ACALL STAR    ;发出起始信号。
&YiJ4`C0t&d0     MOV A,#0A0H   ;发出写命令。
3[&jT:nl C0     ACALL OUTB
5V+?[*N~6y0     JC RDE      ;无回答,结束操作。
/[U Le };^0     MOV A,R1    ;发出E2PROM首址。
7`Ah]0h V0     ACALL OUTB电子园51单片机学习网*]9dvB5U}7s o#V4p
     JC RDE      ;无回答,结束操作。
A ] \'Ch7o0     ACALL STOP    ;发出结束信号。
rf4D)yg7u(Fkc0     NOP       ;延时。
6H(Z&GeCw,i0     NOP电子园51单片机学习网5B#N.Y:[$v2{ {z
     ACALL STAR    ;再次发出起始信号。电子园51单片机学习网6u6Rq2dA'c j_q
     MOV A,#0A1H   ;发出读命令。
%J@~C&i8e0     ACALL OUTB
.J[q#p(Tp7`0     JC RDE      ;无回答,结束操作。电子园51单片机学习网y{6a(e Yz
 RD1: MOV B,#08H   ;每移出8位组成一字节。
J7{+psH2p"T7Q0 RD2: CLR SCL     ;移出一个时钟脉冲。电子园51单片机学习网ks%qUOK
     NOP
;@rD[w lC0     SETB SCL     ;时钟脉冲上升沿。电子园51单片机学习网LhZv ?"a
     NOP
#Yx$lIPOC#m0     MOV C,SDA    ;读入一位。电子园51单片机学习网 t`#E"M/Fz
     RLC A       ;拼装到累加器中。电子园51单片机学习网vDD6u ?/j yU
     NOP
uM8E4e4F7v"C;V0     DJNZ B,RD2   ;拼完一字节。
;zg*Dp*x-P0     MOV @R0,A    ;存入片内。
W0N/\ qm)xe0     INC R0      ;指向下一地址。电子园51单片机学习网 iS e!?-wDr~
     CLR SCL     ;时钟脉冲下降沿。电子园51单片机学习网h;e!^_u$k%e
     CJNE R7,#1,RD3 ;是最后一个字节吗?
6rFtF6rQ"_0     SETB SDA     ;最后一个字节不给回答信号。
!\(eG`S6x!Yn6N0     SJMP RD4电子园51单片机学习网J"F E8jJ8[5@+w
 RD3: CLR SDA     ;准备好回答信号。电子园51单片机学习网n1U+hW:ND
 RD4: NOP
_:W'otY W1G*B r0     SETB SCL     ;时钟脉冲上升沿。
e:W{XE1y6|TP0     NOP       ;等待E2PROM读取回答信号电子园51单片机学习网f1|3kN a?vMM5P
     NOP电子园51单片机学习网|pW$i8p$I7^6z,}?5c
     CLR SCL     ;回答完毕。电子园51单片机学习网0I$c9N)p+K L7M]c/`.|
     SETB SDA     ;准备读入下一字节。
-_`#L` ]8L0     DJNZ R7,RD1   ;读完全部字节。
~ t*nQ(e5JH0     CLR C
Z+e NN Rn0 RDE: AJMP STOP    ;发出结束信号。
Rg |(P\Vi0  功能:OUTB是向E2PROM发出一字节信息的子程序。
6`7ry(_iW(GK*[0 OUTB: MOV B,#08H   ;一字节8位。电子园51单片机学习网 Gc(xO[#R,Q+]
 OUT1: CLR SCL     ;将时钟线拉低。
O|#L C!S0     RLC A      ;移出一位。电子园51单片机学习网s+|%^^K"@m
     MOV SDA,C    ;放到数据线上。电子园51单片机学习网+A ufV,nT5k
     SETB SCL     ;将时钟线升高。
+Az@D*e*B0     NOP       ;等待一位信息送入E2PROM中。电子园51单片机学习网Gd{o)E0M]!j
     DJNZ B,OUT1   ;发送完8位。电子园51单片机学习网4t\-C2sv"E,sU
     CLR SCL     ;将时钟线拉低。电子园51单片机学习网ol vdP t u0L
     SETB SDA     ;准备接收回答信号。电子园51单片机学习网&[Z?%I1Q
     SETB SCL     ;将时钟线升高。电子园51单片机学习网fc {j9j2YZ
     NOPMOV C,SDA  ;接收回答信号。
9Sa_3NV vf0     CLR SCL     ;将时钟线拉低。电子园51单片机学习网 m7~#s*u;Jk[E
     RET电子园51单片机学习网#s ucR,rG]6b#C ^s
  功能:STAR是起始信号。电子园51单片机学习网OOJ+F#i;W{
 STAR: SETB SDA     ;将数据线升高。
G g9Xr5TXW:?*GBx0     SETB SCL     ;将时钟线升高。电子园51单片机学习网g,y/{%Ivl/u
     NOP       ;延时。电子园51单片机学习网0W"x2N&J*o&ic6v
     CLR SDA     ;将数据线拉低,发出起始信号。电子园51单片机学习网0y2M&|?V%To9ad
     NOP       ;延时。电子园51单片机学习网*A q8R:`NM A
     CLR SCL     ;将时钟线拉低。电子园51单片机学习网NP5dI-q m-p2d W(G
     RET
GC6{-S'c,z Q"[K+m0  功能:STOP是结束信号。
3gw6k;n.NpUcI5S0 STOP: CLR SCL      ;将时钟线拉低。电子园51单片机学习网PH4a`%p)V6Tg
     CLR SDA     ;将数据线拉低。电子园51单片机学习网MHL/v7L7E K|
     NOP电子园51单片机学习网u'YcqO`1FA
     SETB SCL     ;将时钟线升高。
3}1fOf4e a1f/i$d.j0     NOP
0k6A.E Ps4_? l0     SETB SDA     ;将数据线升高,发出结束信号。
F3IU9a;M0     RET电子园51单片机学习网 ~'o5kq%OZ
     END

g;n4x1W1l9E ?W0

4 结束语
"WEW%Z6G7s'H1Xe0  本文给出了用8031汇编语言模拟I2C总线的时序的起始、停止及主控器向I2C总线的发送和接收R7字节的程序,读者也可根据I2C总线的操作时序在ATMEL89系列、68HC05系列等单片机及其外设接口如8255、8155或74LS377上实现I2C总线的操作,具有一定的通用性,且易于嵌入移植。

HH)?'s1yl*Yj0

参考文献电子园51单片机学习网8j![.N.EW"o
 1 Atmel Integrated Circuit Date Book,1994
$}L{G'dy7e0 2 武汉力源公司.CMOS串行EEPROM原理及应用
}O0_Y7e;B7_ n0 3 王卓人,邓晋钧,刘宗祥.IC卡的技术与应用.北京:电子工业出版社,1999.2
电子园51单片机学习网jLhg*]9lWZ'p

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条