Skip to content

Instantly share code, notes, and snippets.

@rfguri
Last active December 21, 2015 09:29
Show Gist options
  • Save rfguri/6285164 to your computer and use it in GitHub Desktop.
Save rfguri/6285164 to your computer and use it in GitHub Desktop.
PIC18F4321 Assembly Calculator
;********************************
;* Name: Calculator.asm *
;* Author: Roger Fernandez Guri *
;* Version: v1.0 *
;********************************
;********************************************
;* Required files: P18F4321.INC 18F4321.LKR *
;********************************************
LIST P=18F4321, F=INHX32
#include <P18F4321.INC>
;*************************
;* GLOBAL CONFIGURACIONS *
;*************************
CONFIG OSC = HS
CONFIG PBADEN = DIG
CONFIG WDT = OFF
;*************
;* VARIABLES *
;*************
FIRSTVALUEH EQU 0x00
FIRSTVALUEL EQU 0x01
SECONDVALUEH EQU 0x02
SECONDVALUEL EQU 0x03
SERIALVALUE EQU 0x04
CHECKVALUEH EQU 0x05
CHECKVALUEL EQU 0x06
ITOAL EQU 0x07
ITOAH EQU 0x08
ITOAU EQU 0x09
ITOAUH EQU 0x0A
OPVALUE EQU 0x0B
OPSTATE EQU 0x0C
ISEND EQU 0x0D
ISOP EQU 0x0E
ISVALID EQU 0x0F
DIVIDENTH EQU 0x10
DIVIDENTL EQU 0x11
DIVISORH EQU 0x12
DIVISORL EQU 0x13
REMINDERH EQU 0x14
REMINDERL EQU 0x15
QUOTIENTH EQU 0x16
QUOTIENTL EQU 0x17
DECIMALVALUEH EQU 0x18
DECIMALVALUEL EQU 0x19
FIRSTMULTIPLICATIONVALUEH EQU 0x1A
FIRSTMULTIPLICATIONVALUEL EQU 0x1B
SECONDMULTIPLICATIONRESULTVALUEH EQU 0x1C
SECONDMULTIPLICATIONRESULTVALUEL EQU 0x1D
MULTIPLICATIONVALUEH EQU 0x1E
MULTIPLICATIONVALUEL EQU 0x1F
MULTIPLICATIONRESULTVALUEH EQU 0x20
MULTIPLICATIONRESULTVALUEL EQU 0x21
RESULTVALUE EQU 0x26
RESULTU EQU 0x22
RESULTH EQU 0x23
RESULTL EQU 0x24
RESULTUH EQU 0x25
;******************************
; INTERRUPT AND RESET VECTORS *
;******************************
ORG 0x000000
GOTO MAIN
ORG 0x000008
GOTO HIGH_INT
ORG 0x000018
GOTO LOW_INT
;**********************
;* INTERRUPT HANDLERS *
;**********************
HIGH_INT
retfie
LOW_INT
retfie
;******************
;* CONFIGURATIONS *
;******************
PORTS
CLRF TRISB
CLRF PORTB
RETURN
INTERRUPTS
MOVLW 0x80
MOVWF RCON
MOVLW 0xC0
MOVWF INTCON
RETURN
TXRX
MOVLW 0x00
MOVWF SPBRGH
MOVLW 0x19
MOVWF SPBRG
MOVLW 0x00
MOVWF BAUDCON
MOVLW 0x24
MOVWF TXSTA
MOVLW 0x90
MOVWF RCSTA
RETURN
OPS
CLRF OPSTATE
SETF ISEND
RETURN
;*************
;* FUNCTIONS *
;*************
SEND
BCF TXSTA, TXEN, 0
MOVWF TXREG, 0
BSF TXSTA, TXEN, 0
WAIT
BTFSS TXSTA, TRMT
GOTO WAIT
RETURN
SENDNEWLINE
MOVLW 0x0A
CALL SEND
MOVLW 0x0D
CALL SEND
RETURN
SENDVALUE
MOVLW 0x3C
CALL SEND
MOVF FIRSTVALUEL, 0
ADDLW 0x30
CALL SEND
MOVLW 0x3E
CALL SEND
MOVLW 0x3C
CALL SEND
MOVF SECONDVALUEL, 0
ADDLW 0x30
CALL SEND
MOVLW 0x3E
CALL SEND
RETURN
SENDNEGATIVE
MOVLW 0x2D
CALL SEND
RETURN
SENDERROR
MOVLW 0x45
CALL SEND
MOVLW 0x52
CALL SEND
MOVLW 0x52
CALL SEND
MOVLW 0X4F
CALL SEND
MOVLW 0x52
CALL SEND
CALL SENDNEWLINE
RETURN
MEMCLEAN
CLRF FIRSTVALUEH
CLRF FIRSTVALUEL
CLRF SECONDVALUEH
CLRF SECONDVALUEL
CLRF OPVALUE
CLRF RESULTU
CLRF RESULTH
CLRF RESULTL
CLRF ITOAL
CLRF ITOAH
CLRF ITOAU
CLRF ITOAUH
RETURN
ENDOP
SETF ISOP
RETURN
CHECKOP
CLRF ISOP
GOTO CHECKADDITION
GOTO CHECKSUBSTRACTION
GOTO CHECKMULTIPLICATION
GOTO CHECKDIVISION
CHECKERROR
CALL SENDERROR
CLRF OPSTATE
RETURN
CHECKADDITION
MOVF SERIALVALUE, 0
SUBLW 0x2B ; +
BTFSC STATUS, Z, 0
GOTO ENDOP
CHECKSUBSTRACTION
MOVF SERIALVALUE, 0
SUBLW 0x2D ; -
BTFSC STATUS, Z, 0
GOTO ENDOP
CHECKMULTIPLICATION
MOVF SERIALVALUE, 0
SUBLW 0x2A ; *
BTFSC STATUS, Z, 0
GOTO ENDOP
MOVF SERIALVALUE, 0
SUBLW 0x78 ; x
BTFSC STATUS, Z, 0
GOTO ENDOP
MOVF SERIALVALUE, 0
SUBLW 0x58 ; x
BTFSC STATUS, Z, 0
GOTO ENDOP
CHECKDIVISION
MOVF SERIALVALUE, 0
SUBLW 0x2F ; /
BTFSC STATUS, Z, 0
GOTO ENDOP
RESULTCLEAN
CLRF RESULTH
CLRF RESULTL
RETURN
MULTIPLY10
CALL RESULTCLEAN
MOVLW 0x0A
MULWF MULTIPLICATIONVALUEL
MOVFF PRODL, RESULTL
MOVFF PRODH, RESULTH
MOVLW 0x0A
MULWF MULTIPLICATIONVALUEH
MOVF PRODL, 0
ADDWF RESULTH, 1
RETURN
MULTIPLY
MOVF FIRSTMULTIPLICATIONVALUEL, 0
MULWF SECONDMULTIPLICATIONRESULTVALUEL
MOVFF PRODH, RESULTH
MOVFF PRODL, RESULTL
MOVF FIRSTMULTIPLICATIONVALUEH, 0
MULWF SECONDMULTIPLICATIONRESULTVALUEH
MOVFF PRODH, RESULTUH
MOVFF PRODL, RESULTU
MOVF FIRSTMULTIPLICATIONVALUEL, 0
MULWF SECONDMULTIPLICATIONRESULTVALUEH
MOVF PRODL, 0
ADDWF RESULTH, 1
MOVF PRODH, 0
ADDWFC RESULTU, 1
CLRF WREG
ADDWFC RESULTUH, 1
MOVF FIRSTMULTIPLICATIONVALUEH, 0
MULWF SECONDMULTIPLICATIONRESULTVALUEL
MOVF PRODL, 0
ADDWF RESULTH, 1
MOVF PRODH, 0
ADDWFC RESULTU, 1
CLRF WREG
ADDWFC RESULTUH, 1
RETURN
DECREMENTRATIO
DECF QUOTIENTH, 1
BTFSS STATUS, C, 0
CLRF QUOTIENTH
GOTO REMAINDER
PREPAREDIVISIONVALUES
MOVFF QUOTIENTL, FIRSTMULTIPLICATIONVALUEL
MOVFF QUOTIENTH, FIRSTMULTIPLICATIONVALUEH
MOVFF DIVISORL, SECONDMULTIPLICATIONRESULTVALUEL
MOVFF DIVISORH, SECONDMULTIPLICATIONRESULTVALUEH
RETURN
REMAINDER
CALL PREPAREDIVISIONVALUES
CALL MULTIPLY
MOVF RESULTL, 0
SUBWF DIVIDENTL, 0
BTFSS STATUS, C, 0
INCF RESULTH, 1
MOVWF REMINDERL
MOVF RESULTH, 0
SUBWF DIVIDENTH, 0
BTFSS STATUS, C, 0
GOTO ENDDIVISION
MOVWF REMINDERH
RETURN
GETREMINDER
DECF QUOTIENTL, 1
BTFSS STATUS, C, 0
GOTO DECREMENTRATIO
GOTO REMAINDER
CHECKREMINDER
MOVF RESULTH, 0
CPFSEQ DIVIDENTH
GOTO GETREMINDER
MOVF RESULTL, 0
CPFSEQ DIVIDENTL
GOTO GETREMINDER
CLRF REMINDERH
CLRF REMINDERL
RETURN
CHECKLOWDIVIDEVALUE
MOVF RESULTL, 0
SUBWF DIVIDENTL, 0
BTFSC STATUS, Z, 0
GOTO CHECKREMINDER
MOVF RESULTL, 0
SUBWF DIVIDENTL, 0
BTFSS STATUS, C, 0
GOTO CHECKREMINDER
INCF QUOTIENTL, 1
BTFSC STATUS, C, 0
INCF QUOTIENTH, 1
GOTO DIVIDELOOP
DIVIDE
MOVLW 0x01
MOVWF QUOTIENTL
CLRF QUOTIENTH
GOTO DIVIDELOOP
DIVIDELOOP
CALL PREPAREDIVISIONVALUES
CALL MULTIPLY
MOVF RESULTH, 0
SUBWF DIVIDENTH, 0
BTFSC STATUS, Z, 0
GOTO CHECKLOWDIVIDEVALUE
MOVF RESULTH, 0
SUBWF DIVIDENTH, 0
BTFSS STATUS, C, 0
GOTO CHECKREMINDER
INCF QUOTIENTL, 1
BTFSC STATUS, C, 0
INCF QUOTIENTH, 1
GOTO DIVIDELOOP
ENDDIVISION
DECF REMINDERL, 1
CLRF REMINDERH
RETURN
CHECKVALUE
MOVF CHECKVALUEH, 0
SUBLW 0x27
BTFSS STATUS, C, 0
GOTO INVALID
MOVF CHECKVALUEH, 0
SUBLW 0x27
BTFSC STATUS, Z, 0
GOTO CHECKLOWVALUE
SETF ISVALID
RETURN
CHECKLOWVALUE
MOVF CHECKVALUEL, 0
SUBLW 0x0F
BTFSS STATUS, C, 0
GOTO INVALID
SETF ISVALID
RETURN
INVALID
CLRF ISVALID
RETURN
ATOI
MOVLW 0x30
RETURN
EIGHTBITINCREMENT
INCF RESULTVALUE, 1
GOTO EIGHTBITENDCHECK
EIGHTBITENDCHECK
MOVF RESULTVALUE, 0
ADDLW 0x30
CALL SEND
SUBSTRACT10M
MOVLW 0x80
SUBWF ITOAL, 1
BTFSS STATUS, C, 0
GOTO PREPARE20MVALUE
MOVLW 0x96
GOTO SUBSTRACT20M
SUBSTRACT20M
SUBWF ITOAH, 1
BTFSS STATUS, C, 0
GOTO PREPARE30MVALUE
MOVLW 0x98
GOTO SUBSTRACT30M
SUBSTRACT30M
SUBWF ITOAU, 1
BTFSS STATUS, C, 0
GOTO CHECK10M
GOTO ENDSUBSTRACTION10M
PREPARE20MVALUE
MOVLW 0x97
GOTO SUBSTRACT20M
PREPARE30MVALUE
MOVLW 0x99
GOTO SUBSTRACT30M
CHECK10M
MOVF ITOAUH, 0
BTFSS STATUS, Z, 0
GOTO CHECK40M
DECF ITOAU, 1
BTFSS STATUS, C, 0
GOTO CHECK30M
GOTO ENDSUBSTRACTION10M
CHECK30M
CLRF ITOAU
DECF ITOAL
CHECK40M
DECF ITOAUH, 1
BTFSC STATUS, C, 0
GOTO ENDSUBSTRACTION10M
CLRF ITOAUH
DECF ITOAL
GOTO ENDSUBSTRACTION10M
ENDSUBSTRACTION10M
DECF RESULTVALUE, 1
BTFSS STATUS, Z, 0
GOTO SUBSTRACT10M
GOTO CHECKSEVENTHBIT
SEVENBITINCREMENT
INCF RESULTVALUE, 1
GOTO SEVENBITENDCHECK
SEVENBITENDCHECK
MOVF RESULTVALUE, 0
ADDLW 0x30
CALL SEND
MOVF RESULTVALUE, 0
BTFSC STATUS, Z, 0
GOTO CHECKSIXTHBIT
GOTO SUBSTRACT1M
SUBSTRACT1M
MOVLW 0x40
SUBWF ITOAL, 1
BTFSS STATUS, C, 0
GOTO PREPARE2MVALUE
MOVLW 0x42
GOTO SUBSTRACT2M
SUBSTRACT2M
SUBWF ITOAH, 1
BTFSS STATUS, C, 0
GOTO PREPARE3MVALUE
MOVLW 0x0F
GOTO SUBSTRACT3M
SUBSTRACT3M
SUBWF ITOAU, 1
BTFSC STATUS, C, 0
GOTO ENDSUBSTRACTION1M
DECF ITOAU, 1
BTFSS STATUS, C, 0
GOTO CHECK3M
GOTO ENDSUBSTRACTION1M
PREPARE2MVALUE
MOVLW 0x43
GOTO SUBSTRACT2M
PREPARE3MVALUE
MOVLW 0x10
GOTO SUBSTRACT3M
CHECK3M
CLRF ITOAU
DECF ITOAL
ENDSUBSTRACTION1M
DECF RESULTVALUE, 1
BTFSS STATUS, Z, 0
GOTO SUBSTRACT1M
GOTO CHECKSIXTHBIT
FISISEINC
INCF RESULTVALUE, 1
GOTO SIXBITENDCHECK
SIXBITENDCHECK
MOVF RESULTVALUE, 0
ADDLW 0x30
CALL SEND
MOVF RESULTVALUE, 0
BTFSC STATUS, Z, 0
GOTO CHECKFIFTHBIT
GOTO SUBSTRACT100K
SUBSTRACT100K
MOVLW 0xA0
SUBWF ITOAL, 1
BTFSS STATUS, C, 0
GOTO PREPARE200KVALUE
MOVLW 0x86
GOTO SUBSTRACT200K
SUBSTRACT200K
SUBWF ITOAH, 1
BTFSS STATUS, C, 0
GOTO PREPARE300KVALUE
MOVLW 0x01
GOTO SUBSTRACT300K
SUBSTRACT300K
SUBWF ITOAU, 1
BTFSC STATUS, C, 0
GOTO ENDSUBSTRACTION100K
DECF ITOAU, 1
BTFSS STATUS, C, 0
GOTO CHECK300K
GOTO ENDSUBSTRACTION100K
PREPARE200KVALUE
MOVLW 0x87
GOTO SUBSTRACT200K
PREPARE300KVALUE
MOVLW 0x02
GOTO SUBSTRACT300K
CHECK300K
CLRF ITOAU
DECF ITOAL
ENDSUBSTRACTION100K
DECF RESULTVALUE, 1
BTFSS STATUS, Z, 0
GOTO SUBSTRACT100K
GOTO CHECKFIFTHBIT
FIVEBITINCREMENT
INCF RESULTVALUE, 1
GOTO ENDFIVEBITCHECK
ENDFIVEBITCHECK
MOVF RESULTVALUE, 0
ADDLW 0x30
CALL SEND
MOVF RESULTVALUE, 0
BTFSC STATUS, Z, 0
GOTO CHECKFOURTHBIT
GOTO SUBSTRACK10K
SUBSTRACK10K
MOVLW 0x10
SUBWF ITOAL, 1
BTFSS STATUS, C, 0
GOTO PREPARE20KVALUE
GOTO SUBSTRACK20K
SUBSTRACK20K
MOVLW 0x27
SUBWF ITOAH, 1
BTFSS STATUS, C, 0
GOTO CHECK10K
GOTO ENDSUBSTRACTION10K
PREPARE20KVALUE
MOVLW 0x28
GOTO SUBSTRACK20K
CHECK10K
MOVF ITOAU, 0
BTFSS STATUS, Z, 0
GOTO CHECK30K
DECF ITOAH, 1
BTFSS STATUS, C, 0
GOTO CHECK20K
GOTO ENDSUBSTRACTION10K
CHECK20K
CLRF ITOAH
DECF ITOAL
CHECK30K
DECF ITOAU, 1
BTFSC STATUS, C, 0
GOTO ENDSUBSTRACTION10K
CLRF ITOAU
DECF ITOAL
GOTO ENDSUBSTRACTION10K
ENDSUBSTRACTION10K
DECF RESULTVALUE, 1
BTFSS STATUS, Z, 0
GOTO SUBSTRACK10K
GOTO CHECKFOURTHBIT
SUBSTRACT1K
MOVLW 0xE8
SUBWF ITOAL, 1
BTFSS STATUS, C, 0
GOTO PREAPRE2KVALUE
MOVLW 0x03
GOTO SUBSTRACT2K
SUBSTRACT2K
SUBWF ITOAH, 1
BTFSS STATUS, C, 0
GOTO CHECK2K
GOTO ENDSUBSTRACTION1K
PREAPRE2KVALUE
MOVLW 0x04
GOTO SUBSTRACT2K
CHECK2K
CLRF ITOAH
DECF ITOAL
ENDSUBSTRACTION1K
DECF RESULTVALUE, 1
BTFSS STATUS, Z, 0
GOTO SUBSTRACT1K
GOTO CHECKTHIRDBIT
THREEBITINCREMENT
INCF RESULTVALUE, 1
GOTO THREEBITENDCHECK
THREEBITENDCHECK
MOVF RESULTVALUE, 0
ADDLW 0x30
CALL SEND
MOVF RESULTVALUE, 0
BTFSC STATUS, Z, 0
GOTO CHECKSECONDBIT
GOTO SUBSTRACT100
SUBSTRACT100
MOVLW 0x64
SUBWF ITOAL, 1
BTFSS STATUS, C, 0
GOTO CHECK100
GOTO ENDSUBSTRACTION100
CHECK100
DECF ITOAH
BTFSC STATUS, C, 0
GOTO ENDSUBSTRACTION100
CLRF ITOAH
DECF ITOAL
ENDSUBSTRACTION100
DECF RESULTVALUE, 1
BTFSS STATUS, Z, 0
GOTO SUBSTRACT100
GOTO CHECKSECONDBIT
SECONDBITINCREMENT
INCF RESULTVALUE, 1
GOTO SECONDBITENDCHECK
SECONDBITENDCHECK
MOVF RESULTVALUE, 0
ADDLW 0x30
CALL SEND
MOVF RESULTVALUE, 0
BTFSC STATUS, Z, 0
GOTO CHECKFIRSTBIT
GOTO SUBSTRACT10
SUBSTRACT10
MOVLW 0x0A
SUBWF ITOAL, 1
DECF RESULTVALUE, 1
BTFSS STATUS, Z, 0
GOTO SUBSTRACT10
GOTO CHECKFIRSTBIT
CHECKRESULTVALUE
MOVF ITOAUH, 0
BTFSS STATUS, Z, 0
GOTO CHECKEIGHTBITS
MOVF ITOAU, 0
SUBLW 0x98
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSSH
MOVF ITOAU,0
SUBLW 0x98
BTFSC STATUS, C, 0
GOTO CHECKSEVENBITS
GOTO CHECKEIGHTBITS
CHECKEIGHTBITSSH
MOVF ITOAH, 0
SUBLW 0x96
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSSL
MOVF ITOAH,0
SUBLW 0x96
BTFSC STATUS, C, 0
GOTO CHECKSEVENBITS
GOTO CHECKEIGHTBITS
CHECKEIGHTBITSSL
MOVF ITOAL, 0
SUBLW 0x80
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITS
MOVF ITOAL,0
SUBLW 0x80
BTFSC STATUS, C, 0
GOTO CHECKSEVENBITS
GOTO CHECKEIGHTBITS
CHECKSEVENBITSH
MOVF ITOAH, 0
SUBLW 0x42
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITSL
MOVF ITOAH,0
SUBLW 0x42
BTFSC STATUS, C, 0
GOTO CHECKSIXBITS
GOTO CHECKSEVENTHBIT
CHECKSEVENBITSL
MOVF ITOAL, 0
SUBLW 0x40
BTFSC STATUS, Z, 0
GOTO CHECKSEVENTHBIT
MOVF ITOAL,0
SUBLW 0x40
BTFSC STATUS, C, 0
GOTO CHECKSIXBITS
GOTO CHECKSEVENTHBIT
CHECKSIXBITSH
MOVF ITOAH, 0
SUBLW 0x86
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITSL
MOVF ITOAH,0
SUBLW 0x86
BTFSC STATUS, C, 0
GOTO CHECKFIVEBITS
GOTO CHECKSIXTHBIT
CHECKSIXBITSL
MOVF ITOAL, 0
SUBLW 0xA0
BTFSC STATUS, Z, 0
GOTO CHECKSIXTHBIT
MOVF ITOAL,0
SUBLW 0xA0
BTFSC STATUS, C, 0
GOTO CHECKFIVEBITS
GOTO CHECKSIXTHBIT
CHECKFIVEBITSH
MOVF ITOAH, 0
SUBLW 0x27
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITSL
MOVF ITOAH,0
SUBLW 0x27
BTFSC STATUS, C, 0
GOTO CHECKFOURBITS
GOTO CHECKFIFTHBIT
CHECKFIVEBITSL
MOVF ITOAL, 0
SUBLW 0x10
BTFSC STATUS, Z, 0
GOTO CHECKFIFTHBIT
MOVF ITOAL,0
SUBLW 0x10
BTFSC STATUS, C, 0
GOTO CHECKFOURBITS
GOTO CHECKFIFTHBIT
CHECKFOURBITSH
MOVF ITOAH, 0
SUBLW 0x03
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITSL
MOVF ITOAH,0
SUBLW 0x03
BTFSC STATUS, C, 0
GOTO CHECKTHREEBITS
GOTO CHECKFOURTHBIT
CHECKFOURBITSL
MOVF ITOAL, 0
SUBLW 0xE8
BTFSC STATUS, Z, 0
GOTO CHECKFOURTHBIT
MOVF ITOAL,0
SUBLW 0xE8
BTFSC STATUS, C, 0
GOTO CHECKTHREEBITS
GOTO CHECKFOURTHBIT
CHECKTHREEBITSH
MOVF ITOAH, 0
SUBLW 0x00
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITSL
MOVF ITOAH,0
SUBLW 0x00
BTFSC STATUS, C, 0
GOTO CHECKTWOBITS
GOTO CHECKTHIRDBIT
CHECKTHREEBITSL
MOVF ITOAL, 0
SUBLW 0x64
BTFSC STATUS, Z, 0
GOTO CHECKTHIRDBIT
MOVF ITOAL,0
SUBLW 0x64
BTFSC STATUS, C, 0
GOTO CHECKTWOBITS
GOTO CHECKTHIRDBIT
CHECKEIGHTBITS
;Comparem amb els diferents valors
CLRF RESULTVALUE
GOTO CHECKEIGHTBITSONEUH
CHECKSEVENBITS
MOVF ITOAU, 0
SUBLW 0x0F
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITSH
MOVF ITOAU,0
SUBLW 0x0F
BTFSC STATUS, C, 0
GOTO CHECKSIXBITS
GOTO CHECKSEVENTHBIT
CHECKSIXBITS
MOVF ITOAU, 0
SUBLW 0x01
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITSH
MOVF ITOAU,0
SUBLW 0x01
BTFSC STATUS, C, 0
GOTO CHECKFIVEBITS
GOTO CHECKSIXTHBIT
CHECKFIVEBITS
MOVF ITOAU, 0
SUBLW 0x00
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITSH
MOVF ITOAU,0
SUBLW 0x00
BTFSC STATUS, C, 0
GOTO CHECKFOURBITS
GOTO CHECKFIFTHBIT
CHECKFOURBITS
MOVF ITOAU, 0
SUBLW 0x00
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITSH
MOVF ITOAU,0
SUBLW 0x00
BTFSC STATUS, C, 0
GOTO CHECKTHREEBITS
GOTO CHECKFOURTHBIT
CHECKTHREEBITS
MOVF ITOAU, 0
SUBLW 0x00
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITSH
MOVF ITOAU,0
SUBLW 0x00
BTFSC STATUS, C, 0
GOTO CHECKTWOBITS
GOTO CHECKTHIRDBIT
CHECKTWOBITS
MOVF ITOAL, 0
SUBLW 0x0A
BTFSS STATUS, C, 0
GOTO CHECKSECONDBIT
MOVF ITOAL, 0
SUBLW 0x0A
BTFSC STATUS, Z, 0
GOTO CHECKSECONDBIT
GOTO CHECKFIRSTBIT
CHECKEIGHTBITSONEUH
MOVF ITOAUH, 0
SUBLW 0x00
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSONEU
MOVF ITOAUH, 0
SUBLW 0x00
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSTWOUH
CHECKEIGHTBITSONEU
MOVF ITOAU, 0
SUBLW 0x98
BTFSC STATUS, Z, 0
GOTO EIGHTBITINCREMENT
MOVF ITOAU, 0
SUBLW 0x98
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSTWOUH
CHECKEIGHTBITSTWOUH
INCF RESULTVALUE, 1
MOVF ITOAUH, 0
SUBLW 0x01
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSTWOU
MOVF ITOAUH, 0
SUBLW 0x01
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSTHREEUH
CHECKEIGHTBITSTWOU
MOVF ITOAU, 0
SUBLW 0x31
BTFSC STATUS, Z, 0
GOTO EIGHTBITINCREMENT
MOVF ITOAU, 0
SUBLW 0x31
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSTHREEUH
CHECKEIGHTBITSTHREEUH
INCF RESULTVALUE, 1
MOVF ITOAUH, 0
SUBLW 0x01
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSTHREEU
MOVF ITOAUH, 0
SUBLW 0x01
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSFOURUH
CHECKEIGHTBITSTHREEU
MOVF ITOAU, 0
SUBLW 0xC9
BTFSC STATUS, Z, 0
GOTO EIGHTBITINCREMENT
MOVF ITOAU, 0
SUBLW 0xC9
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSFOURUH
CHECKEIGHTBITSFOURUH
INCF RESULTVALUE, 1
MOVF ITOAUH, 0
SUBLW 0x02
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSFOURU
MOVF ITOAUH, 0
SUBLW 0x02
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSFIVEUH
CHECKEIGHTBITSFOURU
MOVF ITOAU, 0
SUBLW 0x62
BTFSC STATUS, Z, 0
GOTO EIGHTBITINCREMENT
MOVF ITOAU, 0
SUBLW 0x62
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSFIVEUH
CHECKEIGHTBITSFIVEUH
INCF RESULTVALUE, 1
MOVF ITOAUH, 0
SUBLW 0x02
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSFIVEU
MOVF ITOAUH, 0
SUBLW 0x02
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSSIXUH
CHECKEIGHTBITSFIVEU
MOVF ITOAU, 0
SUBLW 0xFA
BTFSC STATUS, Z, 0
GOTO EIGHTBITINCREMENT
MOVF ITOAU, 0
SUBLW 0xFA
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSSIXUH
CHECKEIGHTBITSSIXUH
INCF RESULTVALUE, 1
MOVF ITOAUH, 0
SUBLW 0x03
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSSIXU
MOVF ITOAUH, 0
SUBLW 0x03
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSSEVENUH
CHECKEIGHTBITSSIXU
MOVF ITOAU, 0
SUBLW 0x93
BTFSC STATUS, Z, 0
GOTO EIGHTBITINCREMENT
MOVF ITOAU, 0
SUBLW 0x93
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSSEVENUH
CHECKEIGHTBITSSEVENUH
INCF RESULTVALUE, 1
MOVF ITOAUH, 0
SUBLW 0x04
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSSEVENU
MOVF ITOAUH, 0
SUBLW 0x04
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSEIGHTUH
CHECKEIGHTBITSSEVENU
MOVF ITOAU, 0
SUBLW 0x2C
BTFSC STATUS, Z, 0
GOTO EIGHTBITINCREMENT
MOVF ITOAU, 0
SUBLW 0x2C
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSEIGHTUH
CHECKEIGHTBITSEIGHTUH
INCF RESULTVALUE, 1
MOVF ITOAUH, 0
SUBLW 0x04
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSEIGHTU
MOVF ITOAUH, 0
SUBLW 0x04
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSNINEUH
CHECKEIGHTBITSEIGHTU
MOVF ITOAU, 0
SUBLW 0xC4
BTFSC STATUS, Z, 0
GOTO EIGHTBITINCREMENT
MOVF ITOAU, 0
SUBLW 0xC4
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO CHECKEIGHTBITSNINEUH
CHECKEIGHTBITSNINEUH
INCF RESULTVALUE, 1
MOVF ITOAUH, 0
SUBLW 0x05
BTFSC STATUS, Z, 0
GOTO CHECKEIGHTBITSNINEU
MOVF ITOAUH, 0
SUBLW 0x05
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO EIGHTBITINCREMENT
CHECKEIGHTBITSNINEU
MOVF ITOAU, 0
SUBLW 0x5D
BTFSC STATUS, Z, 0
GOTO EIGHTBITINCREMENT
MOVF ITOAU, 0
SUBLW 0x5D
BTFSC STATUS, C, 0
GOTO EIGHTBITENDCHECK
GOTO EIGHTBITINCREMENT
CHECKSEVENTHBIT
CLRF RESULTVALUE
GOTO CHECKSEVENBITONEU
CHECKSEVENBITONEU
MOVF ITOAU, 0
SUBLW 0x0F
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITONEH
MOVF ITOAU, 0
SUBLW 0x0F
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
INCF RESULTVALUE, 1
GOTO CHECKSEVENBITTWOU
CHECKSEVENBITONEH
MOVF ITOAU, 0
SUBLW 0x42
BTFSC STATUS, Z, 0
GOTO SEVENBITINCREMENT
MOVF ITOAU, 0
SUBLW 0x42
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
INCF RESULTVALUE, 1
GOTO CHECKSEVENBITTWOU
CHECKSEVENBITTWOU
MOVF ITOAU, 0
SUBLW 0x1E
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITTWOH
MOVF ITOAU, 0
SUBLW 0x1E
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITTHREEU
CHECKSEVENBITTWOH
MOVF ITOAH, 0
SUBLW 0x84
BTFSC STATUS, Z, 0
GOTO SEVENBITINCREMENT
MOVF ITOAH, 0
SUBLW 0x84
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITTHREEU
CHECKSEVENBITTHREEU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x2D
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITTHREEH
MOVF ITOAU, 0
SUBLW 0x2D
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITFOURU
CHECKSEVENBITTHREEH
MOVF ITOAH, 0
SUBLW 0xC6
BTFSC STATUS, Z, 0
GOTO SEVENBITINCREMENT
MOVF ITOAH, 0
SUBLW 0xC6
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITFOURU
CHECKSEVENBITFOURU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x3D
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITFOURH
MOVF ITOAU, 0
SUBLW 0x3D
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITFIVEU
CHECKSEVENBITFOURH
MOVF ITOAH, 0
SUBLW 0x09
BTFSC STATUS, Z, 0
GOTO SEVENBITINCREMENT
MOVF ITOAH, 0
SUBLW 0x09
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITFIVEU
CHECKSEVENBITFIVEU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x4C
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITFIVEH
MOVF ITOAU, 0
SUBLW 0x4C
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITSIXU
CHECKSEVENBITFIVEH
MOVF ITOAH, 0
SUBLW 0x4B
BTFSC STATUS, Z, 0
GOTO SEVENBITINCREMENT
MOVF ITOAH, 0
SUBLW 0x4B
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITSIXU
CHECKSEVENBITSIXU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x5B
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITSIXH
MOVF ITOAU, 0
SUBLW 0x5B
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITSEVENU
CHECKSEVENBITSIXH
MOVF ITOAH, 0
SUBLW 0x8D
BTFSC STATUS, Z, 0
GOTO SEVENBITINCREMENT
MOVF ITOAH, 0
SUBLW 0x8D
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITSEVENU
CHECKSEVENBITSEVENU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x6A
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITSEVENH
MOVF ITOAU, 0
SUBLW 0x6A
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITEIGHTU
CHECKSEVENBITSEVENH
MOVF ITOAH, 0
SUBLW 0xCF
BTFSC STATUS, Z, 0
GOTO SEVENBITINCREMENT
MOVF ITOAH, 0
SUBLW 0xCF
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITEIGHTU
CHECKSEVENBITEIGHTU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x7A
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITEIGHTH
MOVF ITOAU, 0
SUBLW 0x7A
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITNINEU
CHECKSEVENBITEIGHTH
MOVF ITOAH, 0
SUBLW 0x12
BTFSC STATUS, Z, 0
GOTO SEVENBITINCREMENT
MOVF ITOAH, 0
SUBLW 0x12
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO CHECKSEVENBITNINEU
CHECKSEVENBITNINEU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x89
BTFSC STATUS, Z, 0
GOTO CHECKSEVENBITNINEH
MOVF ITOAU, 0
SUBLW 0x89
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO SEVENBITINCREMENT
CHECKSEVENBITNINEH
MOVF ITOAH, 0
SUBLW 0x54
BTFSC STATUS, Z, 0
GOTO SEVENBITINCREMENT
MOVF ITOAH, 0
SUBLW 0x54
BTFSC STATUS, C, 0
GOTO SEVENBITENDCHECK
GOTO SEVENBITINCREMENT
CHECKSIXTHBIT
CLRF RESULTVALUE
GOTO CHECKSIXBITONEU
CHECKSIXBITONEU
MOVF ITOAU, 0
SUBLW 0x01
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITONEH
MOVF ITOAU, 0
SUBLW 0x01
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITTWOU
CHECKSIXBITONEH
MOVF ITOAH, 0
SUBLW 0x86
BTFSC STATUS, Z, 0
GOTO FISISEINC
MOVF ITOAH, 0
SUBLW 0x86
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITTWOU
CHECKSIXBITTWOU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x03
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITTWOH
MOVF ITOAU, 0
SUBLW 0x03
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITTHREEU
CHECKSIXBITTWOH
MOVF ITOAH, 0
SUBLW 0x0D
BTFSC STATUS, Z, 0
GOTO FISISEINC
MOVF ITOAH, 0
SUBLW 0x0D
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITTHREEU
CHECKSIXBITTHREEU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x04
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITTHREEH
MOVF ITOAU, 0
SUBLW 0x04
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITFOURU
CHECKSIXBITTHREEH
MOVF ITOAH, 0
SUBLW 0x93
BTFSC STATUS, Z, 0
GOTO FISISEINC
MOVF ITOAH, 0
SUBLW 0x93
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITFOURU
CHECKSIXBITFOURU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x06
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITFOURH
MOVF ITOAU, 0
SUBLW 0x06
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITFIVEU
CHECKSIXBITFOURH
MOVF ITOAH, 0
SUBLW 0x1A
BTFSC STATUS, Z, 0
GOTO FISISEINC
MOVF ITOAH, 0
SUBLW 0x1A
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITFIVEU
CHECKSIXBITFIVEU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x07
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITFIVEH
MOVF ITOAU, 0
SUBLW 0x07
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITSIXU
CHECKSIXBITFIVEH
MOVF ITOAH, 0
SUBLW 0xA1
BTFSC STATUS, Z, 0
GOTO FISISEINC
MOVF ITOAH, 0
SUBLW 0xA1
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITSIXU
CHECKSIXBITSIXU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x09
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITSIXH
MOVF ITOAU, 0
SUBLW 0x09
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITSEVENU
CHECKSIXBITSIXH
MOVF ITOAH, 0
SUBLW 0x21
BTFSC STATUS, Z, 0
GOTO FISISEINC
MOVF ITOAH, 0
SUBLW 0x21
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITSEVENU
CHECKSIXBITSEVENU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x0A
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITSEVENH
MOVF ITOAU, 0
SUBLW 0x0A
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITEIGHTU
CHECKSIXBITSEVENH
MOVF ITOAH, 0
SUBLW 0xAE
BTFSC STATUS, Z, 0
GOTO FISISEINC
MOVF ITOAH, 0
SUBLW 0xAE
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITEIGHTU
CHECKSIXBITEIGHTU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x0C
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITEIGHTH
MOVF ITOAU, 0
SUBLW 0x0C
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITNINEU
CHECKSIXBITEIGHTH
MOVF ITOAH, 0
SUBLW 0x35
BTFSC STATUS, Z, 0
GOTO FISISEINC
MOVF ITOAH, 0
SUBLW 0x35
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO CHECKSIXBITNINEU
CHECKSIXBITNINEU
INCF RESULTVALUE, 1
MOVF ITOAU, 0
SUBLW 0x0D
BTFSC STATUS, Z, 0
GOTO CHECKSIXBITNINEH
MOVF ITOAU, 0
SUBLW 0x0D
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO FISISEINC
CHECKSIXBITNINEH
MOVF ITOAH, 0
SUBLW 0xBB
BTFSC STATUS, Z, 0
GOTO FISISEINC
MOVF ITOAH, 0
SUBLW 0xBB
BTFSC STATUS, C, 0
GOTO SIXBITENDCHECK
GOTO FISISEINC
CHECKFIFTHBIT
MOVF ITOAU, 0
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITONEH
MOVLW 0x06
MOVWF RESULTVALUE
GOTO CHECKFIVEBITSEVENU
CHECKFIVEBITONEH
CLRF RESULTVALUE
MOVF ITOAH, 0
SUBLW 0x27
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITONEL
MOVF ITOAH, 0
SUBLW 0x27
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITTWOH
CHECKFIVEBITONEL
MOVF ITOAL, 0
SUBLW 0x10
BTFSC STATUS, Z, 0
GOTO FIVEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x10
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITTWOH
CHECKFIVEBITTWOH
INCF RESULTVALUE
MOVF ITOAH, 0
SUBLW 0x4E
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITTWOL
MOVF ITOAH, 0
SUBLW 0x4E
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITTHREEH
CHECKFIVEBITTWOL
MOVF ITOAL, 0
SUBLW 0x20
BTFSC STATUS, Z, 0
GOTO FIVEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x20
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITTHREEH
CHECKFIVEBITTHREEH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x75
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITTHREEL
MOVF ITOAH, 0
SUBLW 0x75
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITFOURH
CHECKFIVEBITTHREEL
MOVF ITOAL, 0
SUBLW 0x30
BTFSC STATUS, Z, 0
GOTO FIVEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x30
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITFOURH
CHECKFIVEBITFOURH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x9C
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITFOURL
MOVF ITOAH, 0
SUBLW 0x9C
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITFIVEH
CHECKFIVEBITFOURL
MOVF ITOAL, 0
SUBLW 0x40
BTFSC STATUS, Z, 0
GOTO FIVEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x40
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITFIVEH
CHECKFIVEBITFIVEH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0xC3
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITFIVEL
MOVF ITOAH, 0
SUBLW 0xC3
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITSIXH
CHECKFIVEBITFIVEL
MOVF ITOAL, 0
SUBLW 0x50
BTFSC STATUS, Z, 0
GOTO FIVEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x50
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITSIXH
CHECKFIVEBITSIXH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0xEA
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITSIXL
MOVF ITOAH, 0
SUBLW 0xEA
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITSEVEN
CHECKFIVEBITSIXL
MOVF ITOAL, 0
SUBLW 0x60
BTFSC STATUS, Z, 0
GOTO FIVEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x60
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITSEVEN
CHECKFIVEBITSEVEN
INCF RESULTVALUE, 1
GOTO CHECKFIVEBITSEVENU
CHECKFIVEBITSEVENU
MOVF ITOAU, 0
SUBLW 0x01
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITSEVENL
MOVF ITOAU, 0
SUBLW 0x01
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITEIGHTH
CHECKFIVEBITSEVENL
MOVF ITOAH, 0
SUBLW 0x11
BTFSC STATUS, Z, 0
GOTO FIVEBITINCREMENT
MOVF ITOAH, 0
SUBLW 0x11
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITEIGHTH
CHECKFIVEBITEIGHTH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x38
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITEIGHTL
MOVF ITOAH, 0
SUBLW 0x38
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITNINEH
CHECKFIVEBITEIGHTL
MOVF ITOAL, 0
SUBLW 0x80
BTFSC STATUS, Z, 0
GOTO FIVEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x80
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO CHECKFIVEBITNINEH
CHECKFIVEBITNINEH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x5F
BTFSC STATUS, Z, 0
GOTO CHECKFIVEBITNINEL
MOVF ITOAH, 0
SUBLW 0x5F
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO FIVEBITINCREMENT
CHECKFIVEBITNINEL
MOVF ITOAL, 0
SUBLW 0x90
BTFSC STATUS, Z, 0
GOTO FIVEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x90
BTFSC STATUS, C, 0
GOTO ENDFIVEBITCHECK
GOTO FIVEBITINCREMENT
CHECKFOURTHBIT
CLRF RESULTVALUE
GOTO CHECKFOURBITONEH
CHECKFOURBITONEH
MOVF ITOAH, 0
SUBLW 0x03
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITONEL
MOVF ITOAH, 0
SUBLW 0x03
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITTWOH
CHECKFOURBITONEL
MOVF ITOAL, 0
SUBLW 0xE8
BTFSC STATUS, Z, 0
GOTO FOURBITINCREMENT
MOVF ITOAL, 0
SUBLW 0xE8
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITTWOH
CHECKFOURBITTWOH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x07
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITTWOL
MOVF ITOAH, 0
SUBLW 0x07
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITTHREEH
CHECKFOURBITTWOL
MOVF ITOAL, 0
SUBLW 0xD0
BTFSC STATUS, Z, 0
GOTO FOURBITINCREMENT
MOVF ITOAL, 0
SUBLW 0xD0
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITTHREEH
CHECKFOURBITTHREEH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x0B
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITTHREEL
MOVF ITOAH, 0
SUBLW 0x0B
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITFOURH
CHECKFOURBITTHREEL
MOVF ITOAL, 0
SUBLW 0xB8
BTFSC STATUS, Z, 0
GOTO FOURBITINCREMENT
MOVF ITOAL, 0
SUBLW 0xB8
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITFOURH
CHECKFOURBITFOURH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x0F
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITFOURL
MOVF ITOAH, 0
SUBLW 0x0F
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITFIVEH
CHECKFOURBITFOURL
MOVF ITOAL, 0
SUBLW 0xA0
BTFSC STATUS, Z, 0
GOTO FOURBITINCREMENT
MOVF ITOAL, 0
SUBLW 0xA0
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITFIVEH
CHECKFOURBITFIVEH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x13
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITFIVEL
MOVF ITOAH, 0
SUBLW 0x13
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITSIXH
CHECKFOURBITFIVEL
MOVF ITOAL, 0
SUBLW 0x88
BTFSC STATUS, Z, 0
GOTO FOURBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x88
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITSIXH
CHECKFOURBITSIXH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x17
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITSIXL
MOVF ITOAH, 0
SUBLW 0x17
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITSEVENH
CHECKFOURBITSIXL
MOVF ITOAL, 0
SUBLW 0x70
BTFSC STATUS, Z, 0
GOTO FOURBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x70
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITSEVENH
CHECKFOURBITSEVENH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x1B
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITSEVENL
MOVF ITOAH, 0
SUBLW 0x1B
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITEIGHTH
CHECKFOURBITSEVENL
MOVF ITOAL, 0
SUBLW 0x58
BTFSC STATUS, Z, 0
GOTO FOURBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x58
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITEIGHTH
CHECKFOURBITEIGHTH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x1F
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITEIGHTL
MOVF ITOAH, 0
SUBLW 0x1F
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITNINEH
CHECKFOURBITEIGHTL
MOVF ITOAL, 0
SUBLW 0x40
BTFSC STATUS, Z, 0
GOTO FOURBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x40
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKFOURBITNINEH
CHECKFOURBITNINEH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x23
BTFSC STATUS, Z, 0
GOTO CHECKFOURBITNINEL
MOVF ITOAH, 0
SUBLW 0x23
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO FOURBITINCREMENT
CHECKFOURBITNINEL
MOVF ITOAL, 0
SUBLW 0x28
BTFSC STATUS, Z, 0
GOTO FOURBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x28
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO FOURBITINCREMENT
FOURBITINCREMENT
INCF RESULTVALUE, 1
GOTO FOURBITENDCHECK
FOURBITENDCHECK
MOVF RESULTVALUE, 0
ADDLW 0x30
CALL SEND
MOVF RESULTVALUE, 0
BTFSC STATUS, Z, 0
GOTO CHECKTHIRDBIT
GOTO SUBSTRACT1K
CHECKTHIRDBIT
CLRF RESULTVALUE
GOTO CHECKTHREEBITONEH
CHECKTHREEBITONEH
MOVF ITOAH, 0
SUBLW 0x00
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITONEL
MOVF ITOAH, 0
SUBLW 0x00
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITTWOH
CHECKTHREEBITONEL
MOVF ITOAL, 0
SUBLW 0x64
BTFSC STATUS, Z, 0
GOTO THREEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x64
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITTWOH
CHECKTHREEBITTWOH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x00
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITTWOL
MOVF ITOAH, 0
SUBLW 0x00
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO CHECKTHREEBITTHREEH
CHECKTHREEBITTWOL
MOVF ITOAL, 0
SUBLW 0xC8
BTFSC STATUS, Z, 0
GOTO THREEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0xC8
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITTHREEH
CHECKTHREEBITTHREEH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x01
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITTHREEL
MOVF ITOAH, 0
SUBLW 0x01
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITFOURH
CHECKTHREEBITTHREEL
MOVF ITOAL, 0
SUBLW 0x2C
BTFSC STATUS, Z, 0
GOTO THREEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x2C
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITFOURH
CHECKTHREEBITFOURH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x01
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITFOURL
MOVF ITOAH, 0
SUBLW 0x01
BTFSC STATUS, C, 0
GOTO FOURBITENDCHECK
GOTO CHECKTHREEBITFIVEH
CHECKTHREEBITFOURL
MOVF ITOAL, 0
SUBLW 0x90
BTFSC STATUS, Z, 0
GOTO THREEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x90
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITFIVEH
CHECKTHREEBITFIVEH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x01
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITFIVEL
MOVF ITOAH, 0
SUBLW 0x01
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITSIXH
CHECKTHREEBITFIVEL
MOVF ITOAL, 0
SUBLW 0xF4
BTFSC STATUS, Z, 0
GOTO THREEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0xF4
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITSIXH
CHECKTHREEBITSIXH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x02
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITSIXL
MOVF ITOAH, 0
SUBLW 0x02
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITSEVENH
CHECKTHREEBITSIXL
MOVF ITOAL, 0
SUBLW 0x58
BTFSC STATUS, Z, 0
GOTO THREEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x58
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITSEVENH
CHECKTHREEBITSEVENH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x02
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITSEVENL
MOVF ITOAH, 0
SUBLW 0x02
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITEIGHTH
CHECKTHREEBITSEVENL
MOVF ITOAL, 0
SUBLW 0xBC
BTFSC STATUS, Z, 0
GOTO THREEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0xBC
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITEIGHTH
CHECKTHREEBITEIGHTH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x03
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITEIGHTL
MOVF ITOAH, 0
SUBLW 0x03
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITNINEH
CHECKTHREEBITEIGHTL
MOVF ITOAL, 0
SUBLW 0x20
BTFSC STATUS, Z, 0
GOTO THREEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x20
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO CHECKTHREEBITNINEH
CHECKTHREEBITNINEH
INCF RESULTVALUE, 1
MOVF ITOAH, 0
SUBLW 0x03
BTFSC STATUS, Z, 0
GOTO CHECKTHREEBITNINEL
MOVF ITOAH, 0
SUBLW 0x03
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO THREEBITINCREMENT
CHECKTHREEBITNINEL
MOVF ITOAL, 0
SUBLW 0x84
BTFSC STATUS, Z, 0
GOTO THREEBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x84
BTFSC STATUS, C, 0
GOTO THREEBITENDCHECK
GOTO THREEBITINCREMENT
CHECKSECONDBIT
CLRF RESULTVALUE
GOTO CHECKTWOBITONE
CHECKTWOBITONE
MOVF ITOAL, 0
SUBLW 0x0A
BTFSC STATUS, Z, 0
GOTO SECONDBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x0A
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO CHECKTWOBITTWO
CHECKTWOBITTWO
INCF RESULTVALUE, 1
MOVF ITOAL, 0
SUBLW 0x14
BTFSC STATUS, Z, 0
GOTO SECONDBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x14
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO CHECKTWOBITTHREE
CHECKTWOBITTHREE
INCF RESULTVALUE, 1
MOVF ITOAL, 0
SUBLW 0x1E
BTFSC STATUS, Z, 0
GOTO SECONDBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x1E
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO CHECKTWOBITFOUR
CHECKTWOBITFOUR
INCF RESULTVALUE, 1
MOVF ITOAL, 0
SUBLW 0x28
BTFSC STATUS, Z, 0
GOTO SECONDBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x28
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO CHECKTWOBITFIVE
CHECKTWOBITFIVE
INCF RESULTVALUE, 1
MOVF ITOAL, 0
SUBLW 0x32
BTFSC STATUS, Z, 0
GOTO SECONDBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x32
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO CHECKTWOBITSIX
CHECKTWOBITSIX
INCF RESULTVALUE, 1
MOVF ITOAL, 0
SUBLW 0x3C
BTFSC STATUS, Z, 0
GOTO SECONDBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x3C
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO CHECKTWOBITSEVEN
CHECKTWOBITSEVEN
INCF RESULTVALUE, 1
MOVF ITOAL, 0
SUBLW 0x46
BTFSC STATUS, Z, 0
GOTO SECONDBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x46
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO CHECKTWOBITEIGHT
CHECKTWOBITEIGHT
INCF RESULTVALUE, 1
MOVF ITOAL, 0
SUBLW 0x50
BTFSC STATUS, Z, 0
GOTO SECONDBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x50
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO CHECKTWOBITNINE
CHECKTWOBITNINE
INCF RESULTVALUE, 1
MOVF ITOAL, 0
SUBLW 0x5A
BTFSC STATUS, Z, 0
GOTO SECONDBITINCREMENT
MOVF ITOAL, 0
SUBLW 0x5A
BTFSC STATUS, C, 0
GOTO SECONDBITENDCHECK
GOTO SECONDBITINCREMENT
CHECKFIRSTBIT
MOVF ITOAL, 0
ADDLW 0x30
CALL SEND
RETURN
SERIAL
MOVFF RCREG, SERIALVALUE
MOVF SERIALVALUE, 0
CALL SEND
GOTO OPSTATE0
OPSTATE0
MOVF OPSTATE, 0
SUBLW 0x00
BTFSC STATUS, Z, 0
GOTO E0
GOTO OPSTATE1
OPSTATE1
MOVF OPSTATE, 0
SUBLW 0x01
BTFSC STATUS, Z, 0
GOTO E1
GOTO OPSTATE2
OPSTATE2
MOVF OPSTATE, 0
SUBLW 0x02
BTFSC STATUS, Z, 0
GOTO E2
GOTO OPSTATE3
OPSTATE3
MOVF OPSTATE, 0
SUBLW 0x03
BTFSC STATUS, Z, 0
GOTO E3
GOTO OPSTATE4
OPSTATE4
MOVF OPSTATE, 0
SUBLW 0x04
BTFSC STATUS, Z, 0
GOTO E4
GOTO OPSTATE5
OPSTATE5
MOVF OPSTATE, 0
SUBLW 0x05
BTFSC STATUS, Z, 0
GOTO E5
RETURN
E0
CALL MEMCLEAN
MOVLW 0x3A
CPFSLT SERIALVALUE
GOTO CHECKERROR
CALL ATOI
SUBWF SERIALVALUE, 0
BTFSC STATUS, N, 0
GOTO CHECKERROR
MOVWF FIRSTVALUEL
INCF OPSTATE, 1
RETURN
E1
CALL CHECKOP
MOVF ISOP, 0
BTFSS STATUS, Z, 0
GOTO OPERATIONVALUE
MOVLW 0x3A
CPFSLT SERIALVALUE
GOTO CHECKERROR
MOVFF FIRSTVALUEL, MULTIPLICATIONVALUEL
MOVFF FIRSTVALUEH, MULTIPLICATIONVALUEH
CALL MULTIPLY10
CALL ATOI
SUBWF SERIALVALUE, 0
BTFSC STATUS, N, 0
GOTO CHECKERROR
ADDWF RESULTL, 0
BTFSC STATUS, C, 0
INCF RESULTH, 1
MOVWF FIRSTVALUEL
MOVFF RESULTH, FIRSTVALUEH
MOVFF FIRSTVALUEH, CHECKVALUEH
MOVFF FIRSTVALUEL, CHECKVALUEL
CALL CHECKVALUE
MOVF ISVALID, 0
BTFSC STATUS, Z, 0
GOTO CHECKERROR
MOVLW 0x01
MOVWF OPSTATE
RETURN
E2
RETURN
E3
MOVLW 0x3A
CPFSLT SERIALVALUE
GOTO CHECKERROR
CALL ATOI
SUBWF SERIALVALUE, 0
BTFSC STATUS, N, 0
GOTO CHECKERROR
MOVWF SECONDVALUEL
MOVLW 0x04
MOVWF OPSTATE
RETURN
E4
MOVF SERIALVALUE, 0
SUBLW 0x3D
BTFSC STATUS, Z, 0
GOTO ENDOPERATION
MOVLW 0x3A
CPFSLT SERIALVALUE
GOTO CHECKERROR
MOVFF SECONDVALUEL, MULTIPLICATIONVALUEL
MOVFF SECONDVALUEH, MULTIPLICATIONVALUEH
CALL MULTIPLY10
CALL ATOI
SUBWF SERIALVALUE, 0
BTFSC STATUS, N, 0
GOTO CHECKERROR
ADDWF RESULTL, 0
BTFSC STATUS, C, 0
INCF RESULTH, 1
MOVWF SECONDVALUEL
MOVFF RESULTH, SECONDVALUEH
MOVFF SECONDVALUEH, CHECKVALUEH
MOVFF SECONDVALUEL, CHECKVALUEL
CALL CHECKVALUE
MOVF ISVALID, 0
BTFSC STATUS, Z, 0
GOTO CHECKERROR
MOVLW 0x04
MOVWF OPSTATE
RETURN
E5
RETURN
E6
RETURN
OPERATIONVALUE
MOVFF SERIALVALUE, OPVALUE
MOVLW 0x03
MOVWF OPSTATE
RETURN
ENDOPERATION
CLRF ISEND
CLRF OPSTATE
RETURN
CHECKADD
MOVF OPVALUE, 0
SUBLW 0x2B
RETURN
CHECKSUBSTRACT
MOVF OPVALUE, 0
SUBLW 0x2D
RETURN
CHECKMULTIPLYDOT
MOVF OPVALUE, 0
SUBLW 0x2A
RETURN
CHECKMULTIPLYCROSS
MOVF OPVALUE, 0
SUBLW 0x78
RETURN
CHECKMULTIPLYCROSSM
MOVF OPVALUE, 0
SUBLW 0x58
RETURN
CHECKDIVIDE
MOVF OPVALUE,0
SUBLW 0x2F
RETURN
NOOPERATION
CALL SENDERROR
SETF ISEND
CALL SENDNEWLINE
RETURN
OP
CALL CHECKADD
BTFSC STATUS, Z, 0
GOTO ADDITION
CALL CHECKSUBSTRACT
BTFSC STATUS, Z, 0
GOTO SUBSTRACTION
CALL CHECKMULTIPLYDOT
BTFSC STATUS, Z, 0
GOTO MULTIPLICATION
CALL CHECKMULTIPLYCROSS
BTFSC STATUS, Z, 0
GOTO MULTIPLICATION
CALL CHECKMULTIPLYCROSSM
BTFSC STATUS, Z, 0
GOTO MULTIPLICATION
CALL CHECKDIVIDE
BTFSC STATUS, Z, 0
GOTO DIVISION
CALL NOOPERATION
RETURN
ADDITION
MOVF FIRSTVALUEH, 0
ADDWF SECONDVALUEH, 0
MOVWF RESULTH
MOVF FIRSTVALUEL, 0
ADDWF SECONDVALUEL, 0
BTFSC STATUS, C, 0
INCF RESULTH, 1
MOVWF RESULTL
MOVFF RESULTL, ITOAL
MOVFF RESULTH, ITOAH
CALL CHECKRESULTVALUE
SETF ISEND
CALL SENDNEWLINE
RETURN
SUBSTRACTION
MOVF SECONDVALUEH, 0
SUBWF FIRSTVALUEH, 0
BTFSS STATUS, C, 0
GOTO SUBSTRACTNEGATIVEVALUE
MOVF SECONDVALUEH, 0
SUBWF FIRSTVALUEH, 0
BTFSS STATUS,Z, 0
GOTO SUBSTRACTPOSITIVEVALUE
MOVF SECONDVALUEL, 0
SUBWF FIRSTVALUEL, 0
BTFSS STATUS, C, 0
GOTO SUBSTRACTNEGATIVEVALUE
GOTO SUBSTRACTPOSITIVEVALUE
SUBSTRACTPOSITIVEVALUE
MOVF SECONDVALUEL, 0
SUBWF FIRSTVALUEL, 0
BTFSS STATUS, C, 0
INCF SECONDVALUEH, 1
MOVWF RESULTL
MOVF SECONDVALUEH, 0
SUBWF FIRSTVALUEH, 0
BTFSS STATUS, C, 0
GOTO DECREMENTLOWVALUE
MOVWF RESULTH
GOTO ENDSUBSTRACTION
SUBSTRACTNEGATIVEVALUE
CALL SENDNEGATIVE
MOVF FIRSTVALUEL, 0
SUBWF SECONDVALUEL, 0
BTFSS STATUS, C, 0
INCF FIRSTVALUEH, 1
MOVWF RESULTL
MOVF FIRSTVALUEH, 0
SUBWF SECONDVALUEH, 0
BTFSS STATUS, C, 0
GOTO DECREMENTLOWVALUE
MOVWF RESULTH
GOTO ENDSUBSTRACTION
DECREMENTLOWVALUE
DECF RESULTL, 1
CLRF RESULTH
ENDSUBSTRACTION
MOVFF RESULTL, ITOAL
MOVFF RESULTH, ITOAH
CALL CHECKRESULTVALUE
SETF ISEND
CALL SENDNEWLINE
RETURN
PREPAREMULTIPLICATIONVALUE
MOVFF FIRSTVALUEL, FIRSTMULTIPLICATIONVALUEL
MOVFF FIRSTVALUEH, FIRSTMULTIPLICATIONVALUEH
MOVFF SECONDVALUEL, SECONDMULTIPLICATIONRESULTVALUEL
MOVFF SECONDVALUEH, SECONDMULTIPLICATIONRESULTVALUEH
RETURN
MULTIPLICATION
CALL PREPAREMULTIPLICATIONVALUE
CALL MULTIPLY
MOVFF RESULTU, ITOAU
MOVFF RESULTUH, ITOAUH
MOVFF RESULTL, ITOAL
MOVFF RESULTH, ITOAH
CALL CHECKRESULTVALUE
SETF ISEND
CALL SENDNEWLINE
RETURN
PREPAREDIVISIONVALUE
MOVFF FIRSTVALUEL, DIVIDENTL
MOVFF FIRSTVALUEH, DIVIDENTH
MOVFF SECONDVALUEL, DIVISORL
MOVFF SECONDVALUEH, DIVISORH
RETURN
DIVISION
CALL PREPAREDIVISIONVALUE
CALL DIVIDE
MOVF REMINDERH, 0
BTFSS STATUS, Z, 0
GOTO DECIMALVALUE
MOVF REMINDERL, 0
BTFSS STATUS, Z, 0
GOTO DECIMALVALUE
MOVFF QUOTIENTL, ITOAL
MOVFF QUOTIENTH, ITOAH
CALL CHECKRESULTVALUE
SETF ISEND
CALL SENDNEWLINE
RETURN
PREPAREDECIMALVALUE
MOVFF QUOTIENTH, DECIMALVALUEH
MOVFF QUOTIENTL, DECIMALVALUEL
MOVFF REMINDERL, MULTIPLICATIONVALUEL
MOVFF REMINDERH, MULTIPLICATIONVALUEH
RETURN
DECIMALVALUE
CALL PREPAREDECIMALVALUE
CALL MULTIPLY10
MOVFF RESULTL, DIVIDENTL
MOVFF RESULTH, DIVIDENTH
MOVFF SECONDVALUEL, DIVISORL
MOVFF SECONDVALUEH, DIVISORH
CALL DIVIDE
MOVFF DECIMALVALUEL, ITOAL
MOVFF DECIMALVALUEH, ITOAH
MOVFF QUOTIENTH, DECIMALVALUEH
MOVFF QUOTIENTL, DECIMALVALUEL
CALL CHECKRESULTVALUE
MOVLW 0x2E ; .
CALL SEND
MOVF DECIMALVALUEL, 0
ADDLW 0x30
CALL SEND
SETF ISEND
CALL SENDNEWLINE
RETURN
;********
;* MAIN *
;********
MAIN
CALL PORTS
CALL INTERRUPTS
CALL TXRX
CALL OPS
GOTO MAINLOOP
MAINLOOP
BTFSC PIR1, RCIF
CALL SERIAL
MOVF ISEND, 0
BTFSC STATUS, Z, 0
CALL OP
GOTO MAINLOOP
;*******
;* END *
;*******
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment