int vari auf Port schreiben

#3315390
Lesenswert?

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
#3315426
Lesenswert?

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.
OP #3315449
Lesenswert?

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
#3315467
Lesenswert?

> 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.
OP #3315542
Lesenswert?

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.
#3315718
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren