用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

按平台模式设计的虚拟I2C总线软件包VIIC

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 22:55:44
,以及满足调用操作的初始化操作的三条命令为VIIC的应用界面,即:

MOV SLA,#SLAR/SLAW ;总线上节点寻址并确定传送方向

MOV NUMBYT,#N ;确定传送字节数N

LCALL RDNBYT/WRNBYT ;读/写操作调用

三、VIIC1.0软件包清单

VIIC1.0软件包清单如下。

①STAR:SETB VSDA;启动I2C总线

SETB VSCL

NOP

NOP

CLR VSDA

NOP

NOP

CLR VSCL

RET

②STOP: CLR VSDA ;停止I2C总线数据传送

SETB VSCL

NOP

NOP

SETB VSDA

NOP

NOP

CLR VSDA

CLR VSCL

RET

③MACK: CLR VSDA ;发送应答位

SETB VSCL

NOP

NOP

CLR VSCL

SETB VSDA

RET

④MNACK: SETB VSDA ;发送非应答位

SETB VSCL

NOP

NOP

CLR VSCL

CLR VSDA

RET

⑤CACK: SETB VSDA ;应答位检查

SETB VSCL

CLR F0

MOV C,VSDA

JNC CEND

SETB F0 CEND: CLR VSCL

RET

⑥WRBYT: MOV R0,#08H ;向VSDA线上发送1个数 ;据字节 WLP: RLC A

JC WR1

AJMP WR0 WLP1: DJNZ R0,WLP

RET WR1: SETB VSDA

SETB VSCL

NOP

NOP

CLR VSCL

CLR VSDA

AJMP WLP1 WR0: CLR VSDA

SETB VSCL

NOP

NOP

CLR VSCL

AJMP WLP1

⑦RDBYT: MOV R0,#08H ;从VSDA线上读取1个数 ;据字节 RLP: SETB VSDA

SETB VSCL

MOV C,VSDA

MOV A,R2

RLC A

MOV R2,A

CLR VSCL

DJNZ R0,RLP

RET

⑧WRNBYT: MOV R3,NUMBYT ;虚拟I2C总线发送N个 ;字节数据

LCALL STA

MOV A,SLA

LCALL WRBYT

LCALL CACK

JB F0,WRNBYT

MOV R1,#MTD WRDA: MOV A,@R1

LCALL WRBYT

LCALL CACK

JB F0,WRNBYT

INC R1

DJNZ R3,WRDA

LCALL STOP

RET ⑨RDNBYT: MOV R3, NUMBYT ;模拟I2C总线接收n个 ;字节数据

LCALL STA

MOV A,SLA

LCALL WRBYT

LCALL CACK

JB F0,RDNBTY RDN: MOV R1,#MRD RDN1: LCALL RDBYT

MOV @R1,A

DJNZ R3,ACK

LCALL MNACK

LCALL STOP

RET ACK: LCALL MACK

INC R1

SJMP RDN1

四、VIIC1.0应用指南

1.适用范围

VIIC1.0适用于80C51系列单主系统中I2C总线外围器件扩展的应用程序设计。由于时序模拟基于6MHz时钟设计,在高速时钟下,可适当增加时序模拟子程序中的空操作指令。

2. 资源占用

VIIC使用了R0,R1,R2,R3,F0,C等资源。

3.符号单元

PVIIC中有许多符号标记,这些符号标记有:

VSDA 虚拟I2C总线数据线;

VSCL虚拟I2C总线时钟线;

SLA寻址字节存放单元;

NUMBYT传送字节数存放单元;

MTD发送数据缓冲区;

MRD接收数据缓冲区。

4.归一化操作命令

不论总线上扩展什么外围器件,都只须使用以下三条指令:

MOV SLA,#SLAW/SLAR

MOVNUMBYT,#N

LCALLWRNBYT/RDNBYT

5.VIIC的装载

由于WRNBYT/RDNBYT都使用长调用命令LCALL,故VIIC1.0可放在程序存储器的任意空间。 图1

6.通用的应用界面

VIIC1.0的应用界面如图1所示。与VIIC1.0有关的只是3条归一化操作命令;与硬件电路相关的是器件地址与引脚地址构成的寻址字节和由器件规定的数据操作格式。
javascript:window.open(this.src);" style="cursor:pointer;"/>
五、VIIC1.0应用示例

在本文参考文献2中给出了一些基于VIIC软件包的外围串行扩展应用实例。现就带I2C总线接口LED显示驱动器SAA1064扩展8位LED显示电路来示范VIIC1.0的应用。

1.硬件电路与寻址字节

用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。

2.显示原理与数据操作格式

在I2C总线外围器件的数据手册中,都给出了实现器件功能的数据操作格式,以及实现功能的控制命令与寄存器的管理模式。

(1) SAA1064的数据操作格式 80C51只须对SAA1064进行写操作,便实现了LED的显示驱动控制。SAA1064的写数据操作格式如下:

SSLAWASUBADRACOMAdata1Adata2Adata3AdataAP

只须对SAA1064中首地址为SUBADR的5个寄存器单元中依次写入控制命令COM和4个LED共阴极段码datal~data4,SAA1064的SUBADR=00H。

控制命令COM格式及位功能规定如下:

D7                                                                     D0

——C6C5C4C3C2C1C0

C0   静、动态显示选择。C0=1,动态显示。

C1  显示位1,3暗亮选择。C1=1,选择亮。

C2  显示位2,4暗亮选择。C2=1,选择亮。

C3  测试位。C3=1,所有段点亮。

C4,C5,C6  驱动电流控制位。C4,C5,C6为 “1”时,驱动电流分别为3mA,6mA,12mA;皆为1时输出驱动电流最大,达21mA。

3.应用程序设计

按下列步骤完成图2(b)的8位LED显示程序设计。 
javascript:window.open(this.src);" style="cursor:pointer;"/>
    (1) 将VIIC1.0装入程序存储器中。

(2) 根据硬件电路及资源分配,将VIIC1.0中的符号单元赋值如下:

VSDA EQU P1.1 ;用P1.1虚拟SDA

VSCL EQU P1.0 ;用P1.0虚拟SCL

SLA EQU 50H ;50H为寻址字节存放单元

NUMBYT EQU 51H ;51H为传送字节数据存放单元

MTD EQU 30H ;30H为发送缓冲区首地址

(3) 8位LED显示子程序设计

这里介绍1个在图2(b)LED显示器上显示“bUAA0706”固定字符的子程序。

根据SAA1064的数据操作格式,点亮4个LED只须依首地址SUBADR顺序送入控制命令COM和4个LED共阴极段选码data1~data4。

设LED驱动电流为18 mA(C6,C5为高电平;C4为低电平)动态显示要求(C2,C1,C0为高电

上一页  [1] [2] [3]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:20,187.50000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号