CONFIG_TRANSMISION_I2C
call b1 ; SELECIONO LA PAGINA 1 DE LA MEMORIA
BSF TRISC,4
BSF TRISC,3
MOVLW 0x02 ; mueve 2 a W
MOVWF SSPADD ; TRANSMISION SERA DE 333 KHZ
call b0 ; SELECIONO LA PAGINA 0 DE LA MEMORIA
BCF PIR1,SSPIF
MOVLW B'00101000' ; PERMITE LA CONFIGURACION SERIE DE LOS PINES SDA Y SCL.
MOVWF SSPCON
GOTO VOLVER
BIT_START_I2C
call b1 ;BANCO 1
BSF SSPCON2,SEN ;START ACTIVADO
call b0 ;BANCO 0
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
GOTO VOLVER
TRANSMITIR_DATO_I2C
MOVWF SSPBUF ;CARGAR DATO EN BUFFER I2C
call b0 ;BANCO 0
CALL R20MS
BCF PIR1,SSPIF
CALL b1
BTFSS SSPCON2,ACKSTAT ; Si el esclavo pone ACKSTAT = 0 la transmision es correcta,
; Si no hay respuesta del esclavo enviamos STOP.
GOTO Trans_correcta
call TIC
GOTO BIT_STOP_I2C
Trans_correcta
call b0 ; Seleciono la pagina 0 de la memoria
GOTO VOLVER
RECIBIR_DATO_I2C
call b1 ;BANCO 1
BSF SSPCON2,RCEN ;ACTIVAR MODO LECTURA
CALL b0
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
MOVF SSPBUF,W ; Dato recibido en el registro SSPBUF
movwf buffer ; Mueve dato a buffer
CALL b1 ; Seleciono la pagina 1 de la memoria
BSF SSPCON2,ACKDT ; Pone el maestro el bit de reconocimiento de que ha llegado el Dato.
BSF SSPCON2,ACKEN ; Permito que el bit de reconocimiento este activo.
CALL b0 ; Seleciono la pagina 0 de la memoria
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
GOTO VOLVER
BIT_STOP_I2C
CALL b1 ; Seleciono la pagina 1 de la memoria
BSF SSPCON2,PEN
CALL b0 ; Seleciono la pagina 0 de la memoria
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
GOTO VOLVER
TIC BSF PORTC,7
CALL R500MS
BCF PORTC,7
GOTO VOLVER
RESTART_I2C
CALL b1
BSF SSPCON2,RSEN
CALL b0
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
VOLVER
RETURN