mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega8 mit assembler unter linux programmieren


Autor: Randolf Balasus (inside-man)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich moechte gern meinen atmega8 mit assembler programmieren. Am 
liebsten unter linux,ich habe die programme avra tavrasm gavrasm hier 
installiert. Das hexfile wollte ich dann mit avrdude reinschieben. Was 
mir partout nicht gelingen will, ist: den nachfolgenden Text zu 
assemblieren. Es ist ein programm von myavr und soll eine led anschalten 
(ich hoffe das programm ist richtig). unter windows kein problem. Doch 
jeder dieser linux assembler schimpft an einer anderen stelle. Mag sein 
das es da ein paar Unterschiede in der syntax gibt. Doch ich kann 
absolut nicht rausfinden was ich anpassen muss. Kann mir jemand den 
passendsten assembler empfehlen, und kurz ueber die zeilen schauen was 
da nicht stimmt.  Ich hatte auch mal mit kontrollerlab getestet. Aber da 
scheint die Einarbeitung auch nicht ganz ohne zu sein. Ich moechte 
eigentlich erst mal nur so ein kleines Miniprogramm assemblieren, and 
darauf aufbauend weiterforschen.
Gruss Randolf Balasus

;+----------------------------------------------------------------------

.include  "m8def.inc"

;----------------------------------------------------------------------- 
-

;Reset and Interrupt vector             ;VNr.  Beschreibung

  rjmp  main  ;1     POWER ON RESET

  reti    ;2     Int0-Interrupt

  reti    ;3     Int1-Interrupt

  reti    ;4     TC2 Compare Match

  reti    ;5     TC2 Overflow

  reti    ;6     TC1 Capture

  reti    ;7     TC1 Compare Match A

  reti    ;8     TC1 Compare Match B

  reti    ;9     TC1 Overflow

  reti    ;10    TC0 Overflow

  reti    ;11    SPI, STC Serial Transfer Complete

  reti    ;12    UART Rx Complete

  reti    ;13    UART Data Register Empty

  reti    ;14    UART Tx Complete

  reti    ;15    ADC Conversion Complete

  reti    ;16    EEPROM Ready

  reti    ;17    Analog Comparator

  reti    ;18    TWI (I²C) Serial Interface

  reti    ;19    Store Program Memory Ready

;----------------------------------------------------------------------- 
-

;Start, Power ON, Reset

main:  ldi  r16,hi8(RAMEND)

  out  SPH,r16

  ldi  r16,lo8(RAMEND)  ;Stack Initialisierung

  out  SPH,r16  ;Init Stackpointer

  sbi  DDRB,0  ;PORTB0 auf Ausganp

;----------------------------------------------------------------------- 
-

mainloop:  ldi  r16,0b00000001

  out  PORTB,r16

  rjmp  mainloop

;----------------------------------------------------------------------- 
-

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du die beiden Zeilen zur Stack Initialisierung in

ldi  r16,high(RAMEND)
ldi  r16,low(RAMEND)  ;Stack Initialisierung

änderst compiliert es gavrasm problemlos mit einer Warnung, dass er die 
Header Datei nicht benutzt sondern eine interne Tabelle benutzt. Die 
kannst du, denke ich, ignorieren.

Gerhard

Autor: Gabriel Wegscheider (gagosoft)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich programmiere ich kaum ASM, doch das programm sieht für mich 
ganz sinnvoll aus. Was da genau mit dem Stackpointer passiert weiss ich 
auf Anhieb nicht, kannst aber (meiner bescheidenen Meinung nach) diese 
initialiserung für ein "low-level-hello-world" weglassen.
Was mir noch echt komisch vorkommt:
jeder Interrupt vektor hat einen Offset von 2, RETI benötigt aber nur 
ein Befehlswort.

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du auch noch die Zeile

.include  "m8def.inc"

durch

.DEVICE ATMEGA8

ersetzt unterbleibt auch die Fehlermeldung.

Gerhard

Autor: Düsentrieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich nehm bisher:
avra
+
sp12
als progger; ging auf anhieb besser als avrdude

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder du holst dir dir datei m8def.inc
in der stehen einige definitionen die nützlich sind

in main main musst du aber ersetzen,
da es die macros hi8 lo8 nicht gibt

    ;ldi  r16,hi8(RAMEND)
    ldi  r16, RAMEND>>8

    ;ldi  r16,lo8(RAMEND)  ;Stack Initialisierung
    ldi  r16, RAMEND & 0xF

avra -I /pool/software/avra/AVR main.asm

in verzeichnis AVR habe ich die m8def.inc datei

grüsse, daniel

ps: du könntest auch avr-gcc nutzen als assembler nutzen

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wohl eher:

  ldi r16, (RAMEND & 0xFF)

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gabriel Wegscheider wrote:
> kannst aber (meiner bescheidenen Meinung nach) diese
> initialiserung für ein "low-level-hello-world" weglassen.

bin auch der Meinung, aber schaden tut's ja nicht.

> Was mir noch echt komisch vorkommt:
> jeder Interrupt vektor hat einen Offset von 2, RETI benötigt aber nur
> ein Befehlswort.

Nein, ist beim Mega8 nicht der Fall, siehe Datenblatt (bei meiner Vers. 
ist das auf Seite 46)...

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.