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...
meinst du mit portb1 wirklich portb1 oder portb0? Falls wirklich portb1: portb = wert << 1L; Falls portb0: portb = wert;
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?
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^^
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.
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.
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
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 ;-)
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??
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 ;-)
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.
>goto schleife >..in was progrmmierst du denn, c, basic!? goto schleife ist doch der Bascic-Klassiker
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.