Forum: Mikrocontroller und Digitale Elektronik Integer Variable Zerlegen


von Maurice (Gast)


Lesenswert?

Hab mal eine Frage...

Ich habe eine Zahl in einer Integer Variable gespeichert:

100111

jetzt möchte ich folgendes:

wenn der wert

0000001 ist dann port b1=1 alle anderen aus

0000011 ist dann portb1=1 und portb.2=1 alle anderen aus

0001001 port b1=1 und portb4=1 alle anderen aus


wie kann ich das realisieren? hoffe versteht was ich meine würde integer 
einfach zerlegen in jede einzelne zifer dann weiss ich welscher port an 
und welscher aus muss aber weiss ja nicht ob das geht...

von Klaus W. (mfgkw)


Lesenswert?

meinst du mit portb1 wirklich portb1 oder portb0?
Falls wirklich portb1: portb = wert << 1L;
Falls portb0: portb = wert;

von ozo (Gast)


Lesenswert?

Moment, reden wir hier von der Binärdarstellung einer Zahl oder bewegen 
wir uns im Dezimalsystem.
Meint beispielweise 0000101 bei dir fünf oder einhunderteins?

von Klaus W. (mfgkw)


Lesenswert?

hm, auch wahr
oder vielleicht oktal? :-)

von Maurice (Gast)


Lesenswert?

also ich lasse eine zahl hochzählen


schleife:
dim test as integer
test=test+1

goto schleife

jetzt müsste er doch so hochzählen oder?

1
10
11
100
101
110
111

usw...

eben bínär

jetzt habe ich 6 ports portc.0 bis portc.5

wenn test=1 portc.0=1 alles andere aus
wenn test=10 dann portc.1=1 alles andere aus
wenn test=11 dann portc.1=1 portc.0=1

usw...

hoffe versteht was ich meine^^

von ozo (Gast)


Lesenswert?

Naja, das Zerlegen in "Ziffern" hat mich irgendwie stutzig gemacht. Und 
das es sieben Bits sind.
Wenns binär ist dann halt wie von dir vorgeschlagen schieben und auf den 
ganzen Port raus.

von ozo (Gast)


Lesenswert?

Huch? Jetzt willst du dann doch mit Portc.0 anfangen? Ist doch 
wunderbar, dann kannst du dir das schieben sparen und es direkt auf den 
Port rausschreiben.

von Thorsten S. (whitenoise)


Lesenswert?

Hi,

du hast
port b1=1
portb1=1
portb.2=1
port b1=1
portb4=1

zig verschiedene Schreibweisen, was du meinst weißt nur du.

warum legst du einen Integer an, wenn du nur 5,6 Bits brauchst?

klassisch fängt man bei Portb0 an, und nicht bei 1.

portb=intvar&0xFF; //wenn du die unteren 8 Bit direkt auf den Portb 
kopiert haben willst

portb=((intvar<<1)&0xFE)|(portb&0x01); //wenn das unterste bit aus der 
Integer Variablen auf Portb1 liegen soll, geht dann bis Portb7.

Thorsten

von Thorsten S. (whitenoise)


Lesenswert?

..in was progrmmierst du denn, c, basic!?

von Maurice (Gast)


Lesenswert?

danke mit den beitrag von klaus habe ich es hinbekommen ;-)

habe jetzt also so gemacht:

dim test as integer
test=0

schleife:
test=test+1
if test=111111 then test=0
portc=test
waitms 1000
goto schleife

klappt wundewrbar ;-)

von Maurice (Gast)


Lesenswert?

nur eine kleine frage habe ich noch, wie kann man schieben? also wenn 
ich sagen wir nicht port 0-5 belegt habe sondern 1-5 z.b??

von Klaus W. (mfgkw)


Lesenswert?

Maurice schrieb:
> danke mit den beitrag von klaus habe ich es hinbekommen ;-)
>
> habe jetzt also so gemacht:
>
> dim test as integer
> test=0
>
> schleife:
> test=test+1
> if test=111111 then test=0

Das testet aber auf die Dezimalzahl 111111, nicht auf das Bitmuster 
111111.


> portc=test
> waitms 1000
> goto schleife
>
> klappt wundewrbar ;-)

von Klaus W. (mfgkw)


Lesenswert?

Maurice schrieb:
> nur eine kleine frage habe ich noch, wie kann man schieben? also wenn
> ich sagen wir nicht port 0-5 belegt habe sondern 1-5 z.b??

ich kenne dein BASIC nicht (weiß nicht mal welches es ist).

Mal die Doku lesen? Stichwort "um eine Stelle nach links schieben",
oder "bit shiften" o.s.ä.

Notfalls geht auch multiplizieren mit 2, aber sowas sagt man nicht 
öffentlich.

von Walter (Gast)


Lesenswert?

>goto schleife

>..in was progrmmierst du denn, c, basic!?

goto schleife ist doch der Bascic-Klassiker

von Maurice (Gast)


Lesenswert?

ist bascom basic :-)

von Hc Z. (mizch)


Lesenswert?

Wass'n das fürne Sprache?

Sie akzeptiert

> dim test as integer

Ich nehme an, das meint 16 Bit.  Wieso schmeißt dann

> if test=111111 [..]

keinen Fehler, obwohl gegen eine Zahl verglichen wird, die da nie rein 
passt?

Ach so, Basic.

von avr (Gast)


Lesenswert?

Klar das es läuft:
 nach 111111b -> LED 0-5 an kommt 1000000b -> LED 0-5 aus

Das nicht Zurückgesetzt wird stört nicht. Auch Integerüberlauf
bei 65535 -> 0 zeigt keine Störung.

Das nenne ich Fehlertolerant ;)

avr

von Hc Z. (mizch)


Lesenswert?

toll-erant. :)  Hier hätte der beliebte Schreibfehler seine 
Berechtigung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.