ATMEGA 16 Problem mit Assembler und AVR-Studio (Einstieg)

OP #777183
Lesenswert?
• ▲
▼
Guten Tag,

ich versuche gerade den Einstieg in den Assembler der AVRs zu finden. 
Mit C habe ich da schon einiges gemacht, aber man will sich ja 
weiterentwickeln...

Als Entwicklungsumgebung nutze ich AVRStudio 4 (Service Pack 2). Zum 
ersten Testen verwende ich folgenden Assembler-Code (aus dem Buch 
"Günter Schmitt:
Mikrocomputertechnik mit Controllern der Atmel-RISC-Familie" mit 
leichten Abwandlungen):
1
; k2p1.asm Bild 2-2 Dualzähler als Taktteiler
2
; Seite 67
3
; PORTB: Ausgabe LED PB0 = Takt / 10   PB 7 = Takt / 1280
4
; PORTD: -
5
        .NOLIST          ;
6
    .INCLUDE <m16def.inc>  ; Deklarationen für ATmega16
7
    .LIST          ;
8
    .DEF  akku = r16    ; Arbeitsregister
9
    .CSEG          ; Programm-Flash
10
RESET:  rjmp  start      ; Reset-Einsprung
11
      .ORG  INT_VECTORS_SIZE          ; Interrupteingänge übergehen
12
start:  ldi    akku,LOW(RAMEND); Stapelzeiger
13
    out    SPL,akku    ; anlegen
14
    ldi    akku,HIGH(RAMEND);
15
    out    SPH,akku    ;
16
    ser    akku      ; akku <- $ff
17
    out    DDRB,akku    ; PortB ist Ausgang
18
    out    DDRD,akku    ; PortD leuchtet!
19
    out    PORTD,akku    ;
20
    clr    akku      ; Zähler löschen
21
; Taktteile: 5 Takte Low / 5 Takte High gibt Takt / 10
22
loop:  out    PORTB,akku    ; 1 Takt: Zähler ausgeben
23
    inc   akku      ; 1  Takt: Zähler erhöhen
24
    nop            ; 1 Takt: Verlängerte Schleife
25
    rjmp  loop      ; 2 Takte: Schleife
26
    .EXIT          ; Ende des Quelltextes

Die Assemblierung funktioniert fehlerfrei, auch die Simulation im 
AVR-Studio macht genau das, was ich auch erwartet habe. Allerdings ist 
der ATmega16 nach dem Hochladen des Quelltextes völlig stumm. Von den 
Fuses gehe ich aus, daß sie stimmen, weil in C unter AVR-Studio 
erstellte Programme direkt laufen.

Die Assembler-Optionen sind wie default (außer daß er er noch zusätzlich 
ein "list-file" erstellt), also:
- AVR-Assembler Version 2
- Intel Intellec 8 (Intel hex)

So langsam gehen mir die Ideen aus, was man noch ausprobieren könnte 
oder was ich nicht beachtet haben könnte, deshalb wäre ich für eine 
diesbezügliche Hilfe sehr dankbar.

Viele Grüße
Nicolas
OP #777284
Lesenswert?
• ▲
▼
Hallo zusammen,

danke für die schnellen Antworten und die Anregungen, insbesondere mit 
den Spannungsversorgungen.

Mitlerweile habe ich es durch Zufall herausgefunden: Der Beispielcode in 
C, der genau das gleiche machen sollte (bis auf das Timing, das ist ja 
in C nicht ganz so Taktgenau einstellbar) hatte die Ausgabe auf PORTC, 
nicht auf PORTB und PORTD. PORTC funktioniert aber -im Gegensatz zu den 
anderen beiden- auch, wenn auf AVCC keine Versorgungsspannung liegt - 
die hatte ich nämlich vergessen.

Einen schönen Sonntag wünscht euch noch
Nicolas

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.