Karthikeswar
Newbie level 3
This code is to implement DIGITAL CLOCK using rtc DS1307 and 8051.
But I'm confused that whether code is wrong or connections:roll:
But I'm confused that whether code is wrong or connections:roll:
Code:
ORG 0000H
ACALL DELAY_200ms ;RTC NEEDS 200ms UPON POWER UP
SETB P3.6
CLR P3.6
;====TURNING ON THE RTC=========================================
MOV DPTR,#10 ;R0=0AH,REG. A ADDRESS
MOV A,#20H ;010 IN D6-D4 TO TURN ON OSC.
MOVX @DPTR,A ;SEND IT TO REGISTER A OF RTC
;====SETTING THE TIME MODE======================================
SETB P3.6
CLR P3.6
MOV DPTR,#11 ;REG. B ADDRESS
MOV A,#83H ;BCD,24 HRS ,DAYLIGHT SAVING
MOVX @DPTR,A ;SEND IT TO REG R
;====SETTING THE TIME=========================================
SETB P3.6
CLR P3.6
OUT1: ACALL DELAY
MOV DPTR,#00 ;POINT TO SECONDS ADDRESS
MOV A,#01H ;SECONDS=00H
MOVX @DPTR,A ;SET SECONDS
SETB P3.6
CLR P3.6
ACALL DELAY
MOV DPTR,#02 ;POINT TO MINUTES ADDRESS
MOV A,#03H ;MINUTES=O00H
MOVX @DPTR,A ;SET MINUTES
SETB P3.6
CLR P3.6
ACALL DELAY
MOV DPTR,#04 ;POINT TO HOURS ADDRESS
MOV A,#02H ;HOURS=00H
MOVX @DPTR,A ;SET HOURS
SETB P3.6
CLR P3.6
ACALL DELAY
MOV DPTR,#11 ;REG B ADDRESS
MOV A,#03 ;D7=0 OF REG B TO ALLOW UPDATE
MOVX @DPTR,A ; SEND IT TO REGISTER B
SETB P3.6 ;DISABLING THE WRITE SIGNAL
;====INITIALSING LCD============================================
MOV A,#80H
ACALL command
MOV A,#38H
ACALL command
MOV A,#0EH
ACALL command
MOV A,#01H
ACALL command
ACALL delay
MOV A,#80H
ACALL command
MOV DPTR,#LINE_1
NXT1: MOV A,#00H
MOVC A,@A+DPTR
JZ OUTx
ACALL DISPLAY ;/--("TIME:")
INC DPTR
SJMP NXT1
;====READING TIME==============================================
outx:
AGAIN1: MOV DPTR,#04
SETB P3.7
CLR P3.7 ;SET READ
ACALL DELAY
MOVX A,@DPTR ;READ SECONDS
MOV P0,A
ACALL DISPLAYNUM
MOV A,#':'
ACALL DISPLAY
MOV DPTR,#02 ;POINT TO SEC. LOC.
SETB P3.7
CLR P3.7 ;SET READ
ACALL DELAY
MOVX A,@DPTR ;READ SECONDS
MOV P0,A
ACALL DISPLAYNUM
MOV A,#':'
ACALL DISPLAY
MOV DPTR,#00 ;POINT TO SEC. LOC.
SETB P3.7
CLR P3.7 ;SET READ
ACALL DELAY
MOVX A,@DPTR ;READ SECONDS
MOV P0,A
ACALL DISPLAYNUM
ACALL DELAY_1SEC
MOV A,#86H ;GOING BACK TO 1ST LINE & 6TH POSITION
ACALL command
SJMP AGAIN1
;====LCD COMMAND & DATA SUBROUTINE=============================
command: acall ready
mov p1,a
clr p3.3
clr p3.4
setb p3.5
clr p3.5
ret
ready: setb p1.7
clr p3.3
setb p3.4
check1: clr p3.5
setb p3.5
jb p1.7,check1
ret
display: acall ready
mov p1,a
setb p3.3
clr p3.4
setb p3.5
clr p3.5
ret
DISPLAYNUM:
MOV B,A
SWAP A
ANL A,#0FH
ORL A,#30H
ACALL DISPLAY
MOV A,B
ANL A,#0FH
ORL A,#30H
ACALL DISPLAY
RET
;====DELAY SUBROUTINE======================================
;====200MSEC SUBROUTINE======================================
DELAY_200ms:
MOV R1,#4
HERE1: MOV R2,#250
HERE: NOP
NOP
DJNZ R2,HERE
DJNZ R1,HERE1
RET
;====SIMPLE DELAY==========================================
delay:
MOV R1,#10
HERE11: MOV R2,#0FAH
HEREX: NOP
NOP
DJNZ R2,HEREX
DJNZ R1,HERE11
RET
;====ONE SECOND DELAY===================================
DELAY_1SEC: MOV TMOD,#01 ;Timer 0, 16-bitmode
mov r1,#0Ah
xx2: mov r0,#64h
xx1: MOV TL0,#0FDh ;TL0=0, the low byte
MOV TH0,#92h ;TH0=0, the high byte
SETB TR0 ;Start timer 0
AGAIN: JNB TF0,AGAIN
djnz r0,xx1
djnz r1,xx2 ;Monitor timer flag 0
CLR TR0 ;Stop the timer 0
CLR TF0 ;Clear timer 0 flag
sjmp $
;====
org 350h
LINE_1: DB 'TIME: ',0
END
Last edited by a moderator: