         org  8200h

BDATI = P1     ; Bus dati
RW    = INT1   ; 1:Read 0:Write 
RS    = T1     ; 1:Dato 0:comando
EN    = T0     ; 1:Abilitato 0:disabilitato


        call inittmr
        call initlcd

main:
        mov dptr,#testo
        call wrstr           
	jmp $ 
 

testo    db 'Corso di elettronica',0

;-------------------- Scrive un carattere                
wrchar:          
         call bf        
         mov p1,a
         setb RS
         clr RW
         setb EN
         clr EN
         ret

;-------------------- Scrive una stringa null termined                
wrstr:         
         call bf        
         movx a,@dptr 
         cjne a,#0,invia
         ret
invia    mov p1,a
         setb RS
         clr RW
         setb EN
         clr EN
         inc dptr
         jmp wrstr
             


           
;-------------------- Inizializzazione display                 
initlcd:
        clr EN

        mov a,#00110000b  ;Inizializz. fase 1 
        call wrc 
        mov r1,#50   ;Aspetta 5 ms
        call delay 
        call wrc          ;Inizializz. fase 1 
        call del100u      ;Aspetta 100 us
        call wrc          ;Inizializz. fase 2
	call bf              

        mov a,#00111000b ;Set interfaccia 8 bit          
        call wrc

	call bf

        mov a,#00001100b   ;Display ON/OFF
        call wrc

	call bf        

        mov a,#00000001b   ;Display home 
        call wrc
	  
        call bf

        mov p1,#00000110b  ;Display entry mode 
        call wrc
        ret


  
;------------Scrive comando
; il comando deve essere nel registro a
wrc:       
        clr RS
        clr RW
        mov p1,a  
        setb EN
        clr EN
        ret        
;------------Scrive dato
; il comando deve essere nel registro a
wrd:       
        setb RS
        clr RW
        mov p1,a  
        setb EN
        clr EN
        ret        

;----------------Test busy flag
bf:   
        mov p1,#0ffh
        clr  RS
        setb RW
        setb EN
        jb p1.7,$
        clr EN
	ret	




;--------------------Init Timer
inittmr:
       mov a,tmod
       anl a,#0f0h
       orl a,#02h
       mov tmod,a
       ret

;-------------------delay 100 msec
del100u:
        mov tl0,#256-92
        setb tr0
        jnb tf0,$
        clr tf0
        clr tr0
        ret

;-------------------delay in 100 msec
delay:
        call del100u
        djnz r1,delay 
        ret 
 
        end  
