Ok danke, ja hatte vergessen zu erwähnen das ich nur Werte bis 255 erwarte in der Variable.
Werde in einem auch den Datentyp bei der initalisierung auf uint8_t ändern.
Also kurz gefasst:
PORTA = var; // var vom typ uint8_t
Ok danke, ja hatte vergessen zu erwähnen das ich nur Werte bis 255 erwarte in der Variable.
Werde in einem auch den Datentyp bei der initalisierung auf uint8_t ändern.
Also kurz gefasst:
PORTA = var; // var vom typ uint8_t
Was bezweckst Du damit? WENN Dir so ohne weiteres klar ist, dass 150dez gleich 0b10010110 ist, dann macht das meiner Meinung nach einen (Teil-) Sinn. Teil deshalb weil es wohl nur sinnig ist, wenn der Port mit diesen Daten auch was anfangen kann. Wenn der Port komplett als Ausgang konfiguriert ist - DDRA = 0b11111111 - dann gehen bei "150" die Bits 7, 4, 2 und 1 an (auf high)... Werde .. den Datentyp bei der initalisierung auf uint8_t ändern .. PORTA = var; // var vom typ uint8_t
.. z.B: int a = 150; einem Ausgang zuweisen ..
Das Vorgehen dürfte also wohl nur dann sinnvoll sein, in denen der Port komplett als Ausgang konfiguriert ist, siehe oben. Denn der Sinn die Pullups wahlweise komplex zu setzten oder zu löschen ist für mich nicht wirklich einsichtig. Ich selbst operiere mit kompletten Ports nur in der binären Form - weil ich zu dämlich bin das Bitmuster von Dezimalzahlen mir ohne Hilfe vorstellen zu können. Einzelne Bits schalte ich in der üblichen Weise.
Ausnahme: Bei meiner PingPongPlatine, 120 LEDs auf einer Karte, schalte ich mitunter auch schon mal "im Prinzip" mit ner 38015 einige >bestimmte< LEDs ein. (Im Prinzip, weil das über ein Schieberegister geschieht).
Ciao sagt der JoeamBerg
Ja, der Port ist komplett als Ausgang konfiguriert.
Ich erhalte per UART bestimtme Werte von 0-255, die ich nicht als Zahl sondern als Bit-muster für die Ausgänge deute.
Der Post hier ist schon alt, ich antworte jedoch trotzdem, falls jemand es doch brauchen sollte.
Dann nimm doch einen cast-Operator, sowie botty es sagte. Stichwort "implizite Datentypkonvertierung". Heißt also eine "gewaltsame" Konvertierung von einem größeren Datentyp (uint16_t) zu einem kleineren (uint8_t).
Dann werden nur die niedrigsten 8 Bits der uint16_t - Variable in das Portregister eingetragen.
Code:uint8_t LowByte; uint16_t DualByte; // hier folgt die Zuweisung der 16-Bit-Variable // Bei einer impliziten Datentypkonvertierung findet kein Runden etc. statt, // lediglich ein "Abschneiden" der höheren 8 Bits. Die niedrigen 8 Bits werden // der 8-bit-Variable zugewiesen LowByte = (uint8_t) DualByte;
Lesezeichen