You are on page 1of 4

Counter20 equ 70h

second
equ 71h
minute
equ 72h
hour
equ 73h
secondOnes equ 74h
secondTens equ 75h
minuteOnes equ 76h
minuteTens equ 77h
hourOnes equ 78h
hourTens equ 79h
;
org 0h
ljmp start
;=============================
;vektor interrupt TF0 location
;=============================
org 0bh
Ljmp timerinterrupt
;
Start: mov counter20,#20
mov second,#60
mov minute,#60
mov hour,#60
call UpdateDisplay
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0
;enable timer 0 interrupt
setb EA
;enable all interrupts
setb TR0
;start timer 0
call init_lcd
;
;========================================================
;This subroutine will display Digital Clock as HH:MM:SS
;as you have seen, this subroutine execute every time
;========================================================
scandisplay:
mov r1,#8ch
acall write_inst
mov r1,secondones
acall write_data
;
mov r1,#8bh
acall write_inst
mov r1,secondtens
acall write_data
;
mov r1,#89h
acall write_inst
mov r1,minuteones
acall write_data
;
mov r1,#88h
acall write_inst
mov r1,minutetens
acall write_data
;
mov r1,#86h
acall write_inst
mov r1,hourones

acall write_data
;
mov r1,#85h
acall write_inst
mov r1,hourtens
acall write_data
sjmp scandisplay
;
Init_lcd:
mov r1,#00000001b ;Display clear
acall write_inst ;
mov r1,#00111000b ;Function set,
;Data 8 bit,2 line font 5x7
acall write_inst ;
mov r1,#00001100b ;Display on,
;cursor off,cursor blink off
acall write_inst
mov r1,#00000110b ;Entry mode, Set increment
acall write_inst
ret
;
Write_inst:
clr P3.5 ; RS = P3.5 = 0, write mode instruction
sjmp write
;
Write_data:
setb P3.5 ; RS = P3.5 = 1, write mode data
sjmp write
write:
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1 = P3.7
call delay; call delay time
clr P3.7 ; EN = 0 = P3.7
ret ;kembali
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
;===================================================
;this subroutine will execute every 0,05 second
;after 20 interruption, Digital clock will be updated
;===================================================
timerinterrupt:
mov tl0,#0B0h
mov th0,#03Ch
djnz counter20,EndInterrupt
mov counter20,#20
call DigitalClock
EndInterrupt:
reti
;
;===================================================
;This subroutine below, will process digital clock
;and updates value for second, minute, hour
;===================================================
DigitalClock:
OneSecond:

dec second
mov a,#00
cjne a,second,UpdateDisplay
mov second,#0
;
OneMinute:
dec minute
mov A,#00
cjne A,minute,UpdateDisplay
mov minute,#0
;
OneHour:
dec hour
mov A,#00
cjne A,hour,UpdateDisplay
mov hour,#0
mov minute,#0
mov second,#0
;
UpdateDisplay:
mov a,second
mov b,#10
div ab
mov secondOnes,b
mov secondTens,a
;
mov a,minute
mov b,#10
div ab
mov minuteOnes,b
mov minuteTens,a
;
mov a,hour
mov b,#10
div ab
mov hourOnes,b
mov hourTens,a
;
mov a,#30h
add a,secondOnes
mov secondOnes,a
;
mov a,#30h
add a,secondTens
mov secondTens,a
;
mov a,#30h
add a,minuteOnes
mov minuteOnes,a
;
mov a,#30h
add a,minuteTens
mov minuteTens,a
;
mov a,#30h
add a,hourOnes
mov hourOnes,a
;
mov a,#30h
add a,hourTens

mov hourTens,a
;
ret
End

You might also like