Dit is een verklaring van de code voor de datatransportbesturing die ik kwam met het te krijgen van mijn 2(BS2) van de Basic Stamp praten met mijn 1(BS1) van de Basic Stamp. Ik ben de belangrijkste lussen alleen tonen. De code kijken bestanden letsmakerobots.com en hier. Bestanden of een zip-bestand.
In mijn code gebruik ik een heleboel bits vlaggen. De meeste processors zorgen ervoor dat toegang tot de Bits van een Byte of Word te gebruiken als gewone variabelen. Basic Stamp 1 en de meeste Picaxe processoren hebben gedefinieerde variabele namen voor de Bits van de eerste paar bytes van het geheugen. Meestal is het Bit0 – Bit7 of Bit0-B15 of Bit0-Bit31 om een variabele te bepalen. In beide van deze processors de variabele Bits ook kan in een andere variabele. Als mijn lichten Byte B0 de Bits zijn de variabelen Bit0 – 7 die lit1 – lit8 zijn de individuele lichten. Dit maakt testen van een licht eenvoudig. "Als lit1 = 1 then litOn" is eenvoudig.
De Basic Stamp 2 en de verwerkers zoals het gebruik van gedefinieerde subscripting toegang tot de Bits, Nibbles en Bytes van een variabele. Mijn persoonlijke lichten zijn de variabelen "lights. Bit0 - Bit7 ". Bij het testen van een variabele bits "als lghts. Bit0 = 1 then litOn ". Instelling is "litTmp = lichten. Bit0 ". Het subscript kunnen meestal niet een variabele. Kijk naar de programmabestanden in de EasyLights-artikel. Uw handleiding te lezen.
Mij vaste zo veel als ik kon. De BS1 doen seriële uit niet zeer goed. Het is stabiel en loopt als een simpele knop op een dergelijk systeem. De BS1 doet niet Bits zeer goed hetzij.
Mijn flow-control is de enige manier waarop die ik heb deze systemen te communiceren.
Mijn tekst commentaar zal worden / / in dit artikel. In de code van de Basic Stamp de ' is een commentaar.
Basic Stamp 2 het codefragment.
JP6:
"Basic Stamp 1 Project board(BS1Pj1)
' Inkomende bericht
slv1In = 0
LAGE sTx ' bericht erkennen
PAUZE 6
Leiden in de pauze
KANARIE slvRx, 396, 350, err1, [slv1Stat, tmp1]
Seriële fout aan hoe lang gewacht en foutafhandeling
ONDERBREKEN 3
HOGE sTx
' De BS1 seriële niet heel goed.
IF slv1Stat = 10 dan jp7
IF slv1Stat = 20 dan jp9
Ik krijg niets maar fouten???
errSlv1 = 0
slv1btn2 = 0
GOTO jp2
err1:
"Fout Stat", DEC slv1Stat, DEBUG ", B", BIN slv1Stat, CR
DEBUG "tmp fout", DEC tmp1, ", B", BIN tmp1, CR
IF slv1Stat = 10 dan jp7
IF slv1Stat = 20 dan jp9
errSlv1 = 1
slv1btn2 = 0
GOTO jp2
jp9:
' Work in progress
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 vervolgens jp2
rMode = 1
' Sectie verzenden
JP2:
Als sRx = 0 THEN slv1In = 1 ' controleert of er berichten
Als pRx = 0 THEN mstIN = 1 ' controleert of er berichten
IF litSet = 1 dan jp3
IF mastSet = 1 THEN jp4
' BS1Pj1 kan alleen maar 1 hit: 10 keer
cnt2 = cnt2 + 1
Als sRx = 0 THEN slv1In = 1
IF cnt2 < 10 vervolgens jp1
cnt2 = 1
' Besturingselement voor EasyLights op BS2Pj1
JP4:
Selecteer rMode
GEVAL 1
GOSUB doLarson
CASE 2
GOSUB doBinNum
CASE 3
GOSUB doRandom
ENDSELECT
' BS1Pj1 de lichten byte verzenden voor weergave
LAGE lit1
LAGE sTx ' signalen bericht klaar
ONDERBREKEN 80 ' voor BS1Pj1
SEROUT slvTx, 396, [BS1Pj1, lichten]
PAUZE 40
HOGE sTx
HOGE lit1
litSet = 1
……………………………………………
Basic Stamp 1-code
runIt: ' knoppen tegelijkertijd
IF BS1Stat > 0 dan run2
IF pBtn1 = 0 THEN bt2
BS1Stat = 10
GOTO bt3
BT2:
IF pBtn2 = 0 THEN run2
BS1Stat = 20
BT3:
tmp1 = 66
pTx = litOff
RUN1: ' bericht van de knop verzenden
PAUSE 1 ' wachten voor master om te verlagen zijn Tx
Als pRx = 1 dan run1
SEROUT pinTx, T2400, (tmp1, BS1Stat)
PAUSE 1
pTx = litOn
GOTO jp1
RUN2:
Als pRx = 1 dan jp1 ' bericht controleren
KANARIE pinRx, T2400, mCmd, tmp1
ONDERBREKEN 3
Als mCmd <> BS1Pj1 vervolgens jp1 ' controleren op juiste adres
verlichting = tmp1
' Doen lichten op EasyLights