Forum: Mikrocontroller und Digitale Elektronik int vari auf Port schreiben


von Peter N. (jackybroun)


Lesenswert?

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; ?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Justus S. (jussa)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Jep.

ernsthaft?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Peter N. (jackybroun)


Lesenswert?

Also wird das nicht klappen? Ich brauche genau das Bitmuster am Port was 
eingelesen wurde

von Justus S. (jussa)


Lesenswert?

du wirst schon ein Muster bekommen, aber eben nicht das erwartete...

von Karl H. (kbuchegg)


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

von Peter N. (jackybroun)


Lesenswert?

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?

von Karl H. (kbuchegg)


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.

von Peter N. (jackybroun)


Lesenswert?

Hmm ne das geht auch nicht wirklich, gibs denn irgendwas ind er 
folgenden richtung (auf meinem vorherigen beitrag bezogen)

PORTA=(0b+intvari); ?

von rava (Gast)


Lesenswert?

PORTA = c;

wenn c so wie oben vorgeschlagen deklariert wurde.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Peter N. (jackybroun)


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

von rava (Gast)


Lesenswert?

PORTA = intvari;


magst du's nicht endlich mal ausprobieren?

von Karl H. (kbuchegg)


Lesenswert?

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)

von Karl H. (kbuchegg)


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.

von Peter N. (jackybroun)


Lesenswert?

Das Problem war von Nfanag an gelösst, die haben bloß gewartet das ich 
die Idee teste :D

PORTA=intvari;  <-- funktioniert

:D

von Justus S. (jussa)


Lesenswert?

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?

von Peter N. (jackybroun)


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.

von Justus S. (jussa)


Lesenswert?

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...

von Christian B. (chbalnuweit)


Lesenswert?

Wie hast du denn HTerm eingestellt?
Sendest du die Zeichenfolge als ASCII, Hex, Dec, oder Bin?

von Karl H. (kbuchegg)


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.

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
Noch kein Account? Hier anmelden.