Das Problem liegt darin wie die SFR namen definiert sind. Für C sind da die Adressen für den Zugriff als Speicher (per LDS / STS und ähnlich) angegeben. Für die Benutzung in ASM mit den Befehlen IN und OUT muss man davon noch 32 abziehen. Eine Erklärung findet sich im File sfr_defs.h.
Hat jetzt zwar ein bischen gebraucht, aber ich glaub ich habs gecheckt:
Im Datenblatt steht:
Code:
$12 ($32) PORTD PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 65
$11 ($31) DDRD DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 65
Die $32 und $31 (jeweils zweite Zahl von Links) sind die Adresse, die der GCC benutzt (umgerechnet von Hex nach Dez sind das nämlich 50 und 49 - die sich auch im Quellcode wiederfinden)
Wenn ich jetzt 50-32 = 18 Rechne, und in 18 und auch 17 (49 - 32) jeweils 255 mit OUT reinschreibe, leuchten die LEDs!
Und Praktischerweise sind die 12 und 11 im Datenblatt (jeweils erste Zahl) von hex nach dez umgerechnet auch 18 und 17, ich brauch also auch nicht jedesmal mühsam -32 rechnen :-D
Vielen vielen Dank Besserwessi und Kampi! :-D
Viele herzliche Grüße
-schumi-
[EDIT]
Hier noch der aktuelle Quellcode:
Code:
#include <avr/io.h>
.text
.global main
main:
LDI r24, 255
OUT DDRD-32, r24
LDI r24, 255
OUT PORTD-32, r24
Hauptschleife:
rjmp Hauptschleife
Lesezeichen