 |
|
 |
' -------------------------------------------------------------------------
' Program Description
' -------------------------------------------------------------------------
'
' Controls eight channels of lights using RB. Sequence is selected by
' switches connected to RA.0 and RA.1. The delay between steps is fixed
' by a constant, but could easily be modified to be variable by using
' RCTIME.
' -------------------------------------------------------------------------
' Device Settings
' -------------------------------------------------------------------------
DEVICE SX28, OSC4MHZ, TURBO, STACKX, OPTIONX
FREQ 4_000_000
ID "BRANCH"
' -------------------------------------------------------------------------
' IO Pins
' -------------------------------------------------------------------------
Select VAR RA ' bits 0 and 1
TRIS_Sel VAR TRIS_A
Lights VAR RB
TRIS_Lights VAR TRIS_B
' -------------------------------------------------------------------------
' Constants
' -------------------------------------------------------------------------
StepDelay CON 100 ' 100 ms between steps
' -------------------------------------------------------------------------
' Variables
' -------------------------------------------------------------------------
choice VAR Byte ' selected sequence
maxSteps VAR Byte ' steps in sequence
idx VAR Byte ' step pointer
' =========================================================================
PROGRAM Start
' =========================================================================
' -------------------------------------------------------------------------
' Program Code
' -------------------------------------------------------------------------
Start:
Lights = %00000000 ' clear lights
TRIS_Lights = %00000000 ' make lights outputs
Main:
PAUSE StepDelay ' inter-step delay
choice = Select & %0011 ' get show
BRANCH choice, Show_0, Show_1, Show_2, Show_3
GOTO Main
Show_0:
READ Pattern0, maxSteps ' get steps in sequence
IF idx <= maxSteps THEN ' check idx range
READ Pattern0 + idx, Lights ' get step pattern
INC idx ' point to next step
ELSE
idx = 1 ' reset idx if needed
ENDIF
GOTO Main
Show_1:
READ Pattern1, maxSteps
IF idx <= maxSteps THEN
READ Pattern1 + idx, Lights
INC idx
ELSE
idx = 1
ENDIF
GOTO Main
Show_2:
READ Pattern2, maxSteps
IF idx <= maxSteps THEN
READ Pattern2 + idx, Lights
INC idx
ELSE
idx = 1
ENDIF
GOTO Main
Show_3:
READ Pattern3, maxSteps
IF idx <= maxSteps THEN
READ Pattern3 + idx, Lights
INC idx
ELSE
idx = 1
ENDIF
GOTO Main
' =========================================================================
' User Data
' =========================================================================
Pattern0:
DATA 8 ' steps in sequence
DATA %00000001 ' sequence values
DATA %00000010
DATA %00000100
DATA %00001000
DATA %00010000
DATA %00100000
DATA %01000000
DATA %10000000
Pattern1:
DATA 10
DATA %00000000
DATA %10000000
DATA %11000000
DATA %01100000
DATA %00110000
DATA %00011000
DATA %00001100
DATA %00000110
DATA %00000011
DATA %00000001
Pattern2:
DATA 5
DATA %00000000
DATA %00011000
DATA %00100100
DATA %01000010
DATA %10000001
Pattern3:
DATA 5
DATA %11111111
DATA %01111110
DATA %00111100
DATA %00011000
DATA %00000000