beautypg.com

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

Page 189

background image

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).