Hi Leute, ich habe mir das STM32 Nucleo Borad zugelegt und möchte nun an einem Port (d0 - d15) jeweils 8 pins verwenden und an denen eine Binärzahl ausgeben. Üblicherweise liest man ja im internet, dass man mit dem Modulo operator oder durch 2 Faktor eine Dezimal zahl in eine binährzahl umwandeln kann. Ich habe das in der Hinsicht noch nicht ganz verstanden und zwar, möchte ich die Pins D8 - D15 verwenden, um meine in der Software vorher definierte Dezimalzahl, als binärzahl auszugeben. WIe mache ich das ß?
Slotti schrieb: > in der Software vorher > definierte Dezimalzahl, als binärzahl auszugeben. Intern sind alles Binärzahlen, da kann man nichts umwandeln. Wenn Du im Quelltext 99 hinschreibst, macht der Compiler 0x63 draus. Das entspricht dann 0b1100011.
:
Bearbeitet durch User
Hilft nix, wenn du auf einem µC programmieren willst, musst du dich mit binärer Logik auseinandersetzen. Arbeite das durch http://de.wikipedia.org/wiki/Logische_Verkn%C3%BCpfung und such mal nach der passenden Umsetzung in deiner Sprache. Weiß nicht, wie man bei dem Controller was setzt. Also nur Pseudo C. bspw. if ((zahl & 0x01) == 0x01) PIN8_ON; oder pin = ((zahl >> stelle) & 1); Data
uint8_t zahl = 129; //0b0000000010000001 zahl = zahl << 8; //0b1000000100000000 zahl = zahl & 0xff00 //0b10000001xxxxxxxx GPIOD -> ODR = zahl; x = ausmaskiert -> lsbs werden nicht beeinflusst
Sean Goff schrieb: > uint8_t zahl = 129; //0b0000000010000001 > zahl = zahl << 8; //0b1000000100000000 > zahl = zahl & 0xff00 //0b10000001xxxxxxxx > GPIOD -> ODR = zahl; > > > x = ausmaskiert -> lsbs werden nicht beeinflusst Doch, sie werden auf null gesetzt. GPIOD -> ODR &= ~(0xFF00); GPIOD -> ODR |= zahl; Data
D. S. schrieb: > Sean Goff schrieb: >> uint8_t zahl = 129; //0b0000000010000001 >> zahl = zahl << 8; //0b1000000100000000 >> zahl = zahl & 0xff00 //0b10000001xxxxxxxx >> GPIOD -> ODR = zahl; >> >> >> x = ausmaskiert -> lsbs werden nicht beeinflusst > > Doch, sie werden auf null gesetzt. > > GPIOD -> ODR &= ~(0xFF00); > GPIOD -> ODR |= zahl; > > > Data Ja, das war mir schon klar, hab mich falsch ausgedrückt. Besser noch währe dann aber: GPIOD -> BSRR = zahl; GPIOD -> BRR = ~zahl; Der STM hat ja schliesslich extra Register für das.
Slotti schrieb: > meine in der Software vorher definierte Dezimalzahl, als binärzahl > auszugeben. Überleg mal, wie der Controller deine Dezimalzahl intern darstellt. Das musst du dir selber erarbeiten. Das ist wichtig! Als kleiner Denkanstoss: der Controller rechnet immer binär. Nur damit du die Zahl einfacher lesen kannst, kannst du sie im Editor und Debugger auch in anderen Zahlensystemen darstellen lassen. Das geläufigste ist hier dann das Zehnersystem. Es gibt aber auch noch das Hexadezimalsystem, das für uC nicht weniger wichtig ist...
Sean Goff schrieb: > GPIOD -> BSRR = zahl; > GPIOD -> BRR = ~zahl; > > Der STM hat ja schliesslich extra Register für das. Ah cool, kenn den Controller nicht weiter. Is aber schick! Data
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.