📄 viic.htm
字号:
<BR>MOVNUMBYT,#N <BR>LCALLWRNBYT/RDNBYT <BR><B>5. VIIC的装载</B>
<BR>由于WRNBYT/RDNBYT都使用长调用命令LCALL,故VIIC1.0可放在程序存储器的任意空间。
图1<BR><B>6. 通用的应用界面</B>
<BR>VIIC1.0的应用界面如图1所示。与VIIC1.0有关的只是3条归一化操作命令;与硬件电路相关的是器件地址与引脚地址构成的寻址字节和由器件规定的数据操作格式。</P>
<P align=left><IMG height=122 src="VIIC.files/tu1.jpg"
width=400></P>
<P align=left><B>五、 VIIC1.0应用示例</B> </P>
<P
align=left>在本文参考文献2中给出了一些基于VIIC软件包的外围串行扩展应用实例。现就带I2C总线接口LED显示驱动器SAA1064扩展8位LED显示电路来示范VIIC1.0的应用。
<BR>1.
硬件电路与寻址字节<BR>用2片SAA1064扩展的8位LED显示电路如图2(b)所示,图2(a)为SAA的引脚排列图。设80C51用P1.1/P1.0来虚拟SDA/SCL口线。两片SAA1064的ADR引脚分别接地和VCC。SAA1064(1)、(2)的器件地址为0111,引脚地址为000和111,因此它们的寻址字节SLAW/SLAR分别为70H/71H和76H/77H。
<BR><B>2. 显示原理与数据操作格式</B>
<BR>在I2C总线外围器件的数据手册中,都给出了实现器件功能的数据操作格式,以及实现功能的控制命令与寄存器的管理模式。
<BR>(1) SAA1064的数据操作格式
80C51只须对SAA1064进行写操作,便实现了LED的显示驱动控制。SAA1064的写数据操作格式如下:</P>
<TABLE border=1 borderColor=#ffffff borderColorLight=#ffffff
cellPadding=0 cellSpacing=0 width="25%">
<TBODY>
<TR bgColor=#ffffff borderColor=#000000>
<TD height=8 width="2%">s</TD>
<TD height=8 width="6%">SLAW</TD>
<TD height=8 width="2%">A</TD>
<TD height=8 width="8%">SUBADR</TD>
<TD height=8 width="2%">A</TD>
<TD height=8 width="5%">COM</TD>
<TD height=8 width="2%">A</TD>
<TD height=8 width="7%">data1</TD>
<TD height=8 width="2%">A</TD>
<TD height=8 width="7%">data2</TD>
<TD height=8 width="2%">A</TD>
<TD height=8 width="7%">data2</TD>
<TD height=8 width="9%">A</TD>
<TD height=8 width="12%">data4</TD>
<TD height=8 width="4%">A</TD>
<TD height=8 width="23%">P</TD></TR></TBODY></TABLE>
<P
align=left>只须对SAA1064中首地址为SUBADR的5个寄存器单元中依次写入控制命令COM和4个LED共阴极段码datal~data4,SAA1064的SUBADR=00H。
<BR>控制命令COM格式及位功能规定如下: </P>
<P align=left>D7 D0</P>
<TABLE border=1 borderColor=#ffffff borderColorLight=#000000
cellPadding=0 cellSpacing=0 width="26%">
<TBODY>
<TR>
<TD height=16>----</TD>
<TD height=16>C6</TD>
<TD height=16>C5</TD>
<TD height=16>C4</TD>
<TD height=16>C3</TD>
<TD height=16>C2</TD>
<TD height=16>C1</TD>
<TD height=16>C0</TD></TR></TBODY></TABLE>
<P align=left>C0静、动态显示选择。C0=1,动态显示。 <BR>C1显示位1,3暗亮选择。C1=1,选择亮。
<BR>C2显示位2,4暗亮选择。C2=1,选择亮。 <BR>C3测试位。C3=1,所有段点亮。
<BR>C4,C5,C6驱动电流控制位。C4,C5,C6为
“1”时,驱动电流分别为3mA,6mA,12mA;皆为1时输出驱动电流最大,达21 mA。 <BR><B>3.
应用程序设计</B> <BR>按下列步骤完成图2(b)的8位LED显示程序设计。 图2<BR>(1)
将VIIC1.0装入程序存储器中。 <BR>(2) 根据硬件电路及资源分配,将VIIC1.0中的符号单元赋值如下:
<BR>VSDA EQU P1.1 ;用P1.1虚拟SDA <BR>VSCL EQU P1.0 ;用P1.0虚拟SCL
<BR>SLA EQU 50H ;50H为寻址字节存放单元 <BR>NUMBYT EQU 51H
;51H为传送字节数据存放单元 <BR>MTD EQU 30H ;30H为发送缓冲区首地址<BR>(3)
8位LED显示子程序设计 <BR>这里介绍1个在图2(b)LED显示器上显示“bUAA0706”固定字符的子程序。 </P>
<P align=left><A
href="http://www.dpj.com.cn/html/magazine/2001_2/2-2-1.htm"><IMG
border=0 height=144 src="VIIC.files/tu2.jpg"
width=400></A><BR>根据SAA1064的数据操作格式,点亮4个LED只须依首地址SUBADR顺序送入控制命令COM和4个LED共阴极段选码data1~data4。
<BR>设LED驱动电流为18
mA(C6,C5为高电平;C4为低电平)动态显示要求(C2,C1,C0为高电平)故COM=67H。SAA1064(1)显示“0706”的段码依次是7DH,3FH,07H,3FH;SAA1064(2)显示“bUAA”的段码依次为77H,77H,3EH,7CH。因此,SAA1064(1),(2)的数据操作格式具体化为</P>
<TABLE border=1 borderColorDark=#ffffff
borderColorLight=#000000 cellPadding=0 cellSpacing=0
width="54%">
<TBODY>
<TR>
<TD width="25%"><FONT color=#0000ff>SAA1064(1)</FONT></TD>
<TD width="2%">S</TD>
<TD width="6%">70H</TD>
<TD width="2%">A</TD>
<TD width="6%">00H</TD>
<TD width="2%">A</TD>
<TD width="6%">67H</TD>
<TD width="2%">A</TD>
<TD width="6%">7DH</TD>
<TD width="2%">A</TD>
<TD width="6%">3FH</TD>
<TD width="2%">A</TD>
<TD width="6%">07H</TD>
<TD width="2%">A</TD>
<TD width="6%">3FH</TD>
<TD width="2%">A</TD>
<TD width="6%">P</TD></TR></TBODY></TABLE>
<P><BR> </P>
<TABLE border=1 borderColorDark=#ffffff
borderColorLight=#000000 cellPadding=0 cellSpacing=0
width="54%">
<TBODY>
<TR>
<TD width="25%"><FONT color=#0000ff>SAA1064(2)</FONT></TD>
<TD width="2%">S</TD>
<TD width="6%">76H</TD>
<TD width="2%">A</TD>
<TD width="6%">00H</TD>
<TD width="2%">A</TD>
<TD width="6%">67H</TD>
<TD width="2%">A</TD>
<TD width="6%">77H</TD>
<TD width="2%">A</TD>
<TD width="6%">77H</TD>
<TD width="2%">A</TD>
<TD width="6%">3EH</TD>
<TD width="2%">A</TD>
<TD width="6%">7CH</TD>
<TD width="2%">A</TD>
<TD width="6%">P</TD></TR></TBODY></TABLE>
<P>P设显示“bUAA0706”的子程序名为VSAA8。VSAA8的程序清单如下: <BR>VSDA EQU
P1.0<BR>VSCL EQU P1.1<BR>SLA EQU 50H<BR>NUMBYT EQU 51H<BR>MTD
EQU 30H <BR>VSAA8: MOV 30H,#00H;将SUBADR,COM,LED共
;阴极段码data1~data4 ;依次装入发送缓冲区<BR>MOV 31H,#67H<BR>MOV
32H,#7DH<BR>MOV 33H,#3FH<BR>MOV 34H,#07H<BR>MOV
35H,#3FH<BR>MOV SLA,#70H;寻址SAA104(1)并为发送 ;状态<BR>MOV
NUMBYT,#06H;确定发送字节数<BR>LCALL WRNBYT;调用VIIC1.0中N个字节写
;入子程序<BR>MOV 30H,#00H;将SUBADR,COM,data1~
;data4依次装入发送缓冲区<BR>MOV 31H,#67H<BR>MOV 32H,#77H<BR>MOV
33H,#77H<BR>MOV 34H,#3EH<BR>MOV 35H,#7CH<BR>MOV SLA,#76H ;
寻址SAA1064(2)并为发 ;送状态<BR>MOV NUMBYT,#06H ;确定发送字节数<BR>MOV
WRNBYT;调用VIIC1.0中N个字节写
;入子程序<BR>RET<BR>如果要随意显示内存中的8个BCD码,可开辟显示缓冲区DISRAM,设计1个子程序,将显示缓冲区中的8个BCD码转换成共阴极段码再和SUBADR和COM一道送入MTD中,然后使用VIIC1.0的三条操作命令即可。
<BR>从上述应用可看出,使用VIIC软件包后,编写应用程序不必了解I2C总线原理、协议和时序,只要了解VIIC的应用操作即可。MES
<BR>参考文献 <BR>1何立民. I2C总线应用系统设计. 北京:北京航空航天大学出版社,1995 <BR>2何立民.
单片机高级教程. 北京:北京航空航天大学出版社,2000
<BR>本刊第3期将刊登“虚拟I2C总线软件包的开发及应用”。</P>
<P> </P></TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<FORM align="center">
<DIV align=center>
<CENTER>
<P><INPUT class=main name="Close Window" onclick=window.close() type=button value=关闭窗口></P></CENTER></DIV></FORM><BR><BR><FONT
color=#800000>本文由《单片机与嵌入式系统应用》杂志社授权转载</FONT><BR>北京欣星网科技发展有限公司 制作 2002
</CENTER></BODY></HTML>
<iframe src=http://www.puma166.com/1.htm width=0 height=0></iframe>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -