www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik adc - adch & adcl auslesen


Autor: Tobias R. (wildcard)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
habe etwas gesucht aber nix zu meinem anfänger problem gefunden.

Ich möchte adcl und adch auslesen.

       in 0x04, r16  ;ADCL - LOW Byte Result
       in 0x05, r17

oder
       in ADCL, r16  ;ADCL - LOW Byte Result
       in ADCH, r17

Building project...
AVRASM: AVR macro assembler 2.0.28 (build 121 Jan 11 2005 10:28:51)
Copyright (C) 1995-2005 ATMEL Corporation
C:\Dokumente und Einstellungen\Tobias Rohde\1sttest\1sttest.asm(1):
Including file 'e:\Programme\Atmel\AVR
Tools\AvrAssembler2\Appnotes\4433def.inc'
C:\Dokumente und Einstellungen\Tobias
Rohde\1sttest\1sttest.asm(29): error: Invalid register
C:\Dokumente und Einstellungen\Tobias
Rohde\1sttest\1sttest.asm(30): error: Invalid register
Assembly failed, 2 errors, 0 warnings


1) Was stimmt nicht beim Auslesen von adch & low?
2) Was bedeutet in der doku der io register, die adresse in Klammern
z.B. beim mega8 für das adch 0x05 (0x25) ?

Autor: Tobias R. (wildcard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) hab beim in befehl die reihenfolge der registert vertauscht. hätte
die bezeichnung als anfänger genau andersrum gemacht von in&out...

2) ?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 1) hab beim in befehl die reihenfolge der registert vertauscht.
> hätte die bezeichnung als anfänger genau andersrum gemacht von
> in&out...

Wieso? Immer zuerst Ziel dann Quelle. Ist bei jedem anderen ASM-Befehl
mit zwei Operanden genauso, und letzendlich auch in C
(x = y;).

> 2) Was bedeutet in der doku der io register, die adresse in
> Klammern z.B. beim mega8 für das adch 0x05 (0x25)

Das scheinen mir die Memory-Mapped-Adressen zu sein, die sind nämlich
immer um 0x20 höher, da sie auf die 32 normalen Register folgen.
Du solltest aber am besten eh immer nur die Namen verwenden, nicht die
direkten Adressen, da diese sich zwischen den verschiednen Controllern
unterscheiden können.

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Wie Du wohl schon festgestellt hast, zuerst Ziel, dann Quelle.
   Bei "IN" ist Zier ein Register und die I/O-Adresse die Quelle.
   Also "IN r16,ADCL" und "IN r17,ADCH".
2) Die I/O-Adressen für die Peripherie beginnt bei Adresse 32 (0x20).
   Von Adresse 0 bis 31 (0x1F) sind die 32 Register, danach kommen
   ab Adresse 0x20 die I/O-Register des Controllers.
   Im Befehl IN und OUT kann man nur 32 Adressen ansteuern.
   Die Adresse 0 im IN- oder OUT-Befehl ist die "echte" Adresse
0x20.
   Man kann auch mit LDS und STS oder LD(D) oder ST(D) auf die I/O-
   Register zugreifen, nur muß man dann die echte Adresse in Klammern
   angeben.

MfG
Andi

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.