Guys I'm using nigels I2C routine & it works fine.But I want to know what its clock rate? Is it 400Khz? 100KHz?
Osc = 4Mhz
Osc = 4Mhz
Code:
I2C_Out: ; send w register on I2C bus
movwf OutputByte
movlw 0x08
movwf _N
Out_Bit:
bcf STATUS, C ; clear carry
rlf OutputByte, F ; left shift, most sig bit is now in carry
btfss STATUS, C ; if one, send a one
goto Out_Zero
goto Out_One
Out_Zero:
call LOW_SDA ; SDA at zero
call Clock_Pulse
call HIGH_SDA
goto Out_Cont
Out_One:
call HIGH_SDA ; SDA at logic one
call Clock_Pulse
Out_Cont:
decfsz _N, F ; decrement index
goto Out_Bit
return
;=============
HIGH_SDA: ; high impedance by making SDA an input
bsf STATUS, RP0 ; bank 1
bsf I2C_TRIS, SDA ; make SDA pin an input
bcf STATUS, RP0 ; back to bank 0
return
LOW_SDA:
bcf I2C_PORT, SDA
bsf STATUS, RP0 ; bank 1
bcf I2C_TRIS, SDA ; make SDA pin an output
bcf STATUS, RP0 ; back to bank 0
return
Clock_Pulse: ; SCL momentarily to logic one
call HIGH_SCL
call LOW_SCL
return