mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Integer Variable Zerlegen


Autor: Maurice (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: ozo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, auch wahr
oder vielleicht oktal? :-)

Autor: Maurice (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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^^

Autor: ozo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ozo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten S. (whitenoise)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten S. (whitenoise)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..in was progrmmierst du denn, c, basic!?

Autor: Maurice (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Maurice (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>goto schleife

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

goto schleife ist doch der Bascic-Klassiker

Autor: Maurice (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist bascom basic :-)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
toll-erant. :)  Hier hätte der beliebte Schreibfehler seine 
Berechtigung.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.