// include the XC header file to define all register and bit names
#include <xc.h>

/* PTG Commands */
#define PTGCTRL  (0x0<<0)
#define PTGADD   (0x1<<4)
#define PTGCOPY  (0x1<<4)
#define PTGWHI   (0x4<<4)
#define PTGIRQ   (0x7<<4)
#define PTGTRIG  (0x8<<4)
#define PTGJMP   (0xA<<4)
#define PTGJMPC0 (0xC<<4)
#define PTGJMPC1 (0xE<<4)

// Outer loop
_STEP0 = PTGWHI  | 0x1; // Wait for positive edge trigger 1
_STEP1 = PTGCTRL | 0x8; // Start PTGT0, wait for time out
_STEP2 = PTGIRQ  | 0x1; // Generate IRQ 1
// Inner loop
_STEP3 = PTGTRIG | 0x3; // Generate output trigger 3 to start ADC conversion
_STEP4 = PTGCTRL | 0x9; // Start PTGT1, wait for time out
_STEP5 = PTGJMPC0| 0x3; // Jump to STEP3 if PTGC0! = PTGC0LIM, increment PTGC0
// End inner loop
_STEP6 = PTGADD  | 0x1; // Add PTGADJ to PTGT0LIM
_STEP7 = PTGJMPC1| 0x0; // Jump to STEP0 if PTGC1! = PTGC1LIM, increment PTGC1
// End outer loop
_STEP8 = PTGIRQ  | 0x4; // Generate IRQ 4
_STEP9 = PTGCOPY | 0x8; // Copy PTGHOLD to PTGT0LIM (restore original value)
_STEP10 = PTGJMP | 0x0; // Jump to start of queue