PIC 18C Microcontoller Program Flow Method

Exception handling

Bob Ammerman [rammerman at prodigy.net] of RAm Systems says

The PIC18Cxx2 chips contain quite a few nice new features. One of the neatest is programmable access to the stack. This feature allows many powerful tricks.

Notes:

  1. this code has _NOT_ been tested!
  2. all multi-byte values are little-endian
  3. I assume the code space never exceeds 16 bits worth (which it never will on the 242, 252, 442 or 452 chips).
Exception handling (like C++) (or C's setjmp/longjmp)

; establish an exception handler

 CBLOCK
   EXCEPT_SP
 ENDC

some_routine:

; 'establish' the exception handler

 push ; make room for exception handler
 movlw low(exception_handler)
 movwf TOSL,A
 movlw high(exception_handler)
 movwf TOSH,A
 movff STKPTR,EXCEPT_SP
 .
 .
 rcall another_routine

; 'tear-down' the exception handler

 pop  ; couldn't be simpler!

; at this point we can either return, or 'fall_thru' into the
; exception handler to perform actions that are needed whether
; or not an exception occurs

exception_handler:
 .
 .
 .
 return  ; Returns to caller of 'some_routine'

another_routine:
 .
 .
 call yet_another
 .
 .
 btfsc SOMEVALUE,somebit,A ; Exceptional condition?
 bra not_except

 ; Next two instructions 'raise' the exception
 movff EXCEPT_SP,STKPTR
 return

not_except:
 return

yet_another:
 .
 .
 bc oops   ; Ran into trouble

 return    ; Normal return

oops:
 ; Next two instructions 'raise' the exception
 movff EXCEPT_SP,STKPTR
 return