Galil DMC-3425 Home Security System User Manual


 
DMC-3425 Chapter 7 Application Programming 123
JP#WAIT,(@IN[1]=0) | (@IN[2]=0) Loop until Input 1& 2 are not active
RI0
End Input Interrupt Routine without restoring
trippoints
Subroutines
A subroutine is a group of instructions beginning with a label and ending with an end command (EN).
Subroutines are called from the main program with the jump subroutine instruction JS, followed by a
label or line number, and conditional statement. Up to 8 subroutines can be nested. After the
subroutine is executed, the program sequencer returns to the program location where the subroutine
was called unless the subroutine stack is manipulated as described in the following section.
An example of a subroutine to draw a square 500 counts per side is given below. The square is drawn
at vector position 1000,1000.
Instruction
Interpretation
#M Begin Main Program
CB1 Clear Output Bit 1 (pick up pen)
VP 1000,1000;LE;BGS Define vector position; move pen
AMS Wait for after motion trippoint
SB1 Set Output Bit 1 (put down pen)
JS #Square;CB1 Jump to square subroutine
EN End Main Program
#Square Square subroutine
V1=500;JS #L Define length of side
V1=-V1;JS #L Switch direction
EN End subroutine
#L;PR V1,V1;BGA Define A,B; Begin A
AMA;BGB;AMA After motion on A, Begin B
EN End subroutine
Stack Manipulation
It is possible to manipulate the subroutine stack by using the ZS command. Every time a JS
instruction, interrupt or automatic routine (such as #POSERR or #LIMSWI) is executed, the subroutine
stack is incremented by 1. Normally the stack is restored with an EN instruction. Occasionally it is
desirable not to return back to the program line where the subroutine or interrupt was called. The ZS1
command clears 1 level of the stack. This allows the program sequencer to continue to the next line.
The ZS0 command resets the stack to its initial value.
Auto-Start and Auto Error Routine
The DMC-3425 has two special labels for automatic program execution. A program which has been
saved into the controllers non-volatile memory can be automatically executed upon power up or reset
by beginning the program with the label #AUTO. The program must be saved into non-volatile
memory using the command, BP.
If the program loaded onto the EEPROM has a checksum error at power-up, the routine #AUTOERR
will run instead, allowing the user to determine the nature of the checksum error. The _RS operand
may be used to determine what sector of the EEPROM has been corrupted.