BS2 --> jämföra tal

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

BS2 --> jämföra tal

Inlägg av squiz3r »

Hej, jag håller på o labba lite med min sumo robot som styrs av en BS2 och en PIC. Mit problem är att jag har 8 "separata" byte på BS2'an varje byte är (såklart) antingen 1 eller 0. Jag vill göra så att om variabel1 = 1 och variabel2 = 0 och variabel3 = 0 osv så ska den gå till en label. Hur gör jag lttast det? Hade det varit en PIC hadde man ju kunnat ta hela variablen som byte'an ligger i o jämfört men kan man det på en bs2? När jag ställer in byte'arna skriver jag ju "XXX VAR byte".

//Daniel A
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Ingen som vet? Eller har jag beskrivit otydligt??

//Daniel A
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Vad ska man säga? Där har du en av "fördelarna" av att köra BASIC...

Men OK, kan du inte lägga in att du har en byte håller värdet och de bits du vill ha in motsvarar de enstaka bits i den byte är det bara kvar:
if(variabel1 = 0) and (variabel2 = 1) .... then .... endif.

En möjlig lösning kan vara att de enstaka bits i samma byte används:
om du istället för den avkänning som sätter >variabel1< till 1 eller 0 använder att den OR'a med ett binärt värde (1,2,4,8,16,32,64,128) när bitten ska settas och AND'ar med 255-detbinärevärde när den bit ska nollas.

Alltså:
Setta biten: MinVariabel = MinVariabel OR 128
Nolla bitten: MinVariabel = MinVariabel AND (255 - 128)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Mit problem är att jag har 8 "separata" byte på BS2'an varje byte är (såklart) antingen 1 eller 0.

Varför "såklart" ?? Kan dessa "variabler" enbart vara "0" eller "1" ?
I så fall är de mer som "flaggor" och behöver inte en hel byte. En enda bit i ett register räcker.
Men det kanske bli knöligt i Basic...

> Jag vill göra så att om variabel1 = 1 och variabel2 = 0 och variabel3 = 0

Men annars är det väl bara att köra en IF som Icecap sa, eller ??
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Inlägg av BEEP »

Jag skummade genom manualen och det verkar finnas stöd för bithantering så skriv bitarna direkt till en variabel istället för att bråka med 8 st variabler.

BASIC Stamp Syntax and Reference Manual 2.1
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jag menade bit, inte byte :oops: Jag får kolla igenom manualen igen, jag trodde inte att man kunde ha som på en PIC att man hanterar varje bit för sig själv i en byte.

Men jag får testa som Icecap skrev.

//Daniel A
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Ok, Nu har jag läst data blade en gång till mycket noga.
Om jag skriver:

Kod: Markera allt

databits        var  byte
databit1   var  databits.bit1
osv...


databit1 = 1
databit2 = 1
databit3 = 1
databit4 = 0
databit5 = 0
databit6 = 0
databit7 = 0
databit8 = 1

så kan jag läsa av att databits = dec 135. om jag skriver in det på kalkulatorn (i datorn) ska jag väll börja med bit8 :?:

Edit: Nej!! Det blir väll dec 225 ?? jag börjar väll med bit 0 ??!!!

//Daniel A
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

1x128 + 1x4 + 1x2 + 1 = 135 (decimalt).

Och det är inte "bit0" -> "bit7" !?
Bara som en dubbelkoll...
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jo :oops: Det var förstås bit0-bit7. Jag är bara lite virig nu...

>1x128 + 1x4 + 1x2 + 1 = 135 (decimalt).
:?: :?: :?:

Tack!
//Daniel A
Användarvisningsbild
Limen
EF Sponsor
Inlägg: 1195
Blev medlem: 23 november 2006, 18:34:28
Ort: En bit utanför Karlstad

Inlägg av Limen »

squiz3r >> 1x128 + 1x4 + 1x2 + 1 = 135 (decimalt).

bit 7 har positionsvärde 128, bit 2 har positionsvärde 4, bit 1 har positionsvärde 2 och bit 0 har positionsvärde 1. 128+4+2+1=135
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Aha! Då förstår jag :)

Tack!
//Daniel A
Skriv svar