Atmega8515 Assembler Programmierung

Gast #2246901
Lesenswert?

Hallo zusammen,
ich versuche gerade meine erste Schritte in der Mikrocontroller 
Programmierung zu machen.
Ich verwende das STK500, ein Atmega8515, avrdude 5.5 und gcc 4.4.5 unter 
gentoo.
Den Assembler-Code und meine Makefile befinden sich im Anhang.
Ich hänge gerade am Beispiel bitaccess des AVR-Tutorials.
Theoretisch sollte die 4. LED erst leuchten, wenn man den 1.Taster 
drückt.
Und die 6. LED sollte nie leuchten.
Leider funktioniert das bei mir nicht.
Wenn das Programm übertragen ist, leuchtet sofort die 4. und 6. LED. Es 
sieht so aus, als ob die Sprungbefehle ignoriert werden.
Hat mir jemand ein Tipp, wo der Fehler liegt?
Vielen Dank schon mal!
Angehängte Dateien:
Gast #2246915
Lesenswert?

Der Code an sich wird schon richtig sein.

Das Tutorial beschränkt sich an dieser, wie an anderen Stellen, aber auf 
das unmittelbare Thema, was heisst, das andere grundlegende Dinge wie 
Stackinitialisierung und insbesondere Interruptvektor-Tabelle nicht 
behandelt sind und auch in den Codebeispielen nicht erscheinen.
Letzteres insbesondere deswegen, weil die Interrupt-Tabelle bei jedem 
AVR-Typ ein wenig anders aufgebaut ist und deswegen kein konkreter Code 
dafür angegeben werden kann.

Zur Info lies mal: 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Interrupts#Aufbau_der_Interruptvektortabelle

Um Dir aber unmittelbar weiter zu helfen, füge vor Deinem Code mal 
folgendes ein.
1
rjmp start
2
.org 100
3
start:

Ob das jetzt wirklich ein jump oder ein rjmp sein muss, weiss ich nicht 
aus dem Kopf. Steht im Datenblatt, aber leider ist der ATMega8515 schon 
so alt, das auf der Atmel-Webseite keine Datenblätter mehr dafür 
verfügbar sind.
Schau mal auf Deiner CD die mit dem STK500 gekommen ist nach. Ich bin 
jetzt zu faul dazu.
Gast #2246934
Lesenswert?

Und ersetze mal
1
#include "avr/io.h"

durch
1
.include "m8515def.inc"
.include "m8515def.inc"

Erstmal ist das erste eigentlich kein Assembler-Kommando und ausserdem 
gehört die Datei zu einem Mega8 und nicht zu einem Mega8515.

Kleiner Tip noch. Wenn Du Dein Programm mal im Simulator lädst dann 
siehst Du genau was passiert. Ich habe gerade festgestellt, das die 
fehlende Interrupt-Tabelle nicht das Problem ist. Aber schön wäre es 
dennoch.
Gast #2246946
Lesenswert?

Mist. Was schreib ich denn da?

>Erstmal ist das erste eigentlich kein Assembler-Kommando und ausserdem
>gehört die Datei zu einem Mega8 und nicht zu einem Mega8515.

Es muss heissen:
Das ist eigentlich kein Assembler-Kommando und der Pfad macht in einem 
Assemblerprogramm keinen Sinn.

Sorry
#2247026
Lesenswert?

Glaskugel schrieb:
> Und ersetze mal

>
1
.include "m8515def.inc"

> Erstmal ist das erste eigentlich kein Assembler-Kommando und ausserdem
> gehört die Datei zu einem Mega8 und nicht zu einem Mega8515.

Hm, dann bekomme ich aber ein Haufen Fehlermeldungen:
1
avr-gcc -mmcu=at90s8515 -Os -Wall -Wextra -c test.S
2
/tmp/ccgSoOWI.s: Assembler messages:
3
/tmp/ccgSoOWI.s:7: Error: can't open m8515def.inc for reading: No such file or directory
4
test.S:7: Error: constant value required
5
test.S:9: Error: constant value required
6
test.S:12: Error: constant value required
7
test.S:14: Error: constant value required
8
test.S:16: Error: constant value required
9
test.S:18: Error: constant value required
10
test.S:19: Error: constant value required
11
test.S:21: Error: constant value required
12
test.S:22: Error: constant value required
13
make: *** [test.o] Fehler 1

Was für einen Simulator meinst du denn? Wo kann ich mir die Sourcen für 
den Simulator herunterladen, damit ich ihn mir compilieren kann?
Gast #2247080
Lesenswert?

Das mit dem
1
#include <avr/io.h>
könnte in deinem Fall erstmal richtig sein.
Das, was du hier versuchst ist eine Funktion in einer Assemblerdatei 
zu erstellen, die vom C-Hauptprogramm aufgerufen werden kann.
Problem: Was soll's wirklich werden? Ein Assembler-Programm? Dann nicht 
mit GCC, das ist der C-Compiler (wo man allerdings Assembler einbinden 
kann).
Wenn's ein reines Assemblerprogramm werden soll, dann brauchst du einen 
Assembler! Und in jedem Fall die entsprechende Lektüre.
z.B. http://www.mikrocontroller.net/articles/AVR-Tutorial
#2247106
Lesenswert?

Ralf schrieb:
> Problem: Was soll's wirklich werden? Ein Assembler-Programm? Dann nicht
> mit GCC, das ist der C-Compiler (wo man allerdings Assembler _einbinden_
> kann).
> Wenn's ein reines Assemblerprogramm werden soll, dann brauchst du einen
> Assembler! Und in jedem Fall die entsprechende Lektüre.

Es soll ein reines Assemblerprogramm werden. ich hab aber leider nur 
Linux. Darum will ich das eigentlich mit dem GNU-Assembler machen.
Dazu finde ich aber keine Anleitungen, weshalb ich mir das obige 
Konstrukt gefrickelt habe.

Wie mach ich das mit den GNU Assembler?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren