Professional Documents
Culture Documents
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