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) ?
1) hab beim in befehl die reihenfolge der registert vertauscht. hätte die bezeichnung als anfänger genau andersrum gemacht von in&out... 2) ?
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.