IIC汇编子程序.doc
文本预览下载声明
一、概述
为了非常方便地对 I2C 从器件进行快速的、正确的读写操作,我们为此而设计出虚拟 I2C 总线操作平台软件包。本软件包是主方式下的虚拟 I2C 总线软件包,只要用户给子程序提供几个主要的参数,即可轻松地完成任何 I2C 总线外围器件的应用程序设计。 I2C 总线是 PHILIPS 公司推出的芯片间串行数据传输总线,2 根线(SDA、SCL)即可实现完善的全双工同步数据传送,能够十分方便地地构成多机系统和外围器件扩展系统。I2C 器件是把 I2C 的协议植入器件的 I/O 接口,使用时器件直接挂到 I2C 总线上,这一特点给用户在设计应用系统带来了极大的便利。I2C 器件无须片选信号,否选中是由主器件发出的 I2C 从地址决定的,而 I2C 器件的从地址是由 I2C 总线委员会实行统一发配。我们推出的 I2C 总线的操作平台软件包,只要你给出器件从地址[,子地址,注 PCF8574 无子地址 ] 即可进行字节读、字节写、多字节读、多字节写,能够非常方便地使用 I2C 器件,无须你介入底层的 I2C 操作协议。
二、编程序软件包 此软件包是用在单主 I2C 总线上,硬件接口是SDA、SCL,使用MCU 的 I/O 口来模拟 SDA/SCL 总线。设计有/无子地址的子程序是根据 I2C 器件的特点,目的在于将地址和数据彻底分开。软件包的接口界面为IRDBYTE 无子地址 读单字节数据 现行地址读IWRBYTE 无子地址 写单字节数据 现行地址写IRDNBYTE 有子地址 读 N 字节数据IWRNBYTE 有子地址 写 N 字节数据 说明:现行地址读/写即专指无子地址的器件,不给定子地址的读/写操作。软件包占用内部资源:R0 R1 R2 R3 ACC Cy。使用前须定义变量:SLA 器件从地址,SUBA 器件子地址,NUMBYTE 读/写的字节数,位变量 ACK使用前须定义常量:SDA、SCL 总线位,MTD 发送数据缓冲区首址, MRD 接收数据缓冲区首址。
;************************************************************************************** ;VI2C_ASM.ASM ;I2C 软件包的底层子程序,使用前要定义好 SCL 和 SDA。在标准 80C51 模式(12 Clock)下,对主频要求是;不高于 12MHz(1 个机器周期 1us);若 Fosc12MHz,则要增加相应的 NOP 指令数.;在使用本软件包时,请在你的程序的未尾加入$INCLUDE (VI2C_ASM.ASM)即可 ;************************************************************************************* ;启动 I2C 总线子程序
START:
SETB SDA ;setb:一个指令周期,一个机器周期,1us
NOP ;nop:一个指令周期,一个机器周期,1us
SETB SCL ;起始条件建立时间大于 4.7us
NOP
NOP
NOP
NOP
NOP CLR SDA ;clr:一个指令周期,1us
NOP ;起始条件锁定时大于 4us
NOP
NOP
NOP
NOP
CLR SCL ;钳住总线,准备发数据
NOP
RET ;ret:2个指令周期,2us
;结束总线子程序
STOP: CLR SDA
NOP
SETB SCL ;发送结束条件的时钟信号
NOP ;结束总线时间大于 4us
NOP
NOP
NOP
NOP
SETB SDA ;结束总线
NOP ;保证一个终止信号和起始信号的空闲时间大
显示全部