ATMega16 Unterprogramm anspringen geht nicht mehr???

OP #455248
Lesenswert?
• ▲
▼
Bis vorhin funktionierte diese Programm bei mir:

;+----------------------------------------------------------------------
.include  "m16def.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,low(RAMEND)
  out  SPL,r16
  ldi  r16,high(RAMEND)
  out  SPH,r16
  ldi  r16,0b11111111
  out  DDRC,r16    ;PORTA auf Ausgang
  out  DDRB,r16    ;PORTB auf Ausgang
  out DDRB,r16    ;PORTC auf Ausgang
;----------------------------------------------------------------------- 
--

start:    out PORTC,r20
    ldi  r16,0x01
    out PORTB,r16
    rcall loop
    ldi  r16,0x02
    out PORTB,r16
    rcall loop
                  jmp start

loop:             ldi  R17, $12
WGLOOP0:          ldi  R18, $BC
WGLOOP1:          ldi  R19, $C4
WGLOOP2:          dec  R19
                  brne WGLOOP2
                  dec  R18
                  brne WGLOOP1
                  dec  R17
                  brne WGLOOP0
                  ret



Jetzt bleibt das Programm beim Aufruf des Unterprogrammes stehen ? Was 
ist passiert? Simuliere mit AVRStudio. Vielen Dank
Gast #455251
Lesenswert?
• ▲
▼
Die Vektorentabelle muß statt der vielen reti ein "rjmp RESET" erhalten, 
wobei RESET die Sprungmarke zur ersten Adresse nach den Interruptvekoren 
ist. Außerdem paßt Deine Schleifenverschachtelung nicht. r19 wird immer 
wieder neu geladen, decrementiert, neu geladen... Da kommt der 
Controller nicht mehr heraus.
#455252
Lesenswert?
• ▲
▼
> Jetzt bleibt das Programm beim Aufruf des Unterprogrammes stehen

Ein Programm auf einem µC kann nicht einfach stehen bleiben-

> Simuliere mit AVRStudio.

Hast du vielleicht "Single Step" F10 mit "Step into" F11
verwechselt? Wenn du mit einem F10 über den rcall drübersteppst,
dann dauert das schon seine Zeit, bis der Simulator durch
die Schleifen durchsimuliert hat.
#455255
Lesenswert?
• ▲
▼
> Die Vektorentabelle muß statt der vielen reti ein "rjmp RESET"
> erhalten,

Da keine Interrupts im Spiel sind, ist das erst mal egal.
Selbst wenn da Interrupts wären ist an den reti erst
mal nichts auszusetzen.

> Außerdem paßt Deine Schleifenverschachtelung nicht. r19 wird immer
> wieder neu geladen, decrementiert, neu geladen

Neu geladen wird nur, nachdem die Schleifevariable in der
Schleife eins weiter drausen um 1 runtergezählt wurde.
Irgendwann sind diese verschachtelten Schleifen also zuende.
Im Simulator dauert das seine Zeit, aber irgendwann kommt
der call zurück.
Gast #455257
Lesenswert?
• ▲
▼
Karl Heinz, hast Recht, die Schleifen sind irgendwann durch, hab´s  mit 
den Augen ;-). Die retis da oben soll´er aber doch mal in "jmp Reset" 
(nicht rjmp...) ändern, sonst geht dann später auf einmal nix mehr...

Antwort schreiben

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.

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.