  ;*********************************
  ;Print Lcd Clock and Message     *
  ; File:lcd.a51                   *
  ;Written by :Dr Menachem Epstein     *
  ;Date:12.12.2003                 *
  ;*********************************
   org 0
   ljmp 100h

   org 100h
   mov psw,#0;bank 0
   mov sp,#60h; stack pointer
   ;---------------------control 8255
   mov dptr,#0ff17h
   mov a,#80h
   movx @dptr,a; pa out  pc out
   ;----------------------control lcd
    
    mov b,#0;  indx
loop:mov dptr,#control
    mov a,b
    movc a,@a+dptr
    cjne a,#'$',sof_1
    ljmp exit
sof_1:mov dptr,#0ff14h
    movx @dptr,a
    mov a,#1    ; rs=0 r/w=0 e=1
    mov dptr,#0ff16h
    movx @dptr,a
    mov a,#0    ; rs=0 r/w=0 e=0
    movx @dptr,a
    lcall delay
    inc b
    ljmp loop
 ;------start clock lcd
exit:     ;------gotoxy line 1
     mov a,#85h
     lcall char_control_lcd
     ;-----print messege
     mov dptr,#string
     lcall print_mes
     
     ;--------- Clock booting
st_3:mov 50h,#'0';hours
     mov 51h,#'0'
     mov 52h,#':'
st_2:mov 53h,#'0' ;minutes
     mov 54h,#'0'
     mov 55h,#':'
st_1:mov 56h,#'0';seconds
     mov 57h,#'0';
clock_begin: ;------gotoxy line 2
     mov a,#0c5h
     lcall char_control_lcd     
     lcall print_lcd_clock
     lcall delay

     inc 57h
     mov a,57h
     cjne a,#3ah,clock_begin
     mov 57h,#'0'

     inc 56h
     mov a,56h
     cjne a,#'6',clock_begin

     inc 54h
     mov a,54h
     cjne a,#3ah,st_1
     mov 54h,#'0'

     inc 53h
     mov a,53h
     cjne a,#'6',st_1
     mov 53h,#'0'

     
     mov a,50h
     cjne a,#'2',st_1x

     inc 51h
     mov a,51h
     cjne a,#'4',st_2
     mov 51h,#'0'



xxx:inc 50h
     mov a,50h
     cjne a,#'3',st_2
     mov 50h,#'0'
         
     ljmp st_3     

st_1x:inc 51h
     mov a,51h
     cjne a,#3ah,st_2
     mov 51h,#'0'
     ljmp xxx

print_lcd_clock:
    mov r5,#8
    mov r0,#50h
pc_lcd:mov a,@r0
    mov dptr,#0ff14h
    movx @dptr,a
    mov a,#5    ; rs=1 r/w=0 e=1
    mov dptr,#0ff16h
    movx @dptr,a
    mov a,#4    ; rs=1 r/w=0 e=0
    movx @dptr,a
    lcall delay
    inc r0
    djnz r5,pc_lcd
     ret
     

char_control_lcd:
    mov dptr,#0ff14h
    movx @dptr,a
    mov a,#1    ; rs=0 r/w=0 e=1
    mov dptr,#0ff16h
    movx @dptr,a
    mov a,#0    ; rs=0 r/w=0 e=0
    movx @dptr,a
    lcall delay
    ret     
     
     
print_mes:
    mov b,#0;  indx
loop1:push dpl
      push dph 
    mov a,b
    movc a,@a+dptr
    cjne a,#'$',sof
    ljmp exit1
sof:mov dptr,#0ff14h
    movx @dptr,a
    mov a,#5    ; rs=1 r/w=0 e=1
    mov dptr,#0ff16h
    movx @dptr,a
    mov a,#4    ; rs=1 r/w=0 e=0
    movx @dptr,a
    lcall delay
    inc b
      pop dph
      pop dpl
      ljmp loop1
exit1:dec sp
      dec sp
      ret

delay:mov r7,#50h
xx:   mov r6,#08h
      djnz r6,$
      djnz r7,xx  
      ret
control: db 38h,38h,38h,0eh,06h,01,'$'
string: db 'asaf$'
end 