Wie kann ich in C eine int variable in der ein 8bit binärcode steht auf einen Port schreiben? Einfach int intvari = 01001001; PORTA=intvari; ?
Peter Naschke schrieb: > Wie kann ich in C eine int variable in der ein 8bit binärcode steht auf > einen Port schreiben? > > Einfach > int intvari = 01001001; > PORTA=intvari; ? Jep. Bei so einfachen Dingen kann man das ruhig auch selber ausprobieren.
Justus Skorps schrieb: > Karl Heinz Buchegger schrieb: >> Jep. > > ernsthaft? rausschreiben kann er es. Ob dann auch das von ihm erwartete Binärmuster aufscheint, ist eine andere Frage. Denn 01001001 ist ja eine Oktalzahl.
Also wird das nicht klappen? Ich brauche genau das Bitmuster am Port was eingelesen wurde
du wirst schon ein Muster bekommen, aber eben nicht das erwartete...
Peter Naschke schrieb: > Also wird das nicht klappen? Solange du hier rumdebatierst und nicht selber programmierst, wird es ganz sicher nicht klappen. Das ist wie Radfahren: du musst es selber machen, um es zu lernen. Du musst ja nicht 01001001 ausgeben. Gib halt erst mal einfach nur 1 aus. Und dann 2. Dann 3 etc. Dann vielleicht in einer SChleife alle Zahlen von 0 bis 255 (mit einer kleinen Pause dazwischen). Dann ... denkst du dir vielleicht selber noch andere Muster aus. Wie ist das zb. wenn du in Folge die Zahlen 1, 2, 4, 8, 16 (also immer das Doppelte) ... bis 128 ausgibst? Und irgendwann wirst du auch draufkommen, dass man Binärzahlen in AVR-GCC C in der Schreibweise mit einem 0b... schreibt. 0b01001001 ist etwas anderes als 01001001 und das ist wiederrum etwas anders als 1001001
Also nehme ich eine char variable in der ich 0b schreibe und hänge die binärfolge hinten dran und schreibe das dann auf den PortA Zahlensysteme sind mir sehr wohl geläufig auch umrechnungen. Mir ging es eher darum ob des eine deklaration für binärvariablen gibt?
Peter Naschke schrieb: > Also nehme ich eine char variable in der ich 0b schreibe und hänge die > binärfolge hinten dran und schreibe das dann auf den PortA > > Zahlensysteme sind mir sehr wohl geläufig auch umrechnungen. Mir ging es > eher darum ob des eine deklaration für binärvariablen gibt? Psst. Es gibt keine "Binärvariablen". In einem Computer ist alles binär.
1 | unsigned char c; |
2 | |
3 | c = 0x41; |
4 | c = 'A'; |
5 | c = 65; |
6 | c = 0101; |
7 | c = 0b01000001; |
alle Zuweisungen machen exakt das gleiche. In c wird das Bitmuster 01000001 abgelegt. Das Bitmuster wird auf der linken Seite durch unterschiedliche Schreibweisen angegeben. Aber es ist immer das gleiche Bitmuster - nur die Schreibweise im Programm ist eine andere. Welche Schreibweise man wählt, hängt davon ab, welche für den jeweiligen Zweck die zweckmässigste ist.
Hmm ne das geht auch nicht wirklich, gibs denn irgendwas ind er folgenden richtung (auf meinem vorherigen beitrag bezogen) PORTA=(0b+intvari); ?
Karl Heinz Buchegger schrieb: > 01000001 abgelegt. Das Bitmuster wird auf der linken Seite durch > ****** Das 'andere links' natürlich. rechte Seite ... der Zuweisung. Sorry for that.
naja ich deklariere ja nichts, ich bekomme den wert über die uart rein und er ist immer 8bit breit. Deshalb weiß ich nicht wie ich nun den wert als binär auf dem Port bekomme. Und durchs googlen findet man auch irgendwie nichts wirkliches also müsste ich dann doch char c[10] char c[0]=0; char c[1]=b; und jetzt kommt mein problem in der uart steht der 8bit breite block. Was passiert wenn ich sage char c[2]=intvari; ? legt er mir die dann vernünftig auf die stellen ab oder schreibt er nur die erste stelle rein Sollte er sie vernünftig ablegen habe ich am ende aber doch an der stelle c[10] folgendes /0 also kann ich das so auch nicht auf dne Port schreiben
Peter Naschke schrieb: > naja ich deklariere ja nichts, ich bekomme den wert über die uart rein > und er ist immer 8bit breit. Holla! Wie kommt da jetzt die UART ins Spiel? > ich bekomme den wert über die uart rein nämlich wie genau? (in Codeform)
> habe ich am ende aber doch an der stelle c[10] folgendes /0
Das heißt: Du hast gar keinen Wert im Sinne einer numerischen Zahl,
sondern du hast einen String?
Warum sagst du das nicht einfach gleich, sondern stammelst da rum, wie
eine Oma, die vorher noch nie einen Computer gesehen hat?
Also wirst du dir den String dann eben mal zuerst in einen
entsprechenden numerischen Wert umwandeln müssen. Und den kann man dann
auch ausgeben.
Das Problem war von Nfanag an gelösst, die haben bloß gewartet das ich die Idee teste :D PORTA=intvari; <-- funktioniert :D
Peter Naschke schrieb: > PORTA=intvari; <-- funktioniert du willst jetzt aber nicht behaupten, dass du mit int intvari = 01001001; PORTA=intvari; die Pins 0, 3 und 6 auf HIGH bekommst, oder?
Um das mal aufzuklären, ich habe über Hterm in Binär 00001110 gesendet und auf intvari geschrieben. danach PORTB=intvari geschrieben und alle 3 leds sind an gegangen. Die Frage ist was Hterm genau in die Variable schreibt, wenn man auf Binär senden schaltet. Aber da es Int ist, kann doch kein 0b00001110 drin stehen.
Peter Naschke schrieb: > Die Frage ist was Hterm genau in die Variable schreibt, gar nix. Hterm schickt die Sachen über die serielle Leitung, was dann im µC passiert hängt nur vom dortigen Programm ab...
Wie hast du denn HTerm eingestellt? Sendest du die Zeichenfolge als ASCII, Hex, Dec, oder Bin?
Peter Naschke schrieb: > Die Frage ist was Hterm genau in die Variable schreibt, wenn man auf > Binär senden schaltet. Aber da es Int ist, kann doch kein 0b00001110 > drin stehen. HTerm schreibt überhaupt nichts 'in die Variable' Wenn HTerm auf binär geschaltet ist, dann nimmt es den String aus der Eingabe, fasst den als Binärzahl auf, baut ein entsprechendes Byte zusammen und verschickt das als Byte über die Leitung. Was dein Programm dann mit dem erhaltenen Byte macht, zb in einem int speichern, ist Sache deines Programms und a) geht HTerm nichts an b) liegt ausserhalb des Einflussbereichs von HTerm Für HTerm endet die Welt damit, dass es ein Byte verschickt hat.
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.