| READ | Examples |
READ Base {+ Offset}, Variable {, Variable, ...}
Function
Read one or more bytes from a table.
Explanation
The DATA directive can be used to create [read-only] tables for SX/B
programs. The READ instruction is used to move one or more table
values into the specified byte variable(s).
Start:
TRIS_B = %00000000 ' make RB outputs
Main:
FOR idx = 0 TO 3
READ Pattern + idx, RB ' move pattern to LEDs
PAUSE 100
NEXT idx
FOR idx = 4 TO 1 STEP -1
READ Pattern + idx, RB
PAUSE 100
NEXT idx
GOTO Main ' do it again
' -------------------------------------------------------------------------
Pattern: ' LED patterns
DATA %00000000
DATA %00011000
DATA %00111100
DATA %01111110
DATA %11111111
As of version 1.4, SX/B can handle inline strings (of two or more characters) and z-strings (of any length) stored in DATA statements. Using READ, the following subroutine will send a string to a defined serial port:>
' Use: TX_STR [ string | label ]
' -- "string" is an embedded literal string
' -- "label" is DATA statement label for stored z-String
TX_STR:
tmpW1 = __WPARAM12 ' get offset/base
DO
READ tmpW1, tmpW3 ' read a character
IF tmpW3 = 0 THEN EXIT ' if 0, string complete
SEROUT SOut, Baud, tmpW3 ' send the byte
INC tmpW1 ' point to next character
LOOP
RETURN
This subroutine expects two parameters: the base address and the character offset of the string. The subroutine uses a word variable to accept the base+offset string pointer that is passed as a parameter. When a literal string or DATA label is specified as the TX_STR parameter, the compiler inserts the appropriate values that form a pointer to the string. Using the subroutine above strings can be transmitted like this:
TX_STR SUB 2 ' strings use two parameters ' ------------------------------------------------------------------------- Main: TX_STR "Version " ' inline string (compiles to z-string) TX_STR VerNum END ' ------------------------------------------------------------------------- VerNum: DATA "1.0", 0 ' defined z-string
Note that when using a label as a subroutine parameter it must be defined before use, and the SX/B compiler adds the terminating zero to inline strings when there are two are more characters. If the following syntax is used:
TX_STR "X" ' character passed by valuean error will be raised as single characters are passed by value (one parameter), not by string pointer reference (two parameters). The solution is to create a subroutine for sending a single character that is also used by the TX_STR subroutine. See the examples page for details.
Related instructions: DATA/WDATA and LOOKUP