Hola a todos.
Quiero escribir y leer el contenido de una posicion de memoria de un 24LC515 desde el pic.
No se porque, pero esto no me funciona. A ver si vosotros dais con ello:
;**********Configuracion:
bsf status, rp0 ; banco 1
movlw b"00011000" ; RC3, RC4 son entradas
movwf trisc
bcf status, rp0
movlw b"00101000" ; habilito mssp
; habilito sspen y el modo i2c Master sspm
movwf sspcon
bsf status, rp0
movlw B"10000000" ; smp configurado a 100 KHz
movwf sspstat
bcf status, rp0
; configuro el baud rate
bsf status, rp0
movlw (fosc / (4 * baud)) - 1
movwf sspadd
bcf status, rp0 ; Fin de la configuracion del i2c
;********escritura (dato=55h, direccion=0x00)
bsf status, rp0
bsf sspcon2, sen
bcf status, rp0
call WaitMSSP ;Espero a que la operacion i2c termine
movlw control_in_eeprom ;Mando el byte de control de entrada y espero
call Send_I2C_Byte ;Mando el byte a traves del bus i2c
call WaitMSSP ;Espero a que la operacion i2c termine
movlw 0x00 ;Mando la parte alta de la direccion
call Send_I2C_Byte
call WaitMSSP
bsf status, rp0
btfsc sspcon2, ackstat ;Chequeo el ack
goto I2CFail
bcf status, rp0
movlw 0x00 ;Mando la parte baja de la direccion
call Send_I2C_Byte
call WaitMSSP
bsf status, rp0
btfsc sspcon2, ackstat ;Chequeo el ack
goto I2CFail
bcf status, rp0
movlw 0x55 ;Mando los datos
call Send_I2C_Byte ;Mando byte
call WaitMSSP ;Espero a que la operacion i2c termine
bsf status, rp0
btfsc sspcon2, ackstat ;Chequeo el ack
goto I2CFail ;Si falla
bsf status, rp0
bsf sspcon2, pen ;Envio la condicion de Stop
bcf status, rp0
call WaitMSSP ;Espero a que la operacion i2c termine
;********Lectura del valor y colocar en puerto b
bsf status, rp0
bsf sspcon2, sen ;Start
bcf status, rp0
call WaitMSSP
movlw control_in_eeprom ;Mando el byte de control de escritura (para mandar la direccion) y espero fin
call Send_I2C_Byte ;Mando el byte
call WaitMSSP ;Espero a que la operacion i2c termine
bsf status, rp0
btfsc sspcon2, ackstat
goto I2CFail
bcf status, rp0
movlw 0x00 ;Address high
call Send_I2C_Byte
bcf status, rp0
call WaitMSSP
bsf status, rp0
btfsc sspcon2, ackstat
goto I2CFail
bcf status, rp0
movlw 0x00 ;Address low
call Send_I2C_Byte
call WaitMSSP
bsf status, rp0
btfsc sspcon2, ackstat
goto I2CFail
bsf status, rp0
bsf sspcon2, rsen ;Restart
I2C.Restart.Wait3:
btfsc sspcon2, rsen
goto I2C.Restart.Wait3
bcf status, rp0 ;Restore Bank0
movlw control_out_eeprom ;Mando el byte de control de lectura para recoger el dato
call Send_I2C_Byte
call WaitMSSP
bsf status, rp0
btfsc sspcon2, ackstat
goto I2CFail
bsf status, rp0
bsf sspcon2, rcen
bcf status, rp0
call WaitMSSP
bsf status, rp0
bsf sspcon2, ackdt
bsf sspcon2, acken
bsf sspcon2, pen ;Stop
call WaitMSSP
bcf status, rp0
movf sspbuf, w
hhh: movwf portb
goto hhh
Si alguien da con ello y funciona le invito a una caña
