原创
I2C串行总线在单片机8031应用系统中的设计与实现
摘要】 目前,MCS51系列、ATMEL89系列、68HC05系列等单片机应用很广,但他们均没有I2 C总线接口,限制了在这些系统中使用具有I2 C总线接口器件的应用。本文将介绍I2 C串行总线的性能,并以串行E2 PROM为例,给出在8031上利用I/O线实现I2 C串行总线的方法和软件设计。电子园51单片机学习网 Br'|/P8Fp$cqX 关键词:单片机,I2 C总线,接口 电子园51单片机学习网-KJqv z0ei \/R
1 I2 C总线概述 o_$]X:Lc8|YG |0 I2 C (inter IC bus)总线是由Philips公司提出的串行通信接口规范,常见的中文译名有“集成电路间总线”或“内部集成电路总线”。它使用两条线:串行数据线(SDA)和串行时钟线(SCL),使连接到该总线上可访问的器件之间传送信息,属于多主控制总线。总线上的每个器件均可设置唯一的地址,从而可实现器件的有效访问。自Philips公司推出I2 C总线后,Philips公司及其他公司纷纷相继推出了许多I2 C总线产品,如各种微处理器、存储器(PCF8571/8570,128/256 字节)、A/D(PCF8591)、D/A(TDA8442/8444)转换器、E2 PROM及各种I2 C总线接口电路(PCF8584)等。由于I2 C总线的使用可以简化电路,省掉了很多常规电路中的接口器件,提高产品的可靠性,在许多领域尤其在目前使用的IC卡获得了广泛的应用,国际标准ISO7816-2规定了IC卡与读写设备信息传输是基于I2 C总线传输协议的。不仅如此,I2 C总线在家电方面也有较广泛的应用,如国产长虹NC-3机芯彩电,东芝火箭炮等。尽管Philips公司推出带有I2 C 总线接口的80C31系列单片机,如:8XC528、8XC552、8XC562、8XC751等,但在单片机组成的智能化仪表和测控系统中,乃有相当比例数量使用的是MCS51、AT89C5X系列单片机,如8031、8751、AT89C51、AT89C52等,它们不具有I2 C串行总线接口。本文将结合笔者在开发智能化产品用到的E2 PROM,介绍在不具有I2 C串行总线接口的单片机8031应用系统中实现I2 C总线接口的方法和软件设计。 电子园51单片机学习网|5s rP0A6iPk3R%D E
2 I2 C总线的组成及I2 C总线性能 电子园51单片机学习网+K2IK/]3~!s aKI 2.1 I2 C总线的特点 (}|9Xe0S&^tgN-k0 由于I2 C总线仅用二条线来传达信息,因而具有独特的优点:电子园51单片机学习网$|hJ6Tr|4a ① 可最大限度地简化结构;可实现电路系统的模块化、标准化设计。电子园51单片机学习网%|z,p?/v ② 标准I2 C总线模块的组合开发方式大大地缩短了新产品的开发周期。;gI$?+N8U` {CN`?0 ③ I2 C总线系统具有很大的灵活性;I2 C总线各节点具有独立的电气特性。电子园51单片机学习网c:r!t0A8r+g8n ④ I2 C总线系统可方便地对某一节点电路故障进行诊断与跟踪,有很好的可维护性。电子园51单片机学习网d1R2OQEH5nke 2.2 I2 C总线的组成 电子园51单片机学习网1^P/N]pY_$n I2 C总线是芯片间串行传输总线,与SPI ,MICROWIRE/PLUS接口不同,它以一根串行数据线和一根串行时钟线组成,如图1所示,它是全双工双向数据传输线,核心是主控CPU,被控器的SDA,SCL要相应地接到I2 C总线的SDA,SCL上,可以方便地构成多机系统和外围器件扩展系统。I2 C总线采用了器件地址的硬件设置方法,从而使硬件系统具有简单而灵活的扩展方法。按照I2 C总线的规定,其SDA、SCL各要通过上拉电阻接到电源VCC上。电子园51单片机学习网8CA~8}sxx)Z@
[!M6c;R)tKB4B3s0 图1 I2 C总线的组成 电子园51单片机学习网8h!nl k"T
2.3 I2 C总线协议 o1HH1hd(@!nt0 任何总线的推出及应用都有其特有的规定,其总线时序图如图2所示。电子园51单片机学习网i[ h(?~ d+H6r3bp
hDGX0Q8z]7x0 图2 I2 C总线时序图
v~6ST6W(j D0 I2 C总线一般须满足如下协议:电子园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 I2 C总线上的数据传输方式 电子园51单片机学习网.\,v}L1q*T5`m x 图3为I2 C 总线数据传输格式示意图,第一部分为数据传输起始信号,即由此开始进行数据传送;第二部分为受控IC的地址,用来选择向哪一个受控IC传送数据;第三部分为读/写位,它指示出受控IC的工作方式;第四部分为应答信号,它是被CPU选中的受控IC向CPU传回的确认信号;第五部分为传送的数据;第六部分为停止位。在I2 C总线上挂接的所有被控IC都要有一个自己的地址,CPU在发送数据时,I2 C总线上的所有被控IC都会将CPU发出位于起始信号后面的受控电路地址与自己的地址相比较,如果两者相同,则该被控IC认为自己被CPU选中,然后按照读/写位规定的工作方式接收或发送数据。 电子园51单片机学习网rQv {3{)Q
图3 I2 C总线数据传输格式 电子园51单片机学习网%A6su p y R~\
3 I2 C总线在单片机8031中的实现 电子园51单片机学习网 u#wzU F{7S$\ 因为8031单片机不带有I2 C总线硬件接口,只能靠编写软件来模拟I2 C总线时序。这里以单片机应用系统中较为常见的E2 PROM中AT24C02为例,给出了在8031上利用I/O线实现I2 C串行总线的方法和软件设计。根据I2 C总线时序图和I2 C总线的数据传输规范,给出详细的AT24C02起始、停止、发送和接收R7 个字节的驱动程序清单。
\F%j2c^`;M:[%u7U B*F0 电子园51单片机学习网@){3vH:nq
图4 I2 C总线接口原理图
;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 OUTBKrR,p0m9^V0 JC WBE ;无回答,结束操作。cHxR/Z giu#\ KYy0 MOV A,R0 ;发出E2 PROM首址。/Z'O8j[w8o0 ACALL OUTBB\bH6B._2n#m'Q-jp0 JC WBE ;无回答,结束操作。电子园51单片机学习网6{$\)A*wO*YHy WR1: MOV A,@R1 ;取一字节内容。电子园51单片机学习网$w*U#E3e4`I} ACALL OUTB ;写入E2 PROM中。电子园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 个E2 PROM字节读入片内RAM中,首址由R0 指示。电子园51单片机学习网x cB.XH _ G READ: ACALL STAR ;发出起始信号。&YiJ4`C0t&d0 MOV A,#0A0H ;发出写命令。3[&jT:nl C0 ACALL OUTB5V+?[*N~6y0 JC RDE ;无回答,结束操作。/[U Le };^0 MOV A,R1 ;发出E2 PROM首址。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 NOPuM8E4e4F7v"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 ;等待E2 PROM读取回答信号电子园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 CZ+e NN Rn0 RDE: AJMP STOP ;发出结束信号。Rg |(P\Vi0 功能:OUTB是向E2 PROM发出一字节信息的子程序。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 ;等待一位信息送入E2 PROM中。电子园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 RETGC6{-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 NOP0k6A.E Ps4_? l0 SETB SDA ;将数据线升高,发出结束信号。F3IU9a;M0 RET电子园51单片机学习网 ~'o5kq%OZ END
g;n4x1W1l9E ?W0 4 结束语 "WEW%Z6G7s'H1Xe0 本文给出了用8031汇编语言模拟I2 C总线的时序的起始、停止及主控器向I2 C总线的发送和接收R7 字节的程序,读者也可根据I2 C总线的操作时序在ATMEL89系列、68HC05系列等单片机及其外设接口如8255、8155或74LS377上实现I2 C总线的操作,具有一定的通用性,且易于嵌入移植。
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
文章评论(0条评论)
登录后参与讨论