Here is what I came up with today:
Code:
Grab_ELM:
IF Ebit = 0 THEN ;Indicates 1st Nibble ASCii Character
Ebyt0 = RCREG1 ;Load Upper Nibble into Ebyt0
ELSEIF Ebit = 1 THEN ;Indicates 2nd Nibble ASCii Character
Ebyt1 = RCREG1 ;Load Lower Nibble into Ebyt1
ENDIF
TOGGLE Ebit ;Set Up to Load Lower Nibble, or Upper Nibble of Next Character
IF Ebit = 1 THEN ;Just Loaded Upper Nibble, Still Need Lower Nibble
@ INT_RETURN
ELSE
;Combine HEX[Ebyt[0], Ebyt[1]]
IF (Ebyt0 => $30) AND (Ebyt0 <= $39) THEN ;Characters 0 >> 9
ElmIn = (Ebyt0 - $30) << 4 ;Shifts to Upper Nibble
ELSEIF (Ebyt0 => $41) AND (Ebyt0 <= $46) THEN ;Characters A >> F
ElmIn = (Ebyt0 - $37) << 4 ;Shifts to Upper Nibble
ENDIF
IF (Ebyt1 => $30) AND (Ebyt1 <= $39) THEN ;Characters 0 >> 9
ElmIn = ElmIn + (Ebyt1 - $30) ;Adds to Upper Nibble
ELSEIF (Ebyt1 => $41) AND (Ebyt1 <= $46) THEN ;Characters A >> F
ElmIn = ElmIn + (Ebyt1 - $37) ;Adds to Upper Nibble
ENDIF
IF (ElmIn = $0D) OR (ElmIn = $20) THEN ;Carriage Return or Space
@ INT_RETURN ;Ignore & Return
ELSEIF (ElmIn <> $0D) AND (ElmIn <> $20) AND (ElmIn <> $3E) THEN
Eval[ElmCt] = ElmIn
ELSEIF ElmIn = $3E THEN ;">", End Of Transmission
ELM_Rec = 0 ;Can now send next Request
ElmCt = 0 ;Next BYTE In = New
ElmDat = 1 ;Must Decipher Eval[x]
Ebit = 0 ;Ensures 1st Character Loads into Ebyt0
@ INT_RETURN ;Return
ENDIF
ElmCt = ElmCt + 1 ;Will Load Next Character
@ INT_RETURN ;Return
At least I have variables to work with in a Hex format. From there I have other subroutines to dissect the content.
Bookmarks