Anda di halaman 1dari 28

;

;-------------------------------------------------------------------------------;Set PIC = 16F877


;Set PIC Configuration
list
p=pic16f877a
include p16f877a.inc
__config
0x1E72
errorlevel
-302
;Suppress bank warning
;-------------------------------------------------------------------------------;Declare Variable
;-------------------------------------------------------------------------------CBlock 0x20
N
; Delay register
s.
N1
count1
counta
countb
countc
rxtime1
rxtime2
M0
RXD
MOTOR
POSITION
C_POSITION
N_POSITION
FIXDELAY
visdelay
priority
dataL
COUNTER1
COUNTER2
temp_dig
rmng_num
; Digit breaker register
s.
quotient
temp_num
rmng_num2
; Digit breaker register
s.
quotient2
temp_num2
S1A
S1B
S2A
S2B
briteL
; Brightness variable re
gisters.
briteH
britefract
Bigest
digitbritedata0
; Brightness data digit register
s.

digitbritedata1
digitbritedata2
digitbritedataL0
digitbritedataL1
digitbritedataL2
britenonfract0

; Actual Brightness digit regist

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

; Brightness data digit

registers.
digitbritedata12
digitbritedata22
digitbritedataL02
digitbritedataL12
digitbritedataL22
britenonfract02
britenonfract12
britenonfract22
britefract02
britefract12
tempSPEED
count90
briteHtrans2
briteLtrans2
M1
M2
TSPD1

; Brightness digit registers.

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

;Turn OFF All output at

startup
bcf PORTD,3
bcf PORTC,4

;Turn OFF All output at

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

;Check button foward


;Check button reverse
;Check button left
;Check button right

;Clear button routines----------------------------------------

Fwrd

Rvs

call DisFoward ;move foward


bsf PORTD,2
bcf PORTD,3

;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

;Check button reverse

;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

;-------------------------END OF MAIN PROGRAM---------------------------

;----------------------------------------------------------------------------------------------------------------------; Subroutine for Time&Delay


;-----------------------------------------------------------------------------------------------------------------------

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 250 ms (4 MHz clock)

Delay_0x

decfsz countc ,f
goto
d1x
retlw 0x00

DelayR movlw d'80'


movwf
d1R
movlw
movwf
movlw
movwf
Delay_0R
decfsz
goto
decfsz
goto

;delay 250 ms (4 MHz clock)


countc
0xC7
counta
0x01
countb
counta, f
$+2
countb, f
Delay_0R

decfsz countc ,f
goto
d1R
retlw 0x00

Delay_T24l
d124l

movlw
movwf
movlw
movwf
movlw
movwf

d'150'
countc
0xC7
counta
0x01
countb

;delay 250 ms (4 MHz clock)

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

;delay 250 ms (4 MHz clock)

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

;----------------------------------------------------------------------------------------------------------------------; Subroutine to initialize the PORTs as Inputs or Outputs.


;-----------------------------------------------------------------------------------------------------------------------

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

PIN AS DIGITAL I/O

clrf
movlw

MOVWF
ADCON1
movlw b'11111111'
movwf TRISA
movlw b'00000000'
movwf TRISD
TRISB
;Set PORTB
movlw b'10000000'
movwf TRISC
b'00000111'

;Set PORTA all OUT

movwf TRISE
bcf
STATUS,RP0
return

;Change to Bank0

;----------------------------------------------------------------------------------------------------------------------; Initialize the LCD.


;----------------------------------------------------------------------------------------------------------------------INITLCD
MOVLW
CALL

0xE6
NDELAY

; Call for 46ms delay


; Wait for VCC of the LCD to rea

ch 5V
BCF

PORTD, 5

; Clear RS to select Ins

BCF

PORTD, 6

; Clear R/W to write

truction Reg.
MOVLW

B'00111011'

; Function Set to 8 bits, 2 line

MOVWF
CALL
CALL
CALL
CALL
CALL
CALL

PORTB
ENABLEPULSE
DELAY50
ENABLEPULSE
DELAY50
ENABLEPULSE
DELAY50

; Call 50us delay and wait for i

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'

; Display ON, Cursor OFF, Blinki

MOVWF
CALL
CALL

PORTB
ENABLEPULSE
DELAY50

; Call 50us delay and wait for i

MOVLW

B'00000110'

; Entry Mode Set, Increment & No

s and 5x7 dot matrix

nstruction completion

; Call 50us delay and wait for i

nstruction completion

; Call 1.8ms delay and wait for

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

; Call 50us delay and wait for i

nstruction completion
BSF

PORTD, 5

; Set RS to select Data

BCF

PORTD, 6

; Clear R/W to write

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

; 2us LOW followed by 3us HIGH E

;----------------------------------------------------------------------------------------------------------------------; 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

; If 50us is up then ret

urn to instruction.
;----------------------------------------------------------------------------------------------------------------------; Visual delay subroutine.
;----------------------------------------------------------------------------------------------------------------------visualdelay movlw 0x05
movwf visdelay
seetemp

movlw 0x05
call NDELAY
decfsz visdelay, 1
goto seetemp
return

visualdelay1 movlw 0x12

;FAST
movwf visdelay

seetemp2

movlw 0xAA
call NDELAY
decfsz visdelay, 1
goto seetemp2
return

;----------------------------------------------------------------------------------------------------------------------; Fast Directive to write characters to LCD.


;----------------------------------------------------------------------------------------------------------------------PUTCHAR
MOVWF PORTB

; A quicker way of writi

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

; Clear RS to select Instruction

bsf

PORTD,6

; Set R/W to read.

Reg.
banksel TRISB
movlw 0xFF

; Select Bank for TRISC.


; Define all PORTC Pins

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

; Select Bank for PORTC.


; I tried to write my own code f
; Therefore, I implemented a por
; Will look more into the BUSY f
; Credits to Peter Ouweh

; Select Bank for TRISB.


; Define all PORTC Pins

as Outputs.
movwf TRISB
banksel PORTD

; Select Bank for PORTA, B, and

bsf PORTD,5

; Set RS to select Data Register

bcf PORTD,6

; Clear R/W to write.

C.
.
return
;----------------------------------------------------------------------------------------------------------------------; Position Cursor to the next line.
;----------------------------------------------------------------------------------------------------------------------nextline
banksel PORTD
bcf PORTD, 5
bcf PORTD, 6

; Select Instructions Register.


; Select Write.

movlw b'11000000'
0x40 RAM address on LCD.
call PUTCHAR

; Shift cursor to second line at

return
;----------------------------------------------------------------------------------------------------------------------; Clear screen and Cursor home.
;----------------------------------------------------------------------------------------------------------------------clrscreen

banksel PORTD
bcf PORTD, 5

; Clear RS to select Instruction

bcf PORTD, 6

; Clear R/W to select Write.

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

; Select Instructions Register.


; Select Write.

movlw b'00000010'

; Position cursor to home positi

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

; A loop to generate 20us delay.

decfsz FIXDELAY, 1
goto notdone20
return

;----------------------------------------------------------------------------------------------------------------------; Delay to provide some settling time for start up.


;----------------------------------------------------------------------------------------------------------------------delay
banksel dataL
clrf dataL
settle

decfsz dataL, f
goto settle
movf RCREG, w

; The delay loop.


; Flush the receive buff

er.
movf RCREG, w
movf RCREG, w
return
;----------------------------------------------------------------------------------------------------------------------; Initialize ADC Subroutine
;----------------------------------------------------------------------------------------------------------------------initadc
banksel TRISA
movlw b'00111111'

; Select Bank for TRISA.


; Initialize RA0 - RA5 as Inputs

.
movwf TRISA
movlw b'00000111'

; Initialize RA0 - RA5 as Inputs

.
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'

; Select Bank for ADCON0.


; Fosc/8, Channel 0, Enable the

ADC (Default Chan. 0)


movwf ADCON0
return
;----------------------------------------------------------------------------------------------------------------------; This routine starts the AD Conversion and waits for it to complete.
;----------------------------------------------------------------------------------------------------------------------startadc
banksel ADCON0
bsf ADCON0, GO

; Select Bank for ADCON0.


; Set the GO bit to begin AD Con

version.
checkdone

banksel ADCON0
; Select Bank for ADCON0.
btfsc ADCON0, GO
; Check if the conversion is done?
goto checkdone
; If not, check again.
return

; Else, return to the ma

in programme.

;----------------------------------------------------------------------------------------------------------------------; Select Channel AN0 of A/D Converter.


;-------------------------------------------------------------------------------

----------------------------------------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

;----------------------------------------------------------------------------------------------------------------------; Breaks down a number to its individual digits.


;----------------------------------------------------------------------------------------------------------------------get_dig
movlw d'10'

; To split the digits, d

ivide them by 10.


incf quotient, f

; Increment of quotient with eac

subwf rmng_num, f
skpnc

; Subtract the number by 10.


; If already negative, s

goto get_dig
addwf rmng_num, f
decf quotient, f

; Else, continue dividing.


; Restore number.
; Restore quotient.

movf rmng_num, w
movwf temp_num
movf quotient, w
movwf rmng_num
movf temp_num, w

; Move rmng_num to temp_num.

h subtraction by 10.
top division.

; Move quotient to rmng_num.

return
get_dig2
movlw d'10'

; To split the digits, d

ivide them by 10.


incf quotient2, f

; Increment of quotient with eac

subwf rmng_num2, f
skpnc

; Subtract the number by 10.


; If already negative, s

goto get_dig2
addwf rmng_num2, f
decf quotient2, f

; Else, continue dividing.


; Restore number.
; Restore quotient.

movf rmng_num2, w
movwf temp_num2

; Move rmng_num to temp_num.

h subtraction by 10.
top division.

movf quotient2, w
movwf rmng_num2
movf temp_num2, w

; Move quotient to rmng_num.

return
;----------------------------------------------------------------------------------------------------------------------;SENSOR2 Conversion Subroutine.
;----------------------------------------------------------------------------------------------------------------------briteconv2
call initadc

; Initialize and begin ADC on AN

call chan0
call delay20

; Delay to charge up holding cap

call delay20
call startadc

; Start ADC and await the comple

1.
acitor.
tion.

arrgbrite2;
0 00xx.

banksel ADRESH
movf ADRESH, w
movwf briteH2
movwf briteHtrans2

; Pass high byte to briteH.

banksel ADRESL
movf ADRESL, w
banksel briteL2
movwf briteL2
movwf briteLtrans2

; Pass low byte to briteL.

bcf STATUS, C

; Rearrange briteL from xx00 0000 to 000

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

; Pass LSbit of briteH to 2nd bi

t of briteL.
rrf briteH2, f
btfss STATUS, C
goto $+2
bsf briteL2, 2
;chkbrite
0%.

movlw d'30'

; Check if brightness is below 3

;
;
;
;

; If yes, activate backlit.


; Else, off backlit.

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

; Break ADC high byte re

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

; Break ADC low byte res

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

;----------------------------------------------------------------------------------------------------------------------;SENSOR1 Conversion Subroutine.


;----------------------------------------------------------------------------------------------------------------------briteconv
call initadc

; Initialize and begin ADC on AN

call chan1
call delay20

; Delay to charge up holding cap

call delay20
call startadc

; Start ADC and await the comple

1.
acitor.
tion.
SENSOR1

arrgbrite
0 00xx.

banksel ADRESH
movf ADRESH, w
movwf briteH
movwf briteHtrans

; Pass high byte to briteH.

banksel ADRESL
movf ADRESL, w
banksel briteL
movwf briteL
movwf briteLtrans

; Pass low byte to briteL.

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

; Rearrange briteL from xx00 0000 to 000

bcf STATUS, C

; Pass LSbit of briteH to 2nd bi

t of briteL.
rrf briteH, f
btfss STATUS, C
goto $+2
bsf briteL, 2
;chkbrite
0%.

movlw d'30'

; Check if brightness is below 3

;
;
;
;

; If yes, activate backlit.


; Else, off backlit.

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

; Break ADC high byte re

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

; Break ADC low byte res

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

Anda mungkin juga menyukai