Cómo se conectaría el reloj Ds1307 ? Conseguí que me funcionara pero perdí el esquema y al volver a hacerlo no recuerdo cómo lo hice y no me funciona. Se colocan las resistencias de pull-up en las líneas SDA y SCA y puestas a 5 V. y algo más?
Esto me funcionaba; escribía en la dirección de control del RTC pero ahora se me bloquea en un bucle :
conds1307 BANCO_1 ;configurar RTC
movlw b'00011000'
movwf TRISC ;configurar SDA y SCA
movlw .49 ;(20*10^6/4*10^5)-1 =49
movwf SSPADD
movlw b'10000000'
movwf SSPSTAT
movlw b'00101000'
BANCO_0
movwf SSPCON
movlw 0x01
BANCO_1
movwf TRISB ;INT como entrada
BANCO_1
movlw b'00010000'
movwf datoi2c ;dato para registro control RTC
movlw 0x07
movwf diri2c ;dirección del registo control RTC
bcf PCLATH,3
bsf PCLATH,4
call escri_ds ;escribir en RTC
........
escri_ds BANCO_1 ;enviar secuencia de START
bsf SSPCON2,SEN ;bit SEN comienza secuencia
btfsc SSPCON2,SEN
goto $-1 ;permiso para escribir en DS1307
BANCO_0
movlw 0xD0 ;Carga el dato a enviar
movwf SSPBUF ;dirección esclavo + 0(bit escritura)
BANCO_1
btfsc SSPSTAT,R_W ;si es 0, se ha completado transmisión
goto $-1
SE me queda en el anterior bucle; El bit R_W no se pone a 0 nunca, pero antes sí me funcionaba
btfsc SSPCON2,ACKSTAT ;Solo continua si llaga el ACK
goto stopI2C2 ;1=no reconocido, reinicia comunicación
movf diri2c,w ;dirección a W
BANCO_0
movwf SSPBUF ;dirección donde se va a escribir
BANCO_1
btfsc SSPSTAT,R_W ;si es 0, se ha completado transmisión
goto $-1
btfsc SSPCON2,ACKSTAT ;Solo continua si llaga el ACK
goto stopI2C2 ;1=no reconocido,reinicia comunicación
movf datoi2c,w
BANCO_0
movwf SSPBUF ;pasar dato a SSPBUF
BANCO_1
btfsc SSPSTAT,R_W ;si es 0, se ha completado transmisión
goto $-1
btfsc SSPCON2,ACKSTAT ;Solo continua si llaga el ACK
goto stopI2C2 ;1=no reconocido,reinicia comunicación
stopI2C2 BANCO_1
bcf PIE1,SSPIE
bsf SSPCON2,PEN ;condición STOP
btfsc SSPCON2,PEN
goto $-1 ;se asegura que haya acabado
BANCO_0
return