Industrologic, Inc.
3201 Highgate Lane
St. Charles, MO
63301
USA
Phone: (636) 723-4000
www.industrologic.com
info@industrologic.com
TMB includes features that make it easy to write and understand bit manipulation programs. When entering programs it will understand values entered in decimal or hexadecimal as well as single byte character strings. It also features commands that can change the display of number values from decimal to hexadecimal.
Instructions entered while programming are saved as two-byte tokenized instructions, not as BASIC source code, therefore, all instruction arguments and line numbers, are limited to a single byte, (values from 0 to 255). Values that exceed this limit at run time will "roll over" or "roll under" back to a byte value, and will not cause a run-time error.
Similarly, instructions that use a limited range of values and are given values outside that range will not cause a run-time error, but will either ignore the instruction or convert the illegal value to a legal value.
A "command" consists of an instruction and its single byte "argument", and will be performed as soon as entered. A program line entry consists of a number from 1 to 255, a space, an instruction, and a single byte argument.
Lower case characters are converted to upper case when typed since all instructions must be in upper case.
Line numbers and arguments are always a single byte and can be entered as decimal values, e.g. x xx xxx xD xxD xxxD, hexadecimal values, e.g. xH xxH, or quoted single character strings, e.g. "x".
Instructions that manipulate the ports of the microcontroller must be used in ways that are compatible with the port hardware. If any bit of P1 or P3 is to be used as an input, it must be to a logic level "high" state, or "1". (On power up the port pins are set high.)
Comments may be added to program files created and saved on a host computer and uploaded, but the program saved in the microcontroller will not contain comments. Comments must be on separate lines, and any line that does not begin with a program line number may be a comment. When comment lines are sent to the microcontroller during program upload, syntax errors occur, and the lines are ignored.
A,B,C,D,E general purpose byte variables where certain operations are performed F,G,H,M,S and where the results of certain operations are stored P1 the byte value associated with port P1The following are byte variables that can be read and displayed, but cannot be assigned values by the user program. The user program must read KEY and INT often enough to insure that they contain current and valid values.
KEY the ASCII value of the last character received at the serial port and is
cleared after being read (see Appendix A for a table of these values)
(A) a special description of variable A used to display the ASCII
character rather than the numeric value
The command instructions will normally be used only as a command at the prompt, and the rest of the instructions will normally be used in a program, but may be used as a command at the prompt to see how the instruction works.
BAUD=[arg] Set baud rate of serial port to [arg] times 100, and save in
EEPROM. Allowable values are 192, 96, 48, 24, 12, 6, 3.
MODE=[arg] Set communication mode (data bits and parity), and save in EEPROM.
Allowable values are 80, 81, 82, 71, 72.
80 = 8 data bits, no parity
81 = 8 data bits, odd parity
82 = 8 data bits, even parity
71 = 7 data bits, odd parity
72 = 7 data bits, even parity
The number of stop bits is always considered to be one. Although the microcontroller contains a hardware UART for sending and receiving serial data, it cannot provide all of the combinations of data bits, stop bits, and parity bit that more advanced UART's can provide. There is no communication error checking when receiving characters in TMB-Enhanced. Note: If you change the baud rate or communication mode in TMB-Enhanced, you will also need to change it in your terminal software!
Examples:
BAUD=96 set serial port baud rate to 9600
MODE=71 set data bits to 7 and parity to odd
BOOTON Run your program when TMB starts (i.e., on power up)
BOOTOFF Turn off the BOOTON feature (both are saved in EEPROM)
NEW Erase all program lines
LIST Display the program lines (if there are more than 20 lines the
listing will pause until you press a key)
RUN Run the program from the command prompt (>)
END Stop the program and return to the prompt
Control C (pressing the "C" key while the CTRL key is already pressed)
will cause a running program to stop.
The program can be stopped with the END instruction, by having no further
lines to execute, (possibly by going to a non-existant line number above the
rest of the lines), or by telling the program to go to line zero. If the
program does not have a method of exiting in response to some program condition,
the power will need to be cycled to return to the prompt.
DELAY [arg] Pause the program for [arg] tenths (1/10) of a second GOTO [arg] Jump to the instructions beginning at line number [arg] GOSUB [arg] Call subroutine at line number [arg] (1 layer deep only) RETURN Return to next instruction after the last GOSUB LOOP [arg] Begin a loop with [arg] iterations (1 layer deep only) ENDLOOP Terminate a loopSubroutines and loops may only be one layer deep, that is, a subroutine may not contain another GOSUB instruction, and an ENDLOOP instruction must be performed before another LOOP instruction is performed.
Examples:
DELAY 255 delay 25.5 seconds
1 GOSUB 10 call subroutine at line 10
2 GOTO 1 jump to line 1
10 PRINT "A" send an upper case A to the serial port
11 RETURN jump to line following the GOSUB instruction
10 GOSUB A call subroutine at the line number of the value of variable A
(if the value of A is 20 it would be the same as GOSUB 20)
1 LOOP 255 start a loop of 255
2 PRINT "A" send an upper case "A" to the serial port
3 ENDLOOP jump back to line 2 until 255 loops have been done
PRINT [arg] Display a byte value in decimal/hexadecimal, or as character
This instruction sends characters out the serial port
(see Appendix A for a table of these values)
The PRINT instruction does not include a carriage return/line feed sequence
(13D/10D or 0DH/0AH) after displaying a value or character like most BASIC
languages. If either of these characters are desired they will need to be
displayed separately. The PRINT instruction, when in HEX mode, will always
display values with two digits followed by "H".
Lower case characters are converted to upper case when typed since all instructions must be in upper case. If a lower case displayable character is used as a value argument, the ASCII code must be used since it cannot be enclosed in quotes. For example, to print an "a" you must use PRINT 97 or PRINT 61H.
HEX Display values in hexadecimal (try this at the command prompt)
DECIMAL Display values in decimal (returns it to normal)
INPUT [arg] Wait for a value to be entered (followed by a carriage return) and
then put the value in [arg]. This instruction waits for characters
from the serial port. (see Appendix A for a table of these values)
The ESCAPE key will cancel value entry with the INPUT instruction, (but not stop the program)
Examples: PRINT 0DH send a carriage return to the serial port PRINT 13 send a carriage return to the serial port PRINT 0AH send a line feed to the serial port PRINT 10 send a line feed to the serial port PRINT "A" send an upper case A to the serial port PRINT 65 send an upper case A to the serial port PRINT 97 send a lower case A to the serial port INPUT A wait for a value and then set variable A to that value A=66 ASCII code for 'B" PRINT (A) send ASCII character "B" to serial port
A=[arg] Set byte variable A to [arg]
A=A+[arg] Add the value in [arg] to variable A
A=A-[arg] Subtract the value in [arg] from variable A
A=A*[arg] Multiply variable A by the value in [arg]
A=A/[arg] Divide variable A by the value in [arg], (remainder is discarded)
A=A\[arg] Remainder of dividing variable A by the value in [arg]
IF A=0 [arg] If variable A is zero jump to line number [arg]
IF A<>0 [arg] If variable A is not zero jump to line number [arg]
IF A=B [arg] If variable A equals variable B jump to line number [arg]
IF A<>B [arg] If variable A does not equal variable B jump to line number [arg]
IF A<B [arg} If variable A is less than variable B jump to line number [arg]
IF A>B [arg] If variable A is greater than variable B jump to line number [arg]
Examples:
A=KEY get value of last character at Serial Port 1
A=A-66 subtract the ASCII value for "B", which is 66
IF A=0 30 if character was "B" then jump to line 30
A=A+B add the value of variable B to variable A
A=A+10 add 10 to variable A (e.g., if A contained 10 it would
become 20, if A contained 255 it would roll over to 9)
A=A-1 subtract 1 from A (e.g., if A contained 2 it would
become 1, if A contained 0 it would roll under to 255)
A=A*10 multiply variable A by 10 (e.g., if A contained 10 it would
become 100, if A contained 30 it would roll over to 44)
A=A/5 divide variable A by 5 (e.g., if A contained 10 it would
become 2, if A contained 202 it would become 40)
A=A\7 divide variable A by 7 and return the remainder in variable A
(e.g., if A contained 10 it would become 3, if A contained 21 it
would become 0)
IF A=0 10 if variable A is equal to 0 then jump to line 10
IF A<>0 15 if variable A is not equal to 0 then jump to line 15
IF A<B 20 if variable A is less than variable B then jump to line 20
P1=[arg] Set port P1 to [arg] P1.X=[arg] Set port P1 bit X (0-7) to [arg] (0 or 1) P3.7=[arg] Set port P3 bit 7 to [arg] (0 or 1) Examples: P1=1 set P1 bit 0 high, the other bits low P1=80H set P1 bit 7 high, the other bits low P1.7=0 set P1 bit 7 low P3.7=1 set P7.3 high
If any port bit is to be used as an input, it must be set high, (its power up setting.)
IF P1.0=0 [arg] If port P1 bit 0 is low jump to line number [arg] IF P1.0=1 [arg] If port P1 bit 0 is high jump to line number [arg] IF P1.1=0 [arg] If port P1 bit 1 is low jump to line number [arg] IF P1.1=1 [arg] If port P1 bit 1 is high jump to line number [arg] IF P1.2=0 [arg] If port P1 bit 2 is low jump to line number [arg] IF P1.2=1 [arg] If port P1 bit 2 is high jump to line number [arg] IF P1.3=0 [arg] If port P1 bit 3 is low jump to line number [arg] IF P1.3=1 [arg] If port P1 bit 3 is high jump to line number [arg] IF P1.4=0 [arg] If port P1 bit 4 is low jump to line number [arg] IF P1.4=1 [arg] If port P1 bit 4 is high jump to line number [arg] IF P1.5=0 [arg] If port P1 bit 5 is low jump to line number [arg] IF P1.5=1 [arg] If port P1 bit 5 is high jump to line number [arg] IF P1.6=0 [arg] If port P1 bit 6 is low jump to line number [arg] IF P1.6=1 [arg] If port P1 bit 6 is high jump to line number [arg] IF P1.7=0 [arg] If port P1 bit 7 is low jump to line number [arg] IF P1.7=1 [arg] If port P1 bit 7 is high jump to line number [arg] IF P3.7=0 [arg] If port P3 bit 7 is low jump to line number [arg] IF P3.7=1 [arg] If port P3 bit 7 is high jump to line number [arg] Example: P3.7=1 set P3 bit 7 high for use as an input IF P3.7=0 100 if P3 bit 7 is low jump to line number 100
These instructions, particularly the initialization sequence, involve LCD signal timing and delays, and therefore take a relatively long time to complete compared to other instructions.
LCDCMD=[arg] Send the command byte [arg] to the LCD. Refer to the data sheet of
the LCD module used for the list of command values and their effects.
(Many LCD's have similar commands which are shown in the examples.)
Examples:
LCDCMD=0 When this value is used, the LCDCMD instruction configures the
digital I/O signals used for the T51-LCD, initializes the display,
turns on the cursor, and sets the cursor to blink. This instruction
and value must be used before using any other LCD instruction.
LCDCMD=1 Clear LCD display
LCDCMD=2 Set cursor to "home" position
LCDCMD=8 Display off
LCDCMD=12 Display on, cursor off
LCDCMD=13 Display on, cursor off, blinking of cursor position character on
(large block)
LCDCMD=14 Display on, cursor on, cursor position character does not blink
(underline)
LCDCMD=15 Display on, cursor on, blinking of cursor position character on
(large block)
LCDCMD=16 Move cursor left
LCDCMD=20 Move cursor right
LCDCMD=24 Scroll display left
LCDCMD=30 Scroll display right
LCDPRN [arg] Display a byte value at the next cursor location on the LCD in
decimal or hexadecimal, or as a character. This instruction works
just like the PRINT instruction, but for the LCD. For formatting
details see PRINT.
LCDCUR=[arg] Move the LCD cursor to position [arg]. Refer to the data sheet of
the LCD module used to determine which line and column of the LCD
correspond to a particular cursor position.
The normal operation of the LED print commands is to scroll characters to the left when the next position to display a character is the rightmost position. The Clear and Home commands can be used to change the display position.
LEDCMD=[arg] Send a special command [arg] to the LED.
Examples:
LEDCMD=0 When this value is used, the LEDCMD instruction configures the
digital I/O signals used for the T51-LED, clears the display, sets
the next display position to the leftmost position, and turns off
both discrete LED's between the displays. This instruction and
value must be used before using any other LED instruction.
LEDCMD=1 Clear/home the T51-LED display and turn off both discrete LED's
LEDCMD=2 Set next display position to the leftmost position (home)
LEDCMD=3 Turn off both discrete LED's
LEDCMD=4 Turn on only the bottom discrete LED
LEDCMD=5 Turn on only the top discrete LED
LEDCMD=6 Turn on both discrete LED's
LEDPRN [arg] Display a byte value at the next display position on the T51-LED
in decimal or hexadecimal, or as a character. This instruction works
just like the PRINT instruction, but for the T51-LED. For
formatting details see PRINT.
Note: Beginning with version 2.0, the number of timers has been reduced to two.
SETTIMER 1 set timer #1 from the values in variables H, M, and S
where H=hours, M=minutes, and S=seconds
SETTIMER 2 set timer #2
For versions prior to 2.0 only:
SETTIMER 3 set timer #3
SETTIMER 4 set timer #4
CLEARTIMER 1 turn off timer #1 so that it can no longer cause a timeout
CLEARTIMER 2 turn off timer #2 so that it can no longer cause a timeout
For versions prior to 2.0 only:
CLEARTIMER 3 turn off timer #3 so that it can no longer cause a timeout
CLEARTIMER 4 turn off timer #4 so that it can no longer cause a timeout
IF TIMER1=0 [arg] If timer #1 has not timed out jump to line number [arg]
IF TIMER1=1 [arg] If timer #1 has timed out jump to line number [arg]
IF TIMER2=0 [arg] If timer #2 has not timed out jump to line number [arg]
IF TIMER2=1 [arg] If timer #2 has timed out jump to line number [arg]
For versions prior to 2.0 only:
IF TIMER3=0 [arg] If timer #3 has not timed out jump to line number [arg]
IF TIMER3=1 [arg] If timer #3 has timed out jump to line number [arg]
IF TIMER4=0 [arg] If timer #4 has not timed out jump to line number [arg]
IF TIMER4=1 [arg] If timer #4 has timed out jump to line number [arg]
Example:
H=0 zero hours
M=30 30 minutes
S=0 zero seconds
SETTIMER 1 set timer #1 to timeout after 30 seconds
IF TIMER1=1 100 if timer #1 times out go to line number 100
SETCLOCK set clock from the values in variables H, M, and S
where H=hours, M=minutes, and S=seconds
READCLOCK read clock and place the values into variables H, M, and S
where H=hours, M=minutes, and S=seconds
Examples:
H=23 23 hundred hours
M=0 zero minutes
S=0 zero seconds
SETCLOCK set clock to 11PM even
READCLOCK read clock values
PRINT H display hours
PRINT ":"
PRINT M display minutes
PRINT ":"
PRINT S display seconds
When data is written to an EEPROM address, it is likely that the data will represent program instructions and arguments, which TMB-RC51 will attempt to RUN and LIST. In order to prevent the program from running this data as an instruction, an END instruction must be placed at a line number lower than any data address used so that the program will stop before reaching the data. If this is not done, the program may do any number of undesirable things, e.g., erasing itself or changing the baud rate unexpectedly. It is also suggested that the highest possible EEPROM addresses be used for data so that it is LISTED after the normal program lines.
Most EEPROMs may be written over a million times, but even this limit could be exceeded if the program wrote to the EEPROM in an unintended loop caused by incorrect programming, so some caution should be used. EEPROMs may be read an unlimited number of times.
WRITEEE [arg] Write the 2 byte values in variables A and B to the EEPROM word at
address [arg], where [arg] is an address from 1 to 255
READEE [arg] Read the EEPROM word at address [arg] and put the 2 byte values in
variables A and B, where [arg] is an address from 1 to 255
Examples:
A=FFH set variable A value
B=FFH set variable B value
WRITTEE 250 write A and B to memory location 250
READEE 255 read memory location 255 and place in variables A and B
Decimal Control Char. Control Decimal Decimal
Value Character Abbreviation Key Value Character Value Character
-------------------------------------------------------------------------------------------
00 NULL NUL ^@ 45 - (hyphen) 90 Z
01 START OF HEADING SOH ^A 46 . (period) 91 [ (left bracket)
02 START OF TEXT STX ^B 47 / 92 \ (backslash)
03 END OF TEXT ETX ^C 48 0 93 ] (right bracket)
04 END OF TRANSMIT EOT ^D 49 1 94 ^ (carat)
05 ENQUIRY ENQ ^E 50 2 95 _ (underscore)
06 ACKNOWLEDGE ACK ^F 51 3 96 ` (accent)
07 BEEP BEL ^G 52 4 97 a
08 BACK SPACE BS ^H 53 5 98 b
09 HORIZONTAL TAB HT ^I 54 6 99 c
10 LINE FEED LF ^J 55 7 100 d
11 VERTICAL TAB VT ^K 56 8 101 e
12 FORM FEED FF ^L 57 9 102 f
13 CARRIAGE RETURN CR ^M 58 : 103 g
14 SHIFT OUT SO ^N 59 ; 104 h
15 SHIFT IN SI ^O 60 < 105 i
15 DEVICE LINK ESC DLE ^P 61 = 106 j
17 DC1 X-ON DC1 ^Q 62 > 107 k
18 DC2 DC2 ^R 63 ? 108 l
19 DC3 X-OFF DC3 ^S 64 @ 109 m
20 DC4 DC4 ^T 65 A 110 n
21 NEG. ACKNOWLEDGE NAK ^U 66 B 111 o
22 SYNC. IDLE SYN ^V 67 C 112 p
23 END OF TX BLOCK ETB ^W 68 D 113 q
24 CANCEL CAN ^X 69 E 114 r
25 END MEDIUM EM ^Y 70 F 115 s
26 SUBSTITUTE SUB ^Z 71 G 116 t
27 ESCAPE ESC 72 H 117 u
28 RIGHT ARROW (on PC) 73 I 118 v
29 LEFT ARROW (on PC) 74 J 119 w
30 UP ARROW (on PC) 75 K 120 x
31 DOWN ARROW (on PC) 76 L 121 y
32 BLANK SPACE 77 M 122 z
33 ! 78 N 123 { (left brace)
34 " (double quote) 79 O 124 | (vertical bar)
35 # (number sign) 80 P 125 } (right brace)
36 $ 81 Q 126 ~ (tilde)
37 % 82 R 127 DELETE
38 & 83 S
39 ' (single quote) 84 T
40 ( (open parenthesis) 85 U
41 ) (close parenthesis) 86 V
42 * 87 W
43 + 88 X
44 , (comma) 89 Y