Section 12. program control instructions, 83 if case x < f, 85 label subroutine – Campbell Scientific CR23X Micrologger User Manual
Page 189

12-1
SECTION 12. PROGRAM CONTROL INSTRUCTIONS
TABLE 12-1. Flag Description
Flag 0
Output Flag
Flag 1 to 8
User Flags
Flag 11 to 18
User Flags
Flag 9
Intermediate Processing
Disable Flag
TABLE 12-2. Command Codes
0
Go to end of program table
3
1-9, 79-99
Call Subroutine 1-9, 79-99
1
10-19
Set Flag 0-9 high
111-118
Set Flag 11 to 18 high
20-29
Set Flag 0-9 low
211-218
Set Flag 11 to 18 low
30
Then Do
31
Exit loop if true
32
Exit loop if false
40
RS232 Port On
41-48
Set Port 1-8 high
2
49
Set Switched 12 V high
50
RS232 Port Off
51-58
Set Port 1-8 low
2
59
Set Switched 12 V low
61-68
Toggle Port 1-8
2
71-78
Pulse Port 1-8
2
1
95, 96, 97, and 98 are special subroutines
which can be called by Control ports 5, 6, 7,
and 8 going high; see Instruction 85 for
details.
2
The ports can be indexed to the loop
counter.
3
If this command is executed while in a
subroutine, execution jumps directly to the
end of the table that called the subroutine.
*** 83 IF CASE X < F ***
FUNCTION
If the value in the location specified in the Begin
Case Instruction 93 is less than the fixed value
entered as parameter 1 then execute the
command in parameter 2 then go to the end of
the case statement when the next Instruction 83
occurs. Else, continue to next instruction. See
Instruction 93 for an example.
PARAM.
DATA
NUMBER
TYPE
DESCRIPTION
01:
FP
Fixed value
02:
2
Command
*** 85 LABEL SUBROUTINE ***
FUNCTION
This instruction marks the start of a subroutine.
Subroutines are a series of instructions
beginning with Instruction 85 and terminated
with Instruction 95, END. All subroutines must
be placed in Table 3 (Subroutine Table). When
a subroutine is called by a command in a
Program Control Instruction, the subroutine is
executed, then program flow continues with the
instruction following that which called the
subroutine.
Subroutines may be called from within other
subroutines (nested). The maximum nesting
level for subroutines is 7 deep. Attempts to
nest more than 7 deep will not be detected at
compilation, but will result in a run time error.
When the sixth subroutine attempts to call the
seventh, error 31 will be displayed. Execution
will not branch to the seventh subroutine; it will
continue with the Instruction following that
calling the subroutine.
98, 97, 96, 95 PORT INTERRUPT
SUBROUTINES. If subroutine 98 (97, 96, 95)
is included in Table 3 then Port 8 (7, 6, 5) will
cause an interrupt on the rising edge and the
subroutine will be executed. These subroutines
can also be called from any table.
These subroutines can interrupt Table 1 or 2 or
can occur when neither Table is being
executed. When the port activating 95, 96, 97,
or 98 goes high during the execution of a table,
the instruction being executed is completed
before the subroutine is run (i.e., it is as if the
subroutine was called by the next instruction).
The priority is 98, 97, 96, 95, Table 1, Table 2.
If all four interrupt subroutines are pending
(ports go high at the same time or go high
during the execution of the same instruction in
one of the tables), 98 will be executed first, then
97, then 96, and finally 95.
While 95, 96, 97, or 98 is being executed as a
result of the respective port going high, that port
interrupt is disabled (i.e., the subroutine must be
completed before the port going high will have
any effect).