Thanks for reply.
I have connected the battery. There are no problems with the hour and min display.
Here are the code to read:-
$mod51
ORG 0000H
;===================================================================================
SCL EQU P0.0 ;IN THIS EXAMPLE I USED PORT 2.0
SDA EQU P0.1 ;AND PORT 2.1 FOR THE I2C LINES
;YOU CAN CHANGE THEM TO WHATEVER ACCEPTABLE
;===================================================================================
;=====THE READ AND WRITE COMMANDS (0D0H AND 0D1H)
CONT_BYTE_W EQU 11010000B
CONT_BYTE_R EQU 11010001B
;===================================================================================
ORG 0060H
;===================================================================================
;=====ADD_LOW IS THE DPL, THIS IS THE ADDRESS INISDE THE DS1307
;=====DAVAVA IS THE VARIABLE TO STORE DATA WHEN IT GETS BACK FROM THE DS1307
ADD_LOW EQU 62H
DAVAVA EQU 63H
;===================================================================================
;=====VARIABLES TO STORE THE TIME IN, COULD BE USED ALSO TO STORE DATA TO WRITE ON DS1307
SEC EQU 64H
MIN EQU 65H
HOUR EQU 66H
DAY EQU 67H
DATE EQU 68H
MONTH EQU 69H
YEAR EQU 6AH
RAND EQU 6BH
ORG 0100H
;==================================================================================
;=====THIS PROCEDURE INITIATES THE DS1307, WITHOUT IT THE DS1307 WON'T START!!!!!!
BEGIN:
CLR SCL
CLR SDA
NOP
SETB SCL
SETB SDA
NOP
MOV ADD_LOW,#00H
MOV DAVAVA,#00H
LCALL WRITE_BYTE
;==================================================================================
;=====THIS IS THE MOST IMPORTANT PROCEDURE!!!! HERE YOU GET ALL THE DATA FROM THE DS1307
ACALL ONETIME_LCDINIT
ACALL DELAY_200M
Start:
MOV A,#86H
ACALL COMMAND
CALL INIT_PORT
mov A,HOUR
ACALL BCDTOASCII
MOV A,#':'
ACALL DATA_DISPLAY
mov A,MIN
ACALL BCDTOASCII
MOV A,#':'
ACALL DATA_DISPLAY
mov A,SEC
ACALL BCDTOASCII
ACALL DELAY
ACALL DELAY
SJMP START ;LOOP, YOU CAN ADD A LONGER DELAY, THEN END IT TO LCD OR ANYTHING YOU WANT
;==================================================================================
;=====PAY ATTENTION, HERE IS WHERE YOU CHOOSE WHAT DATA YOU WANT, AND WHERE TO STORE IT!!
INIT_PORT:
;==================================================READS SECONDS
MOV ADD_LOW,#00h
LCALL READ_BYTE
MOV SEC,DAVAVA
LCALL I2C_STOP
;==================================================READS MINUTES
MOV ADD_LOW,#01h
LCALL READ_BYTE
MOV MIN,DAVAVA
LCALL I2C_STOP
;==================================================READS HOURS
MOV ADD_LOW,#02h
LCALL READ_BYTE
MOV HOUR,DAVAVA
LCALL I2C_STOP
;==================================================READS DAYS
MOV ADD_LOW,#03h
LCALL READ_BYTE
MOV DAY,DAVAVA
LCALL I2C_STOP
;==================================================READS DATE OF WEEK
MOV ADD_LOW,#04h
LCALL READ_BYTE
MOV DATE,DAVAVA
LCALL I2C_STOP
;==================================================READS MONTHS
MOV ADD_LOW,#05h
LCALL READ_BYTE
MOV MONTH,DAVAVA
LCALL I2C_STOP
;==================================================READS YEARS
MOV ADD_LOW,#06H
LCALL READ_BYTE
MOV YEAR,DAVAVA
LCALL I2C_STOP
;=====
RET
;==================================================================================
;=====stop I2C communication
I2C_Stop:
CLR SDA
SETB SCL
NOP
SETB SDA
RET
;==================================================================================
;=====ANYTHING BELOW IS JUST PROCEDURES TO GET THE DATA, JUST COPY AND PASTE FROM
;=====HERE DOWN, IT'S EXPLAINED AS WELL, IF YOU INSIST. CHANGE THE PROCEDURE NAMES IF
;=====ANY CONFLICT HAPPENS WHEN YOU WRITE A LONGER PROGRAM
;=====
;*****************************************************
;* WRITE DAVAVA TO DS1307 1 BYTE *
;* INPUT : ADD_LOW *
;* : DAVAVA *
;*****************************************************
WRITE_BYTE: CLR SDA ;start bit
CLR SCL
MOV A,#CONT_BYTE_W ;send control byte
LCALL LOOP_BYTE
SETB SDA
SETB SCL
JB SDA,WRITE_BYTE ;loop until busy
CLR SCL
MOV A,ADD_LOW ;send address low
LCALL LOOP_BYTE
SETB SDA
SETB SCL
JB SDA,WRITE_BYTE ;loop until busy
CLR SCL
MOV A,DAVAVA ;send DAVAVA
LCALL LOOP_BYTE
SETB SDA
SETB SCL
JB SDA,WRITE_BYTE ;loop until busy
CLR SDA
CLR SCL
SETB SCL ;stop bit
SETB SDA
RET
;******************************************************
;* READ DAVAVA FROM DS1307 1 BYTE *
;* INPUT : ADD_HIGH *
;* : ADD_LOW *
;* OUTPUT : DAVAVA *
;******************************************************
READ_BYTE: CLR SDA ;start bit
CLR SCL
MOV A,#CONT_BYTE_W ;send control byte
LCALL LOOP_BYTE
SETB SDA
SETB SCL
JB SDA,READ_BYTE ;loop until busy
CLR SCL
MOV A,ADD_LOW ;send address low
LCALL LOOP_BYTE
SETB SDA
SETB SCL
JB SDA,READ_BYTE ;loop until busy
CLR SCL
SETB SCL
SETB SDA
CLR SDA ;start bit
CLR SCL
MOV A,#CONT_BYTE_R ;send control byte
LCALL LOOP_BYTE
SETB SDA
SETB SCL
JB SDA,READ_BYTE ;loop until busy
CLR SCL
LCALL LOOP_READ
SETB SDA
SETB SCL
CLR SCL
SETB SCL ;stop bit
SETB SDA
RET
;****************************************************
;* WRITE *
;* INPUT: ACC *
;****************************************************
LOOP_BYTE: PUSH 02H
MOV R2,#08H
LOOP_SEND: RLC A
MOV SDA,C
SETB SCL
CLR SCL
DJNZ R2,LOOP_SEND
POP 02H
RET
;*****************************************************
;* READ *
;* OUTPUT: ACC *
;*****************************************************
LOOP_READ: PUSH 02H
MOV R2,#08H
LOOP_READ1: SETB SCL
MOV C,SDA
CLR SCL
RLC A
DJNZ R2,LOOP_READ1
MOV DAVAVA,A
POP 02H
RET
;*****************************************************
;* DELAYS *
;* *
;*****************************************************
DELAY4M: PUSH DPH
PUSH DPL
MOV DPTR,#0000H
DEL4: INC DPTR
MOV A,DPL
ORL A,DPH
JNZ DEL4
POP DPL
POP DPH
RET
;----------------------------------------me------------------
BCDTOASCII:
MOV B,A
SWAP A
ANL A,#0FH
ORL A,#30H
ACALL DATA_DISPLAY
MOV A,B
ANL A,#0FH
ORL A,#30H
ACALL DATA_DISPLAY
RET
ONETIME_LCDINIT:
MOV A,#38H
ACALL COMMAND
MOV A,#0EH
ACALL COMMAND
MOV A,#01H
ACALL COMMAND
MOV A,#06H
ACALL COMMAND
MOV A,#86H
ACALL COMMAND
RET
COMMAND: ACALL READY
MOV P1,A
CLR P2.0
CLR P2.1
SETB P2.2
CLR P2.2
RET
DATA_DISPLAY:
ACALL READY
MOV P1,A
SETB P2.0
CLR P2.1
SETB P2.2
ACALL DELAY
CLR P2.2
RET
READY: SETB P1.7
CLR P2.0
SETB P2.1
BACK: CLR P2.2
ACALL DELAY
SETB P2.2
JB P1.7,BACK
RET
DELAY_200M:
DELAY_FORLOOP:
MOV R7,#5H
L1_DELAY:
MOV TMOD,#10H
MOV TH0,#00ADH
MOV TL0,#00F8H
SETB TR1
AGAIN: JNB TF1,AGAIN
CLR TR1
CLR TF1
DJNZ R7,L1_DELAY
RET
DELAY: MOV R3,#50
HERE3: MOV R4,#255
HERE2: DJNZ R4,HERE2
DJNZ R3,HERE3
RET
DELAY1:
MOV R7,#250
D1: DJNZ R7,D1
RET
END