/*****
;FileName: IicSMasU.a51
;Describe: 51 系列模拟 I2C 总线主控器驱动程序
;Date: 2003/11/12
;*****/
$include (IicSMasU.inc)
public _IicTxdRxd
public SlvAddr
public SubAddr
/*******************************************************************************
*
;Name: bit _IicTxdRxd(TxdByte,RxdByte,&IicDataBuf)
;Describe: 发送数据给被控器/接收来自被控器的数据
;Input: TxdByte=要发送数据的字节数
; RxdByte=要接收数据的字节数
; IicDataBuf=发送/接收缓冲区的首字节
; (SlvAddr(被控器地址),SubAddr(单元地址))
;Output: C(Retry=1):操作失败标志
; IicDataBuf=接收到的数据的首字节(主接收时有效)
;调用说明:
; A.现行地址写: SlvAddr(写) !!!(带 SubAddr 的器件不能使用该子程序)
; TxdByte=(发送数据字节数(SubAddr 为第一个要发送的数据))
; RxdByte=0
; B.指定地址写: SlvAddr(写),SubAddr
; TxdByte=(1+发送数据字节数)
; RxdByte=0
; C.现行地址读: SlvAddr(读)
; TxdByte=0
; RxdByte=要接收数据的字节数
; D.指定地址读: SlvAddr(读),SubAddr
; TxdByte=1
; RxdByte=要接收数据的字节数
;Nesting level: 1
;Change: A,C,R1, R4~R7
;*******************************************************************************
****/
BitSegIicSM SEGMENT BIT overlayable
RSEG BitSegIicSM
Retry: dbit 1 ;指明 I2C 最后的数据传送失败应该重复操作
BITEA: DBIT 1 ;存中断状态
DataSegIicSM SEGMENT DATA overlayable
RSEG DataSegIicSM
SlvAddr: ds 1 ;被控器地址