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


von Tobias R. (wildcard)


Angehängte Dateien:

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

von Tobias R. (wildcard)


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

von Rolf Magnus (Gast)


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.

von Andi K. (Gast)


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

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.