BRANCH allows branching to one of multiple subroutines depending on the value of a specified variable. It’s the equivalent of a case statement. PicBasic Pro also has a BRANCH statement, as does mBasic. It looks like this:

BRANCH value, [label1, label2, label3...]

If value = 0, the program goes to label1. If value = 1, the program goes to label2. If value = 2, it goes to label3, and so forth.


Here’s a BS2 program illustrating BRANCH:


' program to illustrate branch statement
' this program takes a range of numbers from 0 to 3
' and branches to one of four different subroutines
' based on which number it's given
' rctime (analog) input on pin 7
' digital outputs on pins 8 to 11
' set up outs and ins:
output 8
output 9
output 10
output 11
input 7
'set up variables:
potVar var word        ' range from rctime
hitVar var byte        ' potVar divided into a range from 0 - 3
i var nib        ' variable for incrementing for-next loop
    ' get the rctime value:    
    high 7
    pause 1
    rctime 7, 1, potVar
    'divide potVar by one fourth its maximum value:
    hitVar = potVar / 400
    debug ?hitVar
    'turn off all digial outs:
    for i = 8 to 11
        low i
    ' go to one of four subroutines 
    ' depending on value of hitvar:
    branch hitvar, [one, two, three, four]
goto main
    high 8
goto main
    high 9
goto main
    high 10
goto main
    high 11
goto main