;*****************Part 2***************** ; by: Eng'r Roland Michael A. dela Peña * ;**************************************** LIST P=16F84 ERRORLEVEL -302 #INCLUDE P16F84.INC ;************************************************************ ; REGISTER DEFINITIONS ;************************************************************ CBLOCK 0CH SEC ; ONES FOR SECONDS SECT ; TENS FOR SECONDS MIN ; ONES FOR MINUTES MINT ; TENS FOR MINUTES HOUR ; ONES FOR HOURS HOURT ; TENS FOR HOURS DAY ; ONES FOR DAYS DAYT ; TENS FOR DAYS CLOCKVAR ; VARIABLE REGISTER FOR DISPLAYING CLOCK ROLAND ; VARIABLE REGISTER (SEND CHARACTER TO LCD) BUFFER ; DATA BUFFER COUNT ; BIT COUNTER CALLS ; VARIABLE REGISTER FOR DISPLAYING CALLS DUR ; VARIABLE REGISTER FOR DISPLAYING DURATION CLOCK ; SHIFT COUNTER FOR ROTATING INSTRUCTIONS CLOCK1 ; VARIABLE REGISTER FOR DISPLAYING CLOCK FADECHAR1 ; INDICATOR FOR BLINKING CHARACTER FADECHAR ; INDICATOR FOR BLINKING CHARACTER FLASH ; INDICATOR FOR BLINKING CHARACTER ADDR ; VARIABLE REGISTER (LCD ADDRESS) SFTCNT ; SHIFT LOOP COUNTER LOOP ; DELAY LOOP COUNTER LOOPS ; DELAY LOOP COUNTER LOOPS2 ; DELAY LOOP COUNTER LOOPS3 ; DELAY LOOP COUNTER ENDC ;************************************************************ ; BIT DEFINITIONS ;************************************************************ RS EQU 3 ; LCD REGISTER SELECT CONTROL LINE RW EQU 2 ; LCD READ/WRITE CONTROL LINE E EQU 1 ; LCD ENABLE CONTROL LINE BUSY EQU 4 ; BUSY BIT CLK EQU 6 ; CLOCK BIT DAT EQU 7 ; DATA BIT ;************************************************************************ ;THIS PART INITIALIZES THE PORTS AND OTHER PHERIPERALS IN MICROCONTROLLER ;************************************************************************ ORG 0000h ; SET POWER ON RESET VECTOR. CALL FORTY ; SET DD RAM ADDRESS TO 40h (FOR 2ND LINE). CLRF DUR ; RESET THE SELECTED REGISTERS. CLRF CLOCK CLRF CLOCK1 CLRF CLOCKVAR BSF STATUS,RP0 ; SET BANK = 1. BCF OPTION_REG,7 ; ENABLE BUILT-IN PULL-UP RESISTORS. MOVLW b'11000000' ; SET RB6,RB7 TO INPUT MOVWF TRISB ; AND RB0,RB1,RB2,RB3,RB4,RB5 TO OUTPUT. MOVLW b'00000000' ; SET RA0,RA1,RA2,RA3,RA4 TO OUTPUT. MOVWF TRISA BCF STATUS,RP0 ; SET BANK = 0. ;************************************************************** ; THIS ROUTINE INITIALIZE LCD. ;************************************************************** MOVLW d'15' MOVWF LOOPS CALL WAIT ; WAIT FOR 15ms UNTIL Vcc RISES TO 4.5V. CLRF PORTB ; CLEAR CONTROL LINES. CALL INITLCD MOVLW d'5' MOVWF LOOPS CALL WAIT ; WAIT FOR 5ms MORE. CALL INITLCD MOVLW d'1' MOVWF LOOPS MOVLW d'20' MOVWF LOOPS2 CALL TOP ; WAIT FOR 100us MORE. CALL INITLCD CALL INITLCD MOVLW b'00101000' CALL SENDCMD ; SEND COMMAND FOR 4-BIT INTERFACE. CALL INIT_LCD ; SEND COMMAND FOR DISPLAY-ON, RETURN HOME & MOVLW b'00000110' ; CLEAR DISPLAY. CALL SENDCMD ; SEND COMMAND FOR ENTRY MODE SET. ;************************************************************* ; CHARACTER GENERATOR ; THIS ROUTINE DRAW A TELEPHONE TO THE LCD ;************************************************************* MOVLW b'01000000' CALL SENDCMD ; SEND CG RAM ADDRESS. CALL CHARGEN6 ; SEND FIRST CHARACTER. CALL CHARGEN5 CALL CHARGEN4 MOVLW b'00001000' CALL SENDCHAR MOVLW b'00010000' CALL SENDCHAR MOVLW b'00010001' CALL SENDCHAR CALL CHARGEN1 CALL CHARGEN12 CALL CHARGEN2 ; SEND SECOND CHARACTER. CALL CHARGEN2 ; SEND THIRD CHARACTER. CALL CHARGEN6 ; SEND FORTH CHARACTER. CALL CHARGEN9 CALL CHARGEN4 CALL CHARGEN12 CALL CHARGEN16 MOVLW b'00010001' CALL SENDCHAR CALL CHARGEN1 CALL CHARGEN13 CALL CHARGEN12 ; SEND FIFTH CHARACTER. CALL CHARGEN10 CALL CHARGEN5 CALL CHARGEN14 ; SEND SIXTH CHARACTER. CALL CHARGEN1 CALL CHARGEN14 CALL CHARGEN1 CALL CHARGEN14 CALL CHARGEN8 CALL CHARGEN15 ; SEND SEVENTH CHARACTER. CALL CHARGEN1 CALL CHARGEN15 CALL CHARGEN1 CALL CHARGEN15 CALL CHARGEN8 CALL CHARGEN13 ; SEND EIGHTH CHARACTER. CALL CHARGEN10 CALL CHARGEN9 ;************************************************************* ; INTRODUCTION ; THIS ROUTINE DISPLAY THE INTRODUCTION ; YOU WILL SEE THE TELEPHONE ICON AND THE TITLE OF THE ; PROJECT "PREV. CALL MONITORING ; AFTER 3 SEC. OF DELAY THE NAMES OF THE ENGINEERS OF THIS ; PROJECT APPEARS " By: Jermyn, ; Joseph, Rico and" ;************************************************************* CALL ADDRESS0 ; SEND DD RAM ADDRESS (1ST LINE). CALL CHARGEN6 ; DISPLAY ONE PART OF THE TELEPHONE DRAWING. CALL CHARGEN16 ; DISPLAY ONE PART OF THE TELEPHONE DRAWING. CALL CHARGEN12 ; DISPLAY ONE PART OF THE TELEPHONE DRAWING. CALL CHARGEN5 ; DISPLAY ONE PART OF THE TELEPHONE DRAWING. CALL CHARGEN11 ; DISPLAY ASCII CHARATER " ". CALL P ; DISPLAY ASCII CHARACTER "P". CALL R ; DISPLAY ASCII CHARACTER "R". MOVLW 'E' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "E". MOVLW 'V' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "V". CALL PERIOD ; DISPLAY ASCII CHARACTER ".". CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". MOVLW 'C' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "C". MOVLW 'A' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "A". MOVLW 'L' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "L". MOVLW 'L' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "L". MOVLW b'11000000' CALL SENDCMD ; SEND DD RAM ADDRESS (2ND LINE). CALL CHARGEN4 ; DISPLAY ONE PART OF THE TELEPHONE DRAWING. CALL CHARGEN20 ; DISPLAY ONE PART OF THE TELEPHONE DRAWING. CALL CHARGEN17 ; DISPLAY ONE PART OF THE TELEPHONE DRAWING. MOVLW b'00000111' CALL SENDCHAR ; DISPLAY ONE PART OF THE TELEPHONE DRAWING. CALL CHARGEN11 ; DISPLAY ASCII CHARATER " ". MOVLW 'M' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "M". MOVLW 'O' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "O". MOVLW 'N' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "N". MOVLW 'I' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "I". MOVLW 'T' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "T". MOVLW 'O' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "O". CALL R ; DISPLAY ASCII CHARACTER "R". MOVLW 'I' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "I". MOVLW 'N' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "N". MOVLW 'G' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "G". CALL WAIT1 ; WAIT FOR 3 SEC. CALL INIT_LCD ; RESET THE LCD. MOVLW b'10000010' CALL SENDCMD ; SEND DD RAM ADDRESS (1ST LINE). MOVLW 'B' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "B". CALL y ; DISPLAY ASCII CHARACTER "y". CALL COLON ; DISPLAY ASCII CHARACTER ":". CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". MOVLW 'J' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "J". CALL e ; DISPLAY ASCII CHARACTER "e". CALL r ; DISPLAY ASCII CHARACTER "r". CALL m ; DISPLAY ASCII CHARACTER "m". CALL y ; DISPLAY ASCII CHARACTER "y". CALL n ; DISPLAY ASCII CHARACTER "n". MOVLW ',' CALL SENDCHAR ; DISPLAY ASCII CHARACTER ",". CALL ADDRESS1 ; SEND DD RAM ADDRESS (2ND LINE). MOVLW 'J' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "J". CALL o ; DISPLAY ASCII CHARACTER "o". CALL s ; DISPLAY ASCII CHARACTER "s". CALL e ; DISPLAY ASCII CHARACTER "e". CALL p ; DISPLAY ASCII CHARACTER "p". CALL h ; DISPLAY ASCII CHARACTER "h". MOVLW ',' CALL SENDCHAR ; DISPLAY ASCII CHARACTER ",". CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". CALL R ; DISPLAY ASCII CHARACTER "R". CALL i ; DISPLAY ASCII CHARACTER "i". CALL c ; DISPLAY ASCII CHARACTER "c". CALL o ; DISPLAY ASCII CHARACTER "o". CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". CALL and ; DISPLAY "and". CALL WAIT1 ; WAIT ANOTHER 3 SEC. ;************************************************************* ; CHARACTER GENERATOR ; THIS ROUTINE DRAW A FACE TO THE LCD ;************************************************************* MOVLW b'01000000' CALL SENDCMD ; SEND CG RAM ADDRESS. CALL CHARGEN16 ; SEND FIRST CHARACTER. CALL CHARGEN17 CALL CHARGEN18 MOVLW b'00001100' CALL SENDCHAR MOVLW b'00011001' CALL SENDCHAR CALL CHARGEN19 MOVLW b'00011100' CALL SENDCHAR CALL CHARGEN9 CALL CHARGEN9 ; SEND SECOND CHARACTER. CALL CHARGEN17 CALL CHARGEN14 MOVLW b'00011101' CALL SENDCHAR CALL CHARGEN5 CALL CHARGEN1 MOVLW b'00011011' CALL SENDCHAR CALL CHARGEN20 MOVLW b'00011100' CALL SENDCHAR ; SEND THIRD CHARACTER. CALL CHARGEN19 CALL CHARGEN17 CALL CHARGEN17 CALL CHARGEN12 CALL CHARGEN12 CALL CHARGEN5 CALL CHARGEN12 CALL CHARGEN16 ; SEND FORTH CHARACTER. CALL CHARGEN20 CALL CHARGEN12 CALL CHARGEN19 CALL CHARGEN4 MOVLW b'00010100' CALL SENDCHAR MOVLW b'00001100' CALL SENDCHAR CALL CHARGEN4 ;************************************************************* ; 3 SEC. DELAY THE FACE DRAWING APPEARS ; WITH THE PROGRAMMER'S NAME " Roland ; Michael" ; THEN ANOTHER 3 SEC. DELAY THE INSTRUCTION APPEARS ; "Press "*" to display calls" ;************************************************************* CALL INIT_LCD ; RESET THE LCD. MOVLW b'10011001' CALL SENDCMD ; SEND DD RAM ADDRESS (1ST LINE). CALL CHARGEN6 ; DISPLAY ONE PART OF THE FACE DRAWING. CALL CHARGEN16 ; DISPLAY ONE PART OF THE FACE DRAWING. CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". CALL R ; DISPLAY ASCII CHARACTER "R". CALL o ; DISPLAY ASCII CHARACTER "o". CALL l ; DISPLAY ASCII CHARACTER "l". CALL and ; DISPLAY "and". MOVLW b'11011001' CALL SENDCMD ; SEND DD RAM ADDRESS (2ND LINE). CALL CHARGEN12 ; DISPLAY ONE PART OF THE FACE DRAWING. CALL CHARGEN5 ; DISPLAY ONE PART OF THE FACE DRAWING. CALL DOUBLE ; DISPLAY " ". CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". MOVLW 'M' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "M". CALL i ; DISPLAY ASCII CHARACTER "i". CALL c ; DISPLAY ASCII CHARACTER "c". CALL h ; DISPLAY ASCII CHARACTER "h". CALL a ; DISPLAY ASCII CHARACTER "a". CALL e ; DISPLAY ASCII CHARACTER "e". CALL l ; DISPLAY ASCII CHARACTER "l". MOVLW d'19' MOVWF SFTCNT SHIFTRIGHT CALL SFTRIGHT ; SHIFT TO THE RIGHT. CALL WAIT4 DECFSZ SFTCNT GOTO SHIFTRIGHT CALL SFTLEFT ; SHIFT TO THE LEFT. CALL WAIT4 CALL SFTLEFT ; SHIFT TO THE LEFT. CALL WAIT4 CALL SFTLEFT ; SHIFT TO THE LEFT. CALL WAIT5 CALL SFTLEFT ; SHIFT TO THE LEFT. CALL WAIT5 CALL SFTRIGHT ; SHIFT TO THE RIGHT. CALL WAIT6 CALL SFTRIGHT ; SHIFT TO THE RIGHT. CALL WAIT6 CALL SFTRIGHT ; SHIFT TO THE RIGHT. CALL WAIT7 CALL SFTLEFT ; SHIFT TO THE LEFT. CALL WAIT7 CALL SFTLEFT ; SHIFT TO THE LEFT. CALL WAIT8 CALL SFTRIGHT ; SHIFT INSTRUCTION TO THE RIGHT. CALL WAIT2 ; WAIT ANOTHER 3 SEC. CALL FIRST ; DISPLAY "Press "*" to display calls". INTRO CALL CHECKCOM ; CHECK IF MAIN MICROCONTROLLER SEND COMMAND. GOTO INTRO ;************************************************************* ; SUB-ROUTINE FOR CONVERTING 2 MICROCONTROLLER INTERFACED ; LANGUAGE TO ASCII CHARACTER ;************************************************************* GETDATA MOVLW d'1' MOVWF PCLATH ; LATCH HIGH PROGRAM COUNTER TO 1ST PAGE. MOVFW BUFFER ADDWF PCL RETLW '0' ; 0 RETLW '1' ; 1 RETLW '2' ; 2 RETLW '3' ; 3 RETLW '4' ; 4 RETLW '5' ; 5 RETLW '6' ; 6 RETLW '7' ; 7 RETLW '8' ; 8 RETLW '9' ; 9 RETLW ' ' ; BLANK ;************************************************************* ; DELAY ROUTINE ; THIS ROUTINE TAKES THE VALUE IN ‘LOOPS’ ; AND MULTIPLIES IT TIMES 1 MILLISECOND TO ; DETERMINE DELAY TIME ;************************************************************* WAIT MOVLW d'250' ; TIMING ADJUSTMENT VARIABLE. MOVWF LOOPS2 TOP NOP ; SIT AND WAIT. NOP NOP NOP NOP DECFSZ LOOPS2 ; INNER LOOPS COMPLETE? GOTO TOP ; NO, GO AGAIN. DECFSZ LOOPS ; OUTER LOOPS COMPLETE? GOTO WAIT ; NO, GO AGAIN. RETLW d'0' ; YES, RETURN FROM SUB. WAIT0 MOVLW d'250' ; TIMING ADJUSTMENT VARIABLE. MOVWF LOOPS2 TOP0 NOP ; SIT AND WAIT. NOP CALL CHECKCOM ; CHECK IF MAIN MICROCONTROLLER SEND COMMAND. DECFSZ LOOPS2 ; INNER LOOPS COMPLETE? GOTO TOP0 ; NO, GO AGAIN. DECFSZ LOOPS ; OUTER LOOPS COMPLETE? GOTO WAIT0 ; NO, GO AGAIN. RETLW d'0' ; YES, RETURN FROM SUB. WAIT1 MOVLW d'12' ; SET 3 SECONDS DELAY. MOVWF LOOP TOP1 CLRF LOOPS CALL WAIT0 DECFSZ LOOP GOTO TOP1 RETLW d'0' WAIT2 MOVLW d'20' ; SET 5 SECONDS DELAY. MOVWF LOOP GOTO TOP1 WAIT3 MOVLW d'250' ; SET 250 msec DELAY. GOTO GOTOWAIT WAIT4 MOVLW d'50' ; SET 50 msec DELAY. GOTO GOTOWAIT WAIT5 MOVLW d'80' ; SET 80 msec DELAY. GOTO GOTOWAIT WAIT6 MOVLW d'160' ; SET 160 msec DELAY. GOTO GOTOWAIT WAIT7 MOVLW d'200' ; SET 200 msec DELAY. GOTO GOTOWAIT WAIT8 MOVLW d'220' ; SET 220 msec DELAY. GOTOWAIT MOVWF LOOPS GOTO WAIT0 ;************************************************************* ; SENDS CHARACTER TO LCD ; THIS ROUTINE SPLITS THE CHARACTER INTO THE UPPER AND LOWER ; NIBBLES AND SENDS THEM TO THE LCD, UPPER NIBBLE FIRST ; THE DATA IS TRANSMITTED ON THE PORTA RA3:RA0 PINS ;************************************************************* FILLALL CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". MOVLW b'10100101' SENDCHAR CALL SEND BSF PORTB,RS ; SET LCD TO DATA MODE. GOTO SEND1 SEND MOVWF ROLAND ; CHARACTER TO BE SENT IS IN W REGISTER. MOVLW d'2' ; DELAY FOR SENDING DATA TO LCD. MOVWF LOOPS MOVLW d'5' ; DELAY FOR SENDING DATA TO LCD. MOVWF LOOPS2 CALL WAIT ; WAIT LCD TO BE READY. SWAPF ROLAND,0 ANDLW b'00001111' ; GET UPPER NIBBLE. MOVWF PORTA ; SEND DATA TO LCD. BCF PORTB,RW ; SET LCD TO READ. RETLW d'0' ;************************************************************* ; SENDS COMMAND TO LCD ; THIS ROUTINE SPLITS THE COMMAND INTO THE UPPER AND LOWER ; NIBBLES AND SENDS THEM TO THE LCD, UPPER NIBBLE FIRST ; THE DATA IS TRANSMITTED ON THE PORTA RA3:RA0 PINS ;************************************************************* ADDRESS0 MOVLW b'10000000' ; SEND DD RAM ADDRESS (1ST LINE). SENDCMD CALL SEND BCF PORTB,RS ; SET LCD TO COMMAND MODE. SEND1 CALL TOGGLE ; TOGGLE E FOR LCD. MOVFW ROLAND ANDLW b'00001111' ; GET LOWER NIBBLE. MOVWF PORTA ; SEND DATA TO LCD. TOGGLE BSF PORTB,E ; SET E HIGH. BCF PORTB,E ; SET E LOW. RETURN ;************************************************************** ; THIS SUB ROUTINE INITIALIZE LCD. ;************************************************************** INIT_LCD MOVLW b'00000001' CALL SENDCMD ; SEND COMMAND FOR CLEAR DISPLAY. MOVLW b'00000010' CALL SENDCMD ; SEND COMMAND FOR RETURN HOME. MOVLW b'00001100' CALL SENDCMD ; SEND COMMAND FOR DISPLAY ON. CALL FORTY ; RESET ADDRESS. CLRF CLOCK CLRF CLOCKVAR RETLW d'0' ;************************************************************* ; THIS SUB-ROUTINES SENDS THE CUSTOM CHARACTERS TO THE LCD ;************************************************************* CHARGEN1 MOVLW b'00011111' GOTO SENDCHAR CHARGEN2 CALL CHARGEN1 CALL CHARGEN6 CALL CHARGEN6 CALL CHARGEN19 CALL CHARGEN18 MOVLW b'00011011' CALL SENDCHAR CALL CHARGEN6 GOTO CHARGEN1 CHARGEN3 MOVLW '#' GOTO SENDCHAR CHARGEN4 MOVLW b'00000100' GOTO SENDCHAR CHARGEN5 MOVLW b'00000011' GOTO SENDCHAR CHARGEN6 MOVLW b'00000000' GOTO SENDCHAR CHARGEN7 CALL CHARGEN18 GOTO CHARGEN1 CHARGEN8 CALL CHARGEN1 CALL CHARGEN6 GOTO CHARGEN1 CHARGEN9 MOVLW b'00011000' GOTO SENDCHAR CHARGEN10 CALL CHARGEN4 CALL CHARGEN4 CALL CHARGEN4 CALL CHARGEN4 CALL CHARGEN4 GOTO CHARGEN4 CHARGEN11 MOVLW ' ' GOTO SENDCHAR CHARGEN12 MOVLW b'00000010' GOTO SENDCHAR CHARGEN13 MOVLW b'00001000' GOTO SENDCHAR CHARGEN14 MOVLW b'00010010' GOTO SENDCHAR CHARGEN15 MOVLW b'00001001' GOTO SENDCHAR CHARGEN16 MOVLW b'00000001' GOTO SENDCHAR CHARGEN17 MOVLW b'00000110' GOTO SENDCHAR CHARGEN18 MOVLW b'00001010' GOTO SENDCHAR CHARGEN19 MOVLW b'00001110' GOTO SENDCHAR CHARGEN20 MOVLW b'00000101' GOTO SENDCHAR ;************************************************************* ; THIS SUB-ROUTINES SENDS THE SOME CHARACTERS AND WORDS ; (TO SAVE SOME PROGRAM MEMORY) ;************************************************************* STAR MOVLW '*' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "*". QOUTATION MOVLW '"' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER """. COLON MOVLW ':' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER ":". PERIOD MOVLW '.' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER ".". R MOVLW 'R' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "R". e MOVLW 'e' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "e". r MOVLW 'r' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "r". m MOVLW 'm' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "m". y MOVLW 'y' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "y". n MOVLW 'n' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "n". o MOVLW 'o' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "o". s MOVLW 's' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "s". p MOVLW 'p' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "p". i MOVLW 'i' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "i". c MOVLW 'c' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "c". l MOVLW 'l' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "l". a MOVLW 'a' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "a". d MOVLW 'd' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "d". t MOVLW 't' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "t". u MOVLW 'u' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "u". h MOVLW 'h' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "h". P MOVLW 'P' GOTO SENDCHAR ; DISPLAY ASCII CHARACTER "P". DOUBLE CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". GOTO CHARGEN11 ; DISPLAY ASCII CHARACTER " ". PRESS CALL INIT_LCD ; RESET THE LCD. CALL DOUBLE ; DISPLAY " ". CALL PRESS2 ; DISPLAY "Press ". GOTO QOUTATION ; DISPLAY ASCII CHARACTER """. PRESS1 CALL QOUTATION ; DISPLAY ASCII CHARACTER """. GOTO to ; DISPLAY " to". PRESS2 CALL Pre ; DISPLAY "Pre". CALL s ; DISPLAY ASCII CHARACTER "s". CALL s ; DISPLAY ASCII CHARACTER "s". GOTO CHARGEN11 ; DISPLAY ASCII CHARACTER " ". Pre CALL P ; DISPLAY ASCII CHARACTER "P". CALL r ; DISPLAY ASCII CHARACTER "r". GOTO e ; DISPLAY ASCII CHARACTER "e". DISP CALL d ; DISPLAY ASCII CHARACTER "d". CALL i ; DISPLAY ASCII CHARACTER "i". CALL s ; DISPLAY ASCII CHARACTER "s". CALL p ; DISPLAY ASCII CHARACTER "p". CALL l ; DISPLAY ASCII CHARACTER "l". CALL a ; DISPLAY ASCII CHARACTER "a". CALL y ; DISPLAY ASCII CHARACTER "y". GOTO CHARGEN11 ; DISPLAY ASCII CHARACTER " ". all CALL a ; DISPLAY ASCII CHARACTER "a". CALL l ; DISPLAY ASCII CHARACTER "l". GOTO l ; DISPLAY ASCII CHARACTER "l". scroll CALL s ; DISPLAY ASCII CHARACTER "s". CALL c ; DISPLAY ASCII CHARACTER "c". CALL r ; DISPLAY ASCII CHARACTER "r". CALL o ; DISPLAY ASCII CHARACTER "o". CALL l ; DISPLAY ASCII CHARACTER "l". CALL l ; DISPLAY ASCII CHARACTER "l". GOTO CHARGEN11 ; DISPLAY ASCII CHARACTER " ". adjust CALL a ; DISPLAY ASCII CHARACTER "a". CALL d ; DISPLAY ASCII CHARACTER "d". MOVLW 'j' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "j". CALL u ; DISPLAY ASCII CHARACTER "u". CALL s ; DISPLAY ASCII CHARACTER "s". GOTO t ; DISPLAY ASCII CHARACTER "t". shift CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". CALL s ; DISPLAY ASCII CHARACTER "s". CALL h ; DISPLAY ASCII CHARACTER "h". CALL i ; DISPLAY ASCII CHARACTER "i". MOVLW 'f' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "f". GOTO t ; DISPLAY ASCII CHARACTER "t". ime CALL i ; DISPLAY ASCII CHARACTER "i". CALL m ; DISPLAY ASCII CHARACTER "m". GOTO e ; DISPLAY ASCII CHARACTER "e". and CALL a ; DISPLAY ASCII CHARACTER "a". CALL n ; DISPLAY ASCII CHARACTER "n". GOTO d ; DISPLAY ASCII CHARACTER "d". to CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". CALL t ; DISPLAY ASCII CHARACTER "t". GOTO o ; DISPLAY ASCII CHARACTER "o". CALLNO CALL INIT_LCD CALL DOUBLE ; DISPLAY " ". MOVLW 'C' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "C". CALL all ; DISPLAY "all ". CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". GOTO CHARGEN3 ; DISPLAY ASCII CHARACTER "#". ;************************************************************* ; THIS SUB-ROUTINES SENDS THE INSTRUCTIONS TO BE ; DISPLAYED IN LCD ;************************************************************* FIRST CALL PRESS CALL STAR ; DISPLAY ASCII CHARACTER "*". GOTO FIRST2 FIRST1 CALL PRESS CALL CHARGEN3 ; DISPLAY ASCII CHARACTER "#". FIRST2 CALL PRESS1 CALL ADDRESS2 ; SEND DD RAM ADDRESS (2ND LINE). CALL DISP ; DISPLAY "display ". CALL c ; DISPLAY ASCII CHARACTER "c". CALL all ; DISPLAY "all". GOTO s ; DISPLAY ASCII CHARACTER "s". SECOND CALL PRESS ; DISPLAY "Press "". CALL CHARGEN3 ; DISPLAY ASCII CHARACTER "#". CALL PRESS1 ; DISPLAY "" to". CALL ADDRESS1 ; SEND DD RAM ADDRESS (2ND LINE). CALL DISP ; DISPLAY "display ". CALL d ; DISPLAY ASCII CHARACTER "d". CALL u ; DISPLAY ASCII CHARACTER "u". CALL r ; DISPLAY ASCII CHARACTER "r". CALL a ; DISPLAY ASCII CHARACTER "a". CALL t ; DISPLAY ASCII CHARACTER "t". CALL i ; DISPLAY ASCII CHARACTER "i". CALL o ; DISPLAY ASCII CHARACTER "o". GOTO n ; DISPLAY ASCII CHARACTER "n". THIRD CALL PRESS ; DISPLAY "Press "". MOVLW '0' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "0". CALL PRESS1 ; DISPLAY "" to". CALL ADDRESS2 ; SEND DD RAM ADDRESS (2ND LINE). CALL scroll ; DISPLAY "scroll ". CALL d ; DISPLAY ASCII CHARACTER "d". CALL o ; DISPLAY ASCII CHARACTER "o". MOVLW 'w' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "w". GOTO n ; DISPLAY ASCII CHARACTER "n". FORTH CALL PRESS ; DISPLAY "Press "". MOVLW '8' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "0". CALL PRESS1 ; DISPLAY "" to". MOVLW b'11000011' CALL SENDCMD ; SEND DD RAM ADDRESS (2ND LINE). CALL scroll ; DISPLAY "scroll ". CALL u ; DISPLAY ASCII CHARACTER "u". GOTO p ; DISPLAY ASCII CHARACTER "p". FIFTH CALL PRESS CALL STAR ; DISPLAY ASCII CHARACTER "*". CALL PRESS1 CALL ADDRESS1 ; SEND DD RAM ADDRESS (2ND LINE). CALL adjust ; DISPLAY "adjust". CALL CHARGEN11 ; DISPLAY ASCII CHARACTER " ". CALL d ; DISPLAY ASCII CHARACTER "d". CALL a ; DISPLAY ASCII CHARACTER "a". CALL t ; DISPLAY ASCII CHARACTER "t". CALL e ; DISPLAY ASCII CHARACTER "e". MOVLW '/' CALL SENDCHAR ; DISPLAY ASCII CHARACTER "/". CALL t ; DISPLAY ASCII CHARACTER "t". GOTO ime ; DISPLAY "ime". ;************************************************************* ; THIS SUB-ROUTINES SENDS THE DD RAM ADDRESS ;************************************************************* ADDRESS1 MOVLW b'11000000' GOTO SENDCMD ; SEND DD RAM ADDRESS (2ND LINE). ADDRESS2 MOVLW b'11000010' GOTO SENDCMD ; SEND DD RAM ADDRESS (2ND LINE). ADDRESS3 MOVLW b'10010100' GOTO SENDCMD ; SEND DD RAM ADDRESS (1ST LINE). INITLCD MOVLW b'00000010' MOVWF PORTA GOTO TOGGLE SFTRIGHT MOVLW b'00011100' GOTO SENDCMD ; SHIFT INSTRUCTION TO THE RIGHT. SFTLEFT MOVLW b'00011000' GOTO SENDCMD ; SHIFT INSTRUCTION TO THE LEFT. END