NOTE: The example below is written for the BS2 and will run on any of the BS2-family modules. Modify the $STAMP directive (as required) before downloading to the BS2e, BS2sx, BS2p, BS2pe, or BS2px.
' DATA.BS2 ' This program stores a number of large text strings into EEPROM with the ' DATA directive and then sends them, one character at a time via the DEBUG ' command. This is a good demonstration of how to save program space by ' storing large amounts of data in EEPROM directly, rather than embedding ' the data into DEBUG commands. ' {$STAMP BS2} ' {$PBASIC 2.5} idx VAR Word ' current location number phrase VAR Nib ' current phrase number char VAR Byte ' character to print ' ----- Define all text phrases (out of order, just for fun!) ----- ' Text1 DATA "Here is the first part of a large chunk of textual " DATA "data ", CR, "that needs to be transmitted. There's " DATA "a 5 second delay", CR, "between text paragraphs. ", CR DATA CR, 0 Text3 DATA "The alternative (having multiple DEBUGs or SEROUTs, " DATA "each ", CR, "with their own line of text) consumes " DATA "MUCH more EEPROM ", CR, "(program) space. ", CR DATA CR, 0 Text6 DATA "The 255 is used by this program to indicate we've " DATA "reached the ", CR, "End of Text. The Main routine " DATA "pauses in between each block of ", CR, "text, and then " DATA "uses a LOOKUP command TO retrieve the location ", CR DATA "of the next desired block of text to print. ", 0 Text4 DATA CLS, "This program also demonstrates retrieving data " DATA "out of order ", CR, "in relation TO the way it is " DATA "stored in EEPROM. Additionally, ", CR, "control codes " DATA "(like carriage-returns, clear-screens, etc) can ", CR DATA "be embedded right in the data, as it is here. ", CR DATA CR, 0 Text2 DATA "This is an example of a good way to save space in " DATA "your ", CR, "BASIC Stamp's program by storing data " DATA "into EEPROM and ", CR, "retrieving it, one byte at a " DATA "time, and transmitting it ", CR, "with just a single " DATA "DEBUG (or SEROUT) command.", CR, CR, 0 Text5 DATA "The Print_It routine simply takes the Index variable, " DATA "retrieves ", CR, "the character at the EEPROM location " DATA "pointed to by it, and ", CR, "prints it to the screen " DATA "unti it finds a byte with a value of 255.", CR, CR, 0 Main: DEBUG CLS ' Clear DEBUG window FOR phrase = 1 TO 6 ' Print blocks one by one LOOKUP (phrase - 1), [Text1, Text2, Text3, Text4, Text5, Text6], idx GOSUB Print_It PAUSE 5000 ' Pause for 5 seconds NEXT END Print_It: DO READ idx, char ' Get next character idx = idx + 1 ' Point to next location IF (char = 0) THEN EXIT ' If 0, we're done with block DEBUG char ' Otherwise, transmit it LOOP RETURN ' Return to the main routine
BASIC Stamp Help Version 2.5.4
Copyright © Parallax Inc.
8/8/2012