;====================================================================
; Name: asciitodec
; Title: ASCII to decimal convertion A to F and 0 to 9
; Created: Thursday April 10 2014
; Processor: PIC16F84A
; Compiler: MPASM (MPLAB)
;====================================================================
;====================================================================
; DEFINITIONS
;====================================================================
#include p16f84a.inc ; Include register definition file
;====================================================================
; VARIABLES
;====================================================================
input EQU H'21'
result EQU H'23'
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
reset ORG 0x00
goto Start
;====================================================================
; CODE SEGMENT
;====================================================================
ORG 0x10
Start
banksel TRISB ; select bank1
clrf TRISB ; make portB digital output
banksel PORTB ; select bank0
clrf PORTB ; ensure low on portB pins
clrf result
Chk_1 ; #Check routine range A'0-9'#
movlw H'30' ; load low range limit A'0'
subwf input ; substract
btfss STATUS,C ; check the input >= A'0'
goto LEDerr ; >>>>> Turn On LED
movfw input ; return the input
addlw H'30' ; recover the input
movwf input ; write back input
movlw H'3A' ; load up range limit A'9'
subwf input ; substract
btfsc STATUS,C ; check the input <= A'9'
goto Chk_2 ; The input is something else
movfw input ; return the input
addlw H'3A' ; recover the input
addlw -H'30' ; substract base
movwf result ; write the result
goto Terminate ; Terminate the programme
Chk_2 ; #Range check routine A'A-F'#
movfw input ; return the input
addlw H'3A' ; recover the input
movwf input ; write back input
movlw H'41' ; load low range limit A'A'
subwf input ; substract
btfss STATUS,C ; check the input >= A'A'
goto LEDerr ; >>>>> Turn On LED
movfw input ; return the input
addlw H'41' ; recover the input
movwf input ; write back input
movlw H'47' ; load up range limit A'F'
subwf input ; substract
btfsc STATUS,C ; check the input is <= A'F'
goto LEDerr ; >>>>> Turn On LED
movfw input ; return the input
addlw H'47' ; recover the input
addlw -H'37'
movwf result
goto Terminate ; Terminate the programme
LEDerr
bsf PORTB,0 ; >>>>> Turn On LED
Terminate
END