Código de ensamblaje PIC18F2550 y DS1307 i2c RTC MPLAB.
Estoy usando un PIC18f2550 para obtener la hora, la fecha, etc. del DS1307.
- Puedo obtener los segundos, los minutos, las horas, etc., LLAMANDO repetidamente GET_TIME con una nueva dirección de lectura 0 a 6.
- No puedo obtener todos los Parámetros sec, min, hrs, etc en una lectura como se muestra a continuación en Read_Clk.
¿Podría alguien decirme qué estoy haciendo mal? Usándolo como es, solo devuelve "Segundos" en cada uno de los segundos, minutos, horas, etc ... He publicado una imagen debido a las líneas desplazadas.
WAIT_PIR_SSPIF:
BTFSS PIR1,SSPIF
GOTO WAIT_PIR_SSPIF
RETURN
WRITE_CLK: ;Write data to slave.; //Write data to I2C bus
BCF PIR1,SSPIF
MOVFF WRITE_DATA,SSPBUF
CheckWrite:
BTFSS PIR1,SSPIF
GOTO CheckWrite
RETURN
GET_TIME:
CALL START_CLK
MOVLW b'11010000'
MOVWF WRITE_DATA
CALL WRITE_CLK
MOVLW b'00000000' ;ADDRESS OF TIME TO READ
MOVWF WRITE_DATA
CALL WRITE_CLK
CALL DELAY_2nd
CALL RESTART_CLK
MOVLW b'11010001'
MOVWF WRITE_DATA
CALL WRITE_CLK
BSF SSPCON2,ACKDT ;SAME AS "NACK"
CALL DELAY_2nd
CALL Read_Clk ;CALLS READ_CLK
CALL STOP_CLK
CALL DELAY_2nd
GOTO GET_TIME
Read_Clk: ; //Read data from I2C bus
BSF SSPCON2,RCEN
BCF PIR1,SSPIF
CALL WAIT_PIR_SSPIF
MOVFF SSPBUF,SECONDS
BSF SSPCON2,ACKEN
BCF PIR1,SSPIF
CALL WAIT_PIR_SSPIF
MOVFF SSPBUF,MINUTES
BSF SSPCON2,ACKEN
BCF PIR1,SSPIF
CALL WAIT_PIR_SSPIF
MOVFF SSPBUF,HOURS
BSF SSPCON2,ACKEN
BCF PIR1,SSPIF
CALL WAIT_PIR_SSPIF
MOVFF SSPBUF,DAYS
BSF SSPCON2,ACKEN
BCF PIR1,SSPIF
CALL WAIT_PIR_SSPIF
RETURN
DELAY_2nd:
MOVLW b'00000100'
MOVWF COUNT_DOWN
DELAY_2: