Esto es una explicación del código para el control de flujo que se me ocurrió para conseguir mi 2(BS2) Basic Stamp hablando con mi 1(BS1) de Basic Stamp. Estoy mostrando los lazos principales solamente. El código de archivos miran letsmakerobots.com y aquí. Archivos o un archivo zip.
En mi código utilizo un montón de bits. Mayoría de los procesadores permite el acceso a los Bits de un Byte o una palabra para usar como variables regulares. Basic Stamp 1 y mayoría de los procesadores Picaxe ha definido nombres de variable de los pedacitos de primera pocos bytes de memoria. Generalmente es Bit0-Bit7 o Bit0-B15 o Bit0-Bit31 para definir una variable. En ambos de estos procesadores la variable de Bits también pueden ser en otra variable. Como mis luces Byte B0 los Bits son las variables Bit0-7 que son lit1, lit8 las luces individuales. Esto hace pruebas de manera fácil. "Si lit1 = 1 then litOn" es simple.
El Basic Stamp 2 y procesadores como él utilizan subscripting definido para acceder a los Bits, Nibbles y Bytes de una variable. Mis luces individuales son las variables "luces. Bit0 - Bit7 ". En la prueba de una variable es "si lghts. Bit0 = 1 then litOn ". El ajuste es "litTmp = luces. Bit0 ". Generalmente los subíndices no pueden ser una variable. Buscar en los archivos de programa en el artículo EasyLights. Lea su manual.
Me fijo tanto como pude. El BS1 no serial hacia fuera muy bien. Es estable y funciona como cualquier simple botón en un sistema como este. El BS1 no pedacitos muy bien tampoco.
Mi control de flujo es la única forma que conseguí estos sistemas para comunicarse.
Serán mis comentarios de texto / / en este artículo. En el código de Basic Stamp la ' es un comentario.
Fragmento de código de Basic Stamp 2.
JP6:
' Basic Stamp 1 proyecto board(BS1Pj1)
' Mensaje entrante
slv1In = 0
BAJO sTx ' mensaje reconoce
PAUSA 6
Conducir en pausa
SERIN slvRx, 396, 350, err1, [slv1Stat, tmp1]
Error serial tiempo de esperar y el controlador de errores
PAUSA 3
ALTA sTx
' El BS1 no serial muy bien.
IF slv1Stat = 10 entonces jp7
IF slv1Stat = 20 entonces jp9
No me sale nada pero errores???
errSlv1 = 0
slv1btn2 = 0
GOTO jp2
Err1:
"Error Stat", DEC slv1Stat, de depuración ", B", BIN slv1Stat, CR
DEBUG "tmp de Error", DEC tmp1, ", B", BIN tmp1, CR
IF slv1Stat = 10 entonces jp7
IF slv1Stat = 20 entonces jp9
errSlv1 = 1
slv1btn2 = 0
GOTO jp2
JP9:
' Trabajo en progreso
DEBUG "Btn2", DEC slv1Stat, ", B", BIN slv1Stat, CR
slv1btn2 = 1
GOTO jp2
jp7:
binSet = 1
ranSet = 1
larset = 1
rMode = rMode + 1
IF rMode < 4 luego jp2
rMode = 1
' Sección de transmitir
JP2:
SRx IF = 0 entonces slv1In = 1 ' controles para mensajes
IF pRx = 0 entonces mstIN = 1 ' controles para mensajes
IF litSet = 1 entonces jp3
IF mastSet = 1 entonces jp4
' BS1Pj1 sólo puede obtener 1 hit en 10 veces
cnt2 = cnt2 + 1
SRx IF = 0 entonces slv1In = 1
IF cnt2 < 10 entonces jp1
cnt2 = 1
' Control para EasyLights en BS2Pj1
JP4:
Seleccione rMode
CASO 1
GOSUB doLarson
CASO 2
GOSUB doBinNum
CASO 3
GOSUB doRandom
ENDSELECT
' Envía el byte de luces a BS1Pj1 para la exhibición
BAJO lit1
BAJO sTx ' señales de mensaje listo
PAUSA 80 ' para BS1Pj1
SEROUT slvTx, 396, [BS1Pj1, luces]
PAUSA DE 40
ALTA sTx
ALTA lit1
litSet = 1
……………………………………………
Código básico de sello 1
runIt: ' botones de uno en uno
IF BS1Stat > 0 entonces funcionaría2
IF pBtn1 = 0 entonces bt2
BS1Stat = 10
GOTO bt3
BT2:
IF pBtn2 = 0 entonces funcionaría2
BS1Stat = 20
BT3:
tmp1 = 66
pTx = litOff
run1: ' mensaje de botón de enviar
PAUSA 1 ' espere maestro bajar su Tx
PRx IF = 1 entonces run1
SEROUT pinTx, T2400, (tmp1, BS1Stat)
PAUSA 1
pTx = litOn
GOTO jp1
funcionaría2:
PRx IF = 1 entonces jp1 ' comprobar mensaje
SERIN pinRx, T2400, mCmd, tmp1
PAUSA 3
IF mCmd <> BS1Pj1 luego jp1 "Compruebe la dirección correcta
luces = tmp1
' Hacer luces en EasyLights