
DB0 EQU P1.0
DB1 EQU P1.1
DB2 EQU P1.2
DB3 EQU P1.3
DB4 EQU P1.4
DB5 EQU P1.5
DB6 EQU P1.6
DB7 EQU P1.7

DATA EQU P1

EN EQU P3.7
RS EQU P3.4
RW EQU P3.5


ORG 00H
JMP MAIN

MAIN:

MOV P1, #00H
MOV P3, #00H


JMP START


START:

   CALL INITIALISE

   CALL CLEAR_LCD

   
   MOV A,#'H'
   LCALL WRITE
   
   MOV A,#'E'
   LCALL WRITE
   
   MOV A,#'L'
   LCALL WRITE
   
   MOV A,#'L'
   LCALL WRITE
   
   MOV A,#'O'
   LCALL WRITE
   
   CLR RS
   MOV DATA, #0C0H
   SETB EN
   CLR EN
   LCALL DELAY
   
   MOV A, #'J'
   CALL WRITE
  
   JMP LAST

WRITE:

    SETB RS
    CLR RW
    MOV DATA, A
    SETB EN
    CLR EN
    CALL DELAY
    RET

CLEAR_LCD:

    CLR RW
    CLR RS
    MOV DATA,#01H
    SETB EN
    CLR EN
    CALL DELAY
    RET

INITIALISE:
    
    CLR RW
    CLR RS
    MOV DATA, #38H
    SETB EN
    CLR EN
    CALL DELAY
    CLR RS
    MOV DATA, #0EH
    SETB EN
    CLR EN
    CALL DELAY
    CLR RS
    MOV DATA, #06H
    SETB EN
    CLR EN
    CALL DELAY
    RET

DELAY:

       MOV R2, #06H
        
LOOP4: MOV R3, #06H
        
LOOP3: MOV R4, #06H
        
LOOP2: MOV R5, #06H
        
LOOP1: DJNZ R5, LOOP1
        
       DJNZ R4, LOOP2
        
       DJNZ R3, LOOP3
        
       DJNZ R2, LOOP4
       RET
LAST:
 
       SJMP LAST
       
       
       END
