PIC 18C Microcontoller Program Flow Method

Co-routines/cooperative tasks mainline cocalls only

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).
Co-routines/cooperative tasks version 1

Note: assumes that all cocalls are from mainline code (ie: the subroutine
stack is empty)

 CBLOCK
   TASKX_PC:2 ; Address of next instruction to run in task X
   TASKY_PC:2 ; Address of next instruction to run in task Y
 ENDC

initialize:
  ; initialize values for all but the first task
   movlw low(tasky)
   movwf TASKY_PC,A
   movlw high(tasky)
   movwf TASKY_PC+1,A

   ...fall thru into first task...
taskx:
   .
   .
   rcall x_cocall_y
   .
   .
   rcall x_cocall_y
   .
   bra  taskx

x_cocall_y:
   movff TOSL,TASKX_PC
   movff TOSH,TASKX_PC+1
   movf     TASKY_PC,W,A
   movwf  TOSL
   movf     TASKY_PC+1,W,A
   movwf   TOSH
   return

tasky:
   .
   .
   rcall y_cocall_x
   .
   .
   rcall y_cocall_x
   .
   bra  tasky

y_cocall_x:
   movff TOSL,TASKY_PC
   movff TOSH,TASKY_PC+1
   movf    TASKX_PC,W,A
   movwf TOSL
   movf    TASKX_PC+1,W,A
   movwf TOSH
   return