| SERIN Example | Syntax |
![]() |
![]() |
' =========================================================================
'
' File...... SERIN.SXB
' Purpose... Create simple 7-segment display controller (one digit)
' Author.... (c) Parallax, Inc. -- All Rights Reserved
' E-mail.... support@parallax.com
' Started...
' Updated... 05 JUL 2006
'
' =========================================================================
' -------------------------------------------------------------------------
' Program Description
' -------------------------------------------------------------------------
'
' Waits for a command from a host controller and displays hex value or
' individual segments on a 7-segment LED display.
'
' Commands:
' "!LEDH", value -- display hex digit value (0 .. F)
' "!LEDS", value -- display individual segments
' -------------------------------------------------------------------------
' Device Settings
' -------------------------------------------------------------------------
DEVICE SX28, OSCXT2, TURBO, STACKX, OPTIONX
FREQ 4_000_000
ID "SERIN"
' -------------------------------------------------------------------------
' IO Pins
' -------------------------------------------------------------------------
Sio VAR RA.0 ' pull-up via 4.7K
LEDs VAR RB ' 7-segment display
TRIS_LEDs VAR TRIS_B
' -------------------------------------------------------------------------
' Constants
' -------------------------------------------------------------------------
Baud CON "OT9600"
Dash CON %01000000
' -------------------------------------------------------------------------
' Variables
' -------------------------------------------------------------------------
serByte VAR Byte ' serial I/O byte
tmpB1 VAR Byte ' parameter
' =========================================================================
PROGRAM Start
' =========================================================================
' -------------------------------------------------------------------------
' Subroutine Declarations
' -------------------------------------------------------------------------
RX_BYTE SUB 0 ' receive serial byte
MAKE_DIGIT SUB 1 ' make 7-segs digit
' -------------------------------------------------------------------------
' Program Code
' -------------------------------------------------------------------------
Start:
PLP_A = %0001 ' pull up unused pins
PLP_C = %00000000
LEDs = %00000000 ' clear display
TRIS_Leds = %00000000 ' make port pins outputs
Main: ' wait for header
serByte = RX_BYTE
IF serByte <> "!" THEN Main
serByte = RX_BYTE
IF serByte <> "L" THEN Main
serByte = RX_BYTE
IF serByte <> "E" THEN Main
serByte = RX_BYTE
IF serByte <> "D" THEN Main
Check_Hex:
serByte = RX_BYTE
IF serByte = "H" THEN ' hex display?
serByte = RX_BYTE ' get value
LEDs = MAKE_DIGIT serByte
GOTO Main
ENDIF
Check_Segments:
IF serByte = "S" THEN ' segments display?
LEDs = RX_BYTE ' get segments
GOTO Main
ENDIF
Check_X: ' add features here
' for future use
GOTO Main
' -------------------------------------------------------------------------
' Subroutine Code
' -------------------------------------------------------------------------
' Use: rxInput = RX_BYTE
' -- reads byte from serial input and places it in 'rxInput'
RX_BYTE:
SERIN Sio, Baud, tmpB1 ' receive a byte
RETURN tmpB1
' -------------------------------------------------------------------------
' Use: destination = MAKE_DIGIT value
' -- converts number in 'value' to 7-segment digit pattern
' and places it in 'destination'
MAKE_DIGIT:
tmpB1 = __PARAM1 ' copy value
IF tmpB1 <= $F THEN ' check range
READ SegMap + tmpB1, tmpB1 ' read table value
ELSE
tmpB1 = Dash ' display dash
ENDIF
RETURN tmpB1
' =========================================================================
' User Data
' =========================================================================
SegMap: ' segments maps
' .gfedcba
DATA %00111111 ' 0
DATA %00000110 ' 1
DATA %01011011 ' 2
DATA %01001111 ' 3
DATA %01100110 ' 4
DATA %01101101 ' 5
DATA %01111101 ' 6
DATA %00000111 ' 7
DATA %01111111 ' 8
DATA %01100111 ' 9
DATA %01110111 ' A
DATA %01111100 ' b
DATA %00111001 ' C
DATA %01011110 ' d
DATA %01111001 ' E
DATA %01110001 ' F
The following BASIC Stamp 2 program can be used to to demonstrate the LED display.
' {$STAMP BS2}
' {$PBASIC 2.5}
' -----[ Program Description ]---------------------------------------------
'
' Test program for SERIN.SXB
' -----[ I/O Definitions ]-------------------------------------------------
Sio PIN 15
' -----[ Constants ]-------------------------------------------------------
#SELECT $STAMP
#CASE BS2, BS2E, BS2PE
T1200 CON 813
T2400 CON 396
T4800 CON 188
T9600 CON 84
T19K2 CON 32
TMidi CON 12
T38K4 CON 6
#CASE BS2SX, BS2P
T1200 CON 2063
T2400 CON 1021
T4800 CON 500
T9600 CON 240
T19K2 CON 110
TMidi CON 60
T38K4 CON 45
#CASE BS2PX
T1200 CON 3313
T2400 CON 1646
T4800 CON 813
T9600 CON 396
T19K2 CON 188
TMidi CON 108
T38K4 CON 84
#ENDSELECT
SevenBit CON $2000
Inverted CON $4000
Open CON $8000
Baud CON Open + T9600
' -----[ Variables ]-------------------------------------------------------
idx VAR Nib
segments VAR Byte
value VAR Nib
' -----[ Program Code ]----------------------------------------------------
Main:
DO
FOR idx = 0 TO 5
segments = (1 << idx)
SEROUT Sio, Baud, ["!LEDS", segments]
PAUSE 50
NEXT
SEROUT Sio, Baud, ["!LEDH", value]
PAUSE 500
value = value + 1 // 16
LOOP
END