;*****************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
(
geocities.com/ece23314)