;--------------------------------------------------------------------------
; CSI function
; input r2 : address of data
; output a : data
;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
; i2c function
; parameter passed by acc
; if success, acc = 1 else 0
;--------------------------------------------------------------------------
I2CSENB:push b
mov b,r7
push b
mov r7,#08h
I2CSEN1:rlc a
jc I2CSEN2
clr SDA
sjmp I2CSEN3
I2CSEN2:setb SDA
nop
I2CSEN3:nop
setb SCL
nop
nop
nop
nop
nop
clr SCL
djnz r7,I2CSEN1
nop
nop
setb SDA ;pull high, ready to reveice ack signal
nop
nop
setb SCL
nop
nop
mov a,#00h
jb SDA,I2CSEN4
mov a,#01h
I2CSEN4:nop
clr SCL
pop b
mov r7,b
pop b
ret
;--------------------------------------------------------------------------
; i2c function
; parameter passed by acc
; if acc = 1, emit ack. receive data in acc
;--------------------------------------------------------------------------
I2CRCVB:push b
mov b,r7
push b
setb SDA
mov b,a
mov a,#00h
mov r7,#08h ;a byte = 8 bits
I2CRCV1:nop
clr SCL
nop
nop
nop
nop
nop
setb SCL
nop
nop
clr c
jnb SDA,I2CRCV2 ;read data
setb c
I2CRCV2:rlc a
nop
nop
djnz r7,I2CRCV1
clr SCL ;emit ack signal
mov r7,a
mov a,b
clr SDA
jnz I2CRCV3
setb SDA
I2CRCV3:nop
nop
setb SCL
nop
nop
nop
nop
nop
clr SCL
mov a,r7
pop b
mov r7,b
pop b
ret
;--------------------------------------------------------------------------
; CSI function
; input r2 : address of data
; output a : data
;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
; i2c function
; parameter passed by acc
; if success, acc = 1 else 0
;--------------------------------------------------------------------------
I2CSENB:push b
mov b,r7
push b
mov r7,#08h
I2CSEN1:rlc a
jc I2CSEN2
clr SDA
sjmp I2CSEN3
I2CSEN2:setb SDA
nop
I2CSEN3:nop
setb SCL
nop
nop
nop
nop
nop
clr SCL
djnz r7,I2CSEN1
nop
nop
setb SDA ;pull high, ready to reveice ack signal
nop
nop
setb SCL
nop
nop
mov a,#00h
jb SDA,I2CSEN4
mov a,#01h
I2CSEN4:nop
clr SCL
pop b
mov r7,b
pop b
ret
;--------------------------------------------------------------------------
; i2c function
; parameter passed by acc
; if acc = 1, emit ack. receive data in acc
;--------------------------------------------------------------------------
I2CRCVB:push b
mov b,r7
push b
setb SDA
mov b,a
mov a,#00h
mov r7,#08h ;a byte = 8 bits
I2CRCV1:nop
clr SCL
nop
nop
nop
nop
nop
setb SCL
nop
nop
clr c
jnb SDA,I2CRCV2 ;read data
setb c
I2CRCV2:rlc a
nop
nop
djnz r7,I2CRCV1
clr SCL ;emit ack signal
mov r7,a
mov a,b
clr SDA
jnz I2CRCV3
setb SDA
I2CRCV3:nop
nop
setb SCL
nop
nop
nop
nop
nop
clr SCL
mov a,r7
pop b
mov r7,b
pop b
ret