mikrocontroller.net

Forum: Compiler & IDEs H und L Byte in ein Integer umwandeln


Autor: Michael J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich benutze einen ATMega8 und den GCC.
Jetzt möchte ich den 16 Bit Zählerstand ( H und L Byte) in ein Integer
Wert umwandeln.
Welche Möglichkeiten habe ich und welche ist die beste ?

Die Suchfunktion hat mir leider nicht weitergeholfen.

mit freundlichen Grüßen

Michael

Autor: Eugen Dischke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int v
char valh
char vall

v=0;
v = v | (valh<<8);
v = v | vall;
so in der art müsste es sein
MfG
eugen dischke

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder einfach gar nicht erst den H- und L-Wert separat auslesen,
sondern stattdessen gleich das 16-bit Pseudoregister:

mycnt = TCNT1;

Autor: Michael J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,

ich wußte gar nicht, das es ein 16 bit Pseudoregister gibt.
Im Atmel Datenblatt steht unter der Registerzusammenfassung nichts.
Ist es ein echtes Register,das im AVR vorhanden ist, oder ist es
eine spezielle GCC Funktion ?

Die Lösung ist natürlich besser, denn wenn sich zwischen dem einlesen
der beiden Bytes durch einen Übertrag auf einem der beiden Bytes was
ändert, dann stimmt der gesamte Wert natürlich nicht mehr.
(Wenn der Timer weiterläuft).


Michael

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist eine avr-libc/avr-gcc Implementierung.  Daher auch
,,Pseudoregister'', physisch wird das natürlich in zwei 8-bit
Registerzugriffe umgesetzt, anders geht's ja gar nicht.

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und für die die gerne rechnen und nicht mit Bits schieben, das gleiche
wie oben:

v = valh * 256 + vall;

Autor: Roger Koller (roschee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In welcher Library finde ich die Funktion mycnt


Gruss

Roger

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Roger Koller wrote:
> In welcher Library finde ich die Funktion mycnt

Soll das ein Aprilscherz sein?

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Roger Koller wrote:
> In welcher Library finde ich die Funktion mycnt

Der war echt gut. schenkelklopf

Autor: Roger Koller (roschee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich nicht.

Ich wollte diesen Ausdruck mycnt = TCNT1; bei mir als Variable 
definieren,
aber leider kennt der Compiler diesen Ausdruck nicht.
Ich wollte auch nur den 16bit Timer Zustand einfach so wie oben 
beschrieben uebernehmen und Ihn nicht einzeln zusammenbauen wie
z.B. Timer_Gesamt=((TCNT1H*256)+TCNT1L);


Gruss

Roger

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht nur auf dem myAVR (sagt ja der Name)!
Wenn du ein STK500 hast => Pech !

Autor: Roger Koller (roschee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch gut, ich habe einen STK500.

Habe also am 1. April Pech gehabt,
aber ich kann ja die Funktion wie oben zusammensetzten.


Gruss

Roger

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Scherz bei Seite, Link zur Seite:

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

gruß hans

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.