digitbritedata1
digitbritedata2
digitbritedataL0
digitbritedataL1
digitbritedataL2
britenonfract0
ers.
britenonfract1
britenonfract2
britefract0
britefract1
tempHtrans
tempLtrans
briteHtrans
briteLtrans
A1
A0
A_1
A_0
B1
B0
C1
C0
D1
D0
E1
E0
F1
F0
X1
X0
briteL2
; Brightness variable re
gisters.
briteH2
britefract2
digitbritedata02
registers.
digitbritedata12
digitbritedata22
digitbritedataL02
digitbritedataL12
digitbritedataL22
britenonfract02
britenonfract12
britenonfract22
britefract02
britefract12
tempSPEED
count90
briteHtrans2
briteLtrans2
M1
M2
TSPD1
TSPD2
ENDC
org 0x00
;-------------------------------------------------------------------------------;Start Program
;-------------------------------------------------------------------------------start
call initports
; Initialize Ports as output/inputs.
call INITLCD
; Initialize LCD
call clrscreen
; Clear LCD SCREEN
call DisLCD
;Display Startup Message
call SECOND_1
call SECOND_1
call DisTree
call SECOND_1
call SECOND_1
call DisTwo
call SECOND_1
call SECOND_1
call DisOne
call SECOND_1
;1s delay before execute to main
program
bcf PORTD,2
startup
bcf PORTD,3
bcf PORTC,4
startup
bcf PORTC,5
;-------------------------------------------------------------------------------;MAIN PROGRAM
;-------------------------------------------------------------------------------;------------------MAIN PROGRAM - CONTINOUSLY LOOPING THIS PROGRAM -------------------------main
call DisStanby
call Stop
btfss PORTA,0
goto Fwrd
btfss PORTA,1
goto Rvs
btfss PORTA,2
goto Left
btfss PORTA,3
goto Right
goto main
Fwrd
Rvs
;on
;off
bsf PORTC,5
bcf PORTD,4
btfsc PORTA,0
goto main
goto Fwrd
;on
;off
;Check button foward
call DisRvs
;TURN RIGHT
bsf PORTD,1
bcf PORTD,2
bsf PORTD,3
bcf PORTC,5
bsf PORTD,4
call Delay_T
bcf PORTD,1
call Delay_T
btfsc PORTA,1
goto main
goto Rvs
Left
Right
call DisLeft
;off
;on
;off
;on
;TURN LEFT
bsf PORTD,2
bcf PORTD,3
;on
;off
bcf PORTC,5
bsf PORTD,4
btfsc PORTA,2
goto main
goto Left
;off
;on
;Check button left
call DisRight
;move right
bcf PORTD,2
bsf PORTD,3
;off
;on
bsf PORTC,5
bcf PORTD,4
btfsc PORTA,3
goto main
goto Right
;on
;off
;Check button right
Stop
bcf PORTD,2
bcf PORTD,3
;off
;on
bcf PORTC,5
bcf PORTD,4
;on
;off
return
Delay_Tx
d1x
movlw
movwf
movlw
movwf
movlw
movwf
d'250'
countc
0xC7
counta
0x01
countb
decfsz
goto
decfsz
goto
counta, f
$+2
countb, f
Delay_0x
Delay_0x
decfsz countc ,f
goto
d1x
retlw 0x00
decfsz countc ,f
goto
d1R
retlw 0x00
Delay_T24l
d124l
movlw
movwf
movlw
movwf
movlw
movwf
d'150'
countc
0xC7
counta
0x01
countb
Delay_024l
decfsz
goto
decfsz
goto
counta, f
$+2
countb, f
Delay_024l
decfsz countc ,f
goto
d124l
retlw 0x00
;----------------------------------------------------------------------------------------------------------------------; Subroutine for Time&Delay
;----------------------------------------------------------------------------------------------------------------------BUSY_DELAY
movlw
more1
call
NORMAL_DELAY
movlw
more2
call
CLEAR_DELAY
movlw
more3
call
MINUTE_1
movlw
more1_T
call
SECOND_1
movlw
more
continue
d'70'
movwf N1
SECOND_1
DECFSZ N1,1
goto
more1
return
d'30'
movwf N1
SECOND_1
DECFSZ N1,1
goto
more2
return
d'15'
movwf N1
SECOND_1
DECFSZ N1,1
goto
more3
return
d'40'
movwf N1
SECOND_1
DECFSZ N1,1
goto
more1_T
return
d'4'
movwf N
call
Delay_T
DECFSZ N,1
goto
more
return
Delay_T movlw
d1
d'100'
movwf
movlw
movwf
movlw
movwf
count1
0xC7
counta
0x01
countb
decfsz
goto
decfsz
goto
counta, f
$+2
countb, f
Delay_0
Delay_0
decfsz count1 ,f
goto
d1
retlw 0x00
delay_5s
call
SECOND_1
call
SECOND_1
call
SECOND_1
call
SECOND_1
call
SECOND_1
return
delay_2s
call
SECOND_1
call
SECOND_1
return
initports
bcf STATUS,RP0
clrf PORTB
clrf PORTC
clrf
PORTA
clrf
PORTD
clrf
PORTE
bsf
STATUS,RP0
bcf
OPTION_REG,7
MOVLW
0x06
;Change to Bank1
;CONFIGURED ALL
clrf
movlw
MOVWF
ADCON1
movlw b'11111111'
movwf TRISA
movlw b'00000000'
movwf TRISD
TRISB
;Set PORTB
movlw b'10000000'
movwf TRISC
b'00000111'
movwf TRISE
bcf
STATUS,RP0
return
;Change to Bank0
0xE6
NDELAY
ch 5V
BCF
PORTD, 5
BCF
PORTD, 6
truction Reg.
MOVLW
B'00111011'
MOVWF
CALL
CALL
CALL
CALL
CALL
CALL
PORTB
ENABLEPULSE
DELAY50
ENABLEPULSE
DELAY50
ENABLEPULSE
DELAY50
MOVLW
MOVWF
CALL
CALL
B'00001000'
PORTB
ENABLEPULSE
DELAY50
; Display OFF
MOVLW
MOVWF
CALL
MOVLW
B'00000001'
PORTB
ENABLEPULSE
0x09
; Clear Display
CALL
NDELAY
MOVLW
MOVWF
CALL
MOVLW
B'00000010'
PORTB
ENABLEPULSE
0x09
CALL
NDELAY
MOVLW
B'00001100'
MOVWF
CALL
CALL
PORTB
ENABLEPULSE
DELAY50
MOVLW
B'00000110'
nstruction completion
nstruction completion
instruction completion
; Cursor Home
; Call 1.8ms delay and wait for
instruction completion
ng OFF
nstruction completion
display shift
MOVWF
CALL
CALL
PORTB
ENABLEPULSE
DELAY50
nstruction completion
BSF
PORTD, 5
BCF
PORTD, 6
Reg.
RETURN
;----------------------------------------------------------------------------------------------------------------------; Enable Pulse for writing or reading instructions or data
;----------------------------------------------------------------------------------------------------------------------ENABLEPULSE
BCF
PORTD, 7
nable Pulse and 2us LOW.
NOP
NOP
BSF
PORTD, 7
NOP
NOP
NOP
BCF PORTD, 7
NOP
NOP
RETURN
;----------------------------------------------------------------------------------------------------------------------; N DELAY SUBROUTINE, delay in multiples of 200us up to 200us*255 = 51ms (or mor
e)
;----------------------------------------------------------------------------------------------------------------------NDELAY
NOTOVER
MOVWF N
CALL DELAY200
DECFSZ N, 1
GOTO NOTOVER
RETURN
; N is delay multiplier
; Call for 200us
; Decrease N by 1
; The delay isn't done
;----------------------------------------------------------------------------------------------------------------------; FIXED 200us DELAY (Possibly more due to execution time of the DECFSZ instructi
on.)
;----------------------------------------------------------------------------------------------------------------------DELAY200
NOTDONE200
MOVLW 0x42
; 66 LOOPS
MOVWF FIXDELAY
; 200us fixed delay
DECFSZ FIXDELAY, 1
; Decrement of FIXDELAY
GOTO NOTDONE200
; If 200us isn't up go back to N
OTDONE200
RETURN
turn to instruction.
; If 200us is up then re
;----------------------------------------------------------------------------------------------------------------------; FIXED 50us DELAY (Possibly more due to execution time of the DECFSZ instructio
n.)
;----------------------------------------------------------------------------------------------------------------------DELAY50
NOTDONE50
MOVLW 0x10
; 16 LOOPS
MOVWF FIXDELAY
; 50us fixed delay
DECFSZ FIXDELAY, 1
; Decrement of FIXDELAY
GOTO NOTDONE50
; If 50us isn't up go back to NO
TDONE50
RETURN
urn to instruction.
;----------------------------------------------------------------------------------------------------------------------; Visual delay subroutine.
;----------------------------------------------------------------------------------------------------------------------visualdelay movlw 0x05
movwf visdelay
seetemp
movlw 0x05
call NDELAY
decfsz visdelay, 1
goto seetemp
return
;FAST
movwf visdelay
seetemp2
movlw 0xAA
call NDELAY
decfsz visdelay, 1
goto seetemp2
return
ng characters to LCD.
CALL ENABLEPULSE
CALL CHKBUSY
RETURN
;----------------------------------------------------------------------------------------------------------------------; Subroutine to check for the BUSY flag. Mostly used for instructions that follo
ws up a character write.
;-----------------------------------------------------------------------------------------------------------------------
CHKBUSY
bcf
PORTD,5
bsf
PORTD,6
Reg.
banksel TRISB
movlw 0xFF
as Inputs.
movwf TRISB
banksel PORTD
bsf PORTD,7
or this part initially but I wasn't successful.
movf PORTB,w
tion of Peter Ouwehand's LCD Code.
bcf PORTD,7
lag of the LCD.
andlw 0x80
and for his code here. :)
btfss STATUS,Z
goto CHKBUSY
banksel TRISB
movlw 0x00
as Outputs.
movwf TRISB
banksel PORTD
bsf PORTD,5
bcf PORTD,6
C.
.
return
;----------------------------------------------------------------------------------------------------------------------; Position Cursor to the next line.
;----------------------------------------------------------------------------------------------------------------------nextline
banksel PORTD
bcf PORTD, 5
bcf PORTD, 6
movlw b'11000000'
0x40 RAM address on LCD.
call PUTCHAR
return
;----------------------------------------------------------------------------------------------------------------------; Clear screen and Cursor home.
;----------------------------------------------------------------------------------------------------------------------clrscreen
banksel PORTD
bcf PORTD, 5
bcf PORTD, 6
banksel PORTB
MOVLW B'00000001'
call PUTCHAR
; Clear Display
s Register.
return
;----------------------------------------------------------------------------------------------------------------------; Position Cursor to home position.
;----------------------------------------------------------------------------------------------------------------------cursorhome
banksel PORTD
bcf PORTD, 5
bcf PORTD, 6
movlw b'00000010'
on.
call PUTCHAR
return
;----------------------------------------------------------------------------------------------------------------------; Wait 20us for Acquisition time in order for holding capacitor to charge up.
;----------------------------------------------------------------------------------------------------------------------delay20
banksel FIXDELAY
movlw 0x08
movwf FIXDELAY
notdone20
decfsz FIXDELAY, 1
goto notdone20
return
decfsz dataL, f
goto settle
movf RCREG, w
er.
movf RCREG, w
movf RCREG, w
return
;----------------------------------------------------------------------------------------------------------------------; Initialize ADC Subroutine
;----------------------------------------------------------------------------------------------------------------------initadc
banksel TRISA
movlw b'00111111'
.
movwf TRISA
movlw b'00000111'
.
movwf TRISE
banksel ADCON1
; Select Bank for ADCON1.
movlw b'00000000'
; ADFM for Left Justified, Vref=Vss Vref+=AN3 Analog In=AN0, AN1 (R/C = 1/2).
movwf ADCON1
banksel ADCON0
movlw b'01000001'
version.
checkdone
banksel ADCON0
; Select Bank for ADCON0.
btfsc ADCON0, GO
; Check if the conversion is done?
goto checkdone
; If not, check again.
return
in programme.
----------------------------------------chan0
banksel ADCON0
bcf ADCON0, 5
bcf ADCON0, 4
bcf ADCON0, 3
return
;----------------------------------------------------------------------------------------------------------------------; Select Channel AN1 of A/D Converter.
;----------------------------------------------------------------------------------------------------------------------chan1
banksel ADCON0
bcf ADCON0, 5
bcf ADCON0, 4
bsf ADCON0, 3
return
;----------------------------------------------------------------------------------------------------------------------; Select Channel AN1 of A/D Converter.
;----------------------------------------------------------------------------------------------------------------------chan2
banksel ADCON0
bcf ADCON0, 5
bsf ADCON0, 4
bcf ADCON0, 3
return
;----------------------------------------------------------------------------------------------------------------------; Select Channel AN1 of A/D Converter.
;----------------------------------------------------------------------------------------------------------------------chan3
banksel ADCON0
bcf ADCON0, 5
bsf ADCON0, 4
bsf ADCON0, 3
return
;----------------------------------------------------------------------------------------------------------------------; Select Channel AN1 of A/D Converter.
;----------------------------------------------------------------------------------------------------------------------chan4
banksel ADCON0
bsf ADCON0, 5
bcf ADCON0, 4
bcf ADCON0, 3
return
;----------------------------------------------------------------------------------------------------------------------; Select Channel AN1 of A/D Converter.
;----------------------------------------------------------------------------------------------------------------------chan5
banksel ADCON0
bsf ADCON0, 5
bcf ADCON0, 4
bsf ADCON0, 3
return
subwf rmng_num, f
skpnc
goto get_dig
addwf rmng_num, f
decf quotient, f
movf rmng_num, w
movwf temp_num
movf quotient, w
movwf rmng_num
movf temp_num, w
h subtraction by 10.
top division.
return
get_dig2
movlw d'10'
subwf rmng_num2, f
skpnc
goto get_dig2
addwf rmng_num2, f
decf quotient2, f
movf rmng_num2, w
movwf temp_num2
h subtraction by 10.
top division.
movf quotient2, w
movwf rmng_num2
movf temp_num2, w
return
;----------------------------------------------------------------------------------------------------------------------;SENSOR2 Conversion Subroutine.
;----------------------------------------------------------------------------------------------------------------------briteconv2
call initadc
call chan0
call delay20
call delay20
call startadc
1.
acitor.
tion.
arrgbrite2;
0 00xx.
banksel ADRESH
movf ADRESH, w
movwf briteH2
movwf briteHtrans2
banksel ADRESL
movf ADRESL, w
banksel briteL2
movwf briteL2
movwf briteLtrans2
bcf STATUS, C
rlf briteL2, f
btfss STATUS, C
goto $+2
bsf briteL2, 0
bcf STATUS, C
rlf briteL2, f
btfss STATUS, C
goto $+2
bsf briteL2, 0
bcf STATUS, C
t of briteL.
rrf briteH2, f
btfss STATUS, C
goto $+2
bsf briteL2, 2
;chkbrite
0%.
movlw d'30'
;
;
;
;
subwf briteH, w
skpc
goto onbklit
goto offbklit
;onbklit
;offbklit
brkdigbrite2
banksel briteH2
movf briteH2, w
movwf rmng_num2
clrf quotient2
sult to individual digits to be displayed.
call get_dig2
movwf digitbritedata02
clrf quotient2
call get_dig2
movwf digitbritedata12
clrf quotient2
call get_dig2
movwf digitbritedata22
banksel briteL2
movf briteL2, w
movwf rmng_num2
clrf quotient2
ult to individual digits to be displayed.
call get_dig2
movwf digitbritedataL02
clrf quotient2
call get_dig2
movwf digitbritedataL12
clrf quotient2
call get_dig2
movwf digitbritedataL22
calcbrite2
banksel briteL2
movlw d'13'
multiplier and clear fractional brightness reading.
clrf britefract2
; Assign
mult132
addwf britefract2, f
to obtain fractional brightness reading.
decfsz briteL2, f
goto mult132
; Multiply ADRESL by 13
breakbrite2
movf briteH2, w
adings to ind. digits to be displayed.
movwf rmng_num2
; Break up brightness re
clrf quotient2
call get_dig2
movwf britenonfract02
clrf quotient2
call get_dig2
movwf britenonfract12
clrf quotient2
call get_dig2
movwf britenonfract22
movf britefract2 , w
movwf rmng_num2
clrf quotient2
call get_dig
movwf britefract02
clrf quotient2
call get_dig2
movwf britefract12
return
call chan1
call delay20
call delay20
call startadc
1.
acitor.
tion.
SENSOR1
arrgbrite
0 00xx.
banksel ADRESH
movf ADRESH, w
movwf briteH
movwf briteHtrans
banksel ADRESL
movf ADRESL, w
banksel briteL
movwf briteL
movwf briteLtrans
bcf STATUS, C
rlf briteL, f
btfss STATUS, C
goto $+2
bsf briteL, 0
bcf STATUS, C
rlf briteL, f
btfss STATUS, C
goto $+2
bsf briteL, 0
bcf STATUS, C
t of briteL.
rrf briteH, f
btfss STATUS, C
goto $+2
bsf briteL, 2
;chkbrite
0%.
movlw d'30'
;
;
;
;
subwf briteH, w
skpc
goto onbklit
goto offbklit
;onbklit
;offbklit
brkdigbrite
banksel briteH
movf briteH, w
movwf rmng_num
clrf quotient
sult to individual digits to be displayed.
call get_dig
movwf digitbritedata0
clrf quotient
call get_dig
movwf digitbritedata1
clrf quotient
call get_dig
movwf digitbritedata2
banksel briteL
movf briteL, w
movwf rmng_num
clrf quotient
ult to individual digits to be displayed.
call get_dig
movwf digitbritedataL0
clrf quotient
call get_dig
movwf digitbritedataL1
clrf quotient
call get_dig
movwf digitbritedataL2
calcbrite
banksel briteL
movlw d'13'
multiplier and clear fractional brightness reading.
clrf britefract
mult13
addwf britefract, f
to obtain fractional brightness reading.
; Assign
; Multiply ADRESL by 13
decfsz briteL, f
goto mult13
breakbrite
movf briteH, w
adings to ind. digits to be displayed.
movwf rmng_num
; Break up brightness re
clrf quotient
call get_dig
movwf britenonfract0
clrf quotient
call get_dig
movwf britenonfract1
clrf quotient
call get_dig
movwf britenonfract2
movf britefract , w
movwf rmng_num
clrf quotient
call get_dig
movwf britefract0
clrf quotient
call get_dig
movwf britefract1
return
displaydata
movlw d'48'
t individual digits to ASCII.
addwf
addwf
addwf
addwf
addwf
addwf
; Conver
digitbritedata22, f
digitbritedata12, f
digitbritedata02, f
digitbritedataL22, f
digitbritedataL12, f
digitbritedataL02, f
addwf
addwf
addwf
addwf
addwf
britenonfract22, f
britenonfract12, f
britenonfract02, f
britefract12, f
britefract02, f
addwf
addwf
addwf
addwf
addwf
addwf
digitbritedata2, f
digitbritedata1, f
digitbritedata0, f
digitbritedataL2, f
digitbritedataL1, f
digitbritedataL0, f
addwf
addwf
addwf
addwf
addwf
britenonfract2, f
britenonfract1, f
britenonfract0, f
britefract1, f
britefract0, f
return
;--------------------Display to LCD---------------------------------------------------DisStanby
call clrscreen
call cursorhome
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'P'
call PUTCHAR
movlw A'r'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A's'
call PUTCHAR
movlw A's'
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'Y'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'u'
call PUTCHAR
movlw A'r'
call PUTCHAR
movlw A' '
call PUTCHAR
call nextline
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'B'
call PUTCHAR
movlw A'u'
call PUTCHAR
movlw A't'
call PUTCHAR
movlw A't'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'n'
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
call visualdelay
return
DisFinish
call clrscreen
call nextline
movlw A'S'
call PUTCHAR
movlw A't'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'p'
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
call visualdelay
return
DisLCD
call clrscreen
call cursorhome
sor to home.
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'R'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A'a'
call PUTCHAR
movlw A'd'
call PUTCHAR
movlw A'y'
call PUTCHAR
movlw A'.'
call PUTCHAR
movlw A'.'
call PUTCHAR
call visualdelay
; Reposition cur
return
DisOne
call clrscreen
call cursorhome
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'R'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A'a'
call PUTCHAR
movlw A'd'
call PUTCHAR
movlw A'y'
call PUTCHAR
movlw A'.'
call PUTCHAR
movlw A'.'
call PUTCHAR
call nextline
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'1'
call PUTCHAR
call visualdelay
return
DisTwo
call clrscreen
call cursorhome
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'R'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A'a'
call PUTCHAR
movlw A'd'
call PUTCHAR
movlw A'y'
call PUTCHAR
movlw A'.'
call PUTCHAR
movlw A'.'
call PUTCHAR
call nextline
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'2'
call PUTCHAR
call visualdelay
return
DisTree
call clrscreen
call cursorhome
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'R'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A'a'
call PUTCHAR
movlw A'd'
call PUTCHAR
movlw A'y'
call PUTCHAR
movlw A'.'
call PUTCHAR
movlw A'.'
call PUTCHAR
call nextline
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'3'
call PUTCHAR
call visualdelay
return
DisFoward
call clrscreen
call cursorhome
sor to home.
movlw A'M'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'v'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A' '
call PUTCHAR
call nextline
movlw A'F'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'w'
call PUTCHAR
movlw A'a'
call PUTCHAR
movlw A'r'
call PUTCHAR
movlw A'd'
call PUTCHAR
movlw A' '
call PUTCHAR
call visualdelay
return
DisRvs
call clrscreen
call cursorhome
movlw A'M'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'v'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A' '
call PUTCHAR
call nextline
movlw A'R'
call PUTCHAR
movlw A'e'
call PUTCHAR
; Reposition cur
movlw A'v'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A'r'
call PUTCHAR
movlw A's'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A' '
call PUTCHAR
call visualdelay
return
DisLeft
call clrscreen
call cursorhome
movlw A'M'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'v'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A' '
call PUTCHAR
call nextline
movlw A'L'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A'f'
call PUTCHAR
movlw A't'
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
call visualdelay
return
DisRight
call clrscreen
call cursorhome
movlw A'M'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'v'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A' '
call PUTCHAR
call nextline
movlw A'R'
call PUTCHAR
movlw A'i'
call PUTCHAR
movlw A'g'
call PUTCHAR
movlw A'h'
call PUTCHAR
movlw A't'
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
call visualdelay
return
DisReverse
call clrscreen
call cursorhome
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'P'
call PUTCHAR
movlw A'r'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A's'
call PUTCHAR
movlw A's'
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'Y'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'u'
call PUTCHAR
movlw A'r'
call PUTCHAR
movlw A' '
call PUTCHAR
call nextline
movlw A' '
call PUTCHAR
movlw A'R'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A'v'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A'r'
call PUTCHAR
movlw A's'
call PUTCHAR
movlw A'e'
call PUTCHAR
movlw A' '
call PUTCHAR
movlw A'B'
call PUTCHAR
movlw A'u'
call PUTCHAR
movlw A't'
call PUTCHAR
movlw A't'
call PUTCHAR
movlw A'o'
call PUTCHAR
movlw A'n'
call PUTCHAR
call visualdelay
return
;----------------------------------------------------------------------------------------------------------------------; End of Programme.
;----------------------------------------------------------------------------------------------------------------------END