Forum: Mikrocontroller und Digitale Elektronik ATMega128 Unterprogrammrücksprung


von Øyvind Fjellang Sæther (Gast)


Lesenswert?

Hallo,

schreibe zur Zeit ein Programm für ein ATMega128. Habe früher nur
ATMega8 und 16 benutzt. Kann mir jemanden sagen ob ich in diesem kürzen
Code irgendetwas falsch mache. Im Simulator läuft alles wunderbar, aber
wenn ich das Programm auf dem uC programmiere, kommt das Programm nie
zu der Zeile nach "rcall test". Sieht aus wie ein Stackproblem, aber
ich weiss nicht was ich da falsch mache.

Hier den Code:

.include "m128def.inc"

.org  0x0000
  jmp  reset

;*****************************
reset:
  ;Init stack
  ldi  R16, high(RAMEND)
  out  SPH, R16
  ldi  R16, low(RAMEND)
  out  SPL, R16

  ;PORT A output
  ldi  R16, 0x01
  out  DDRA, R16

  rcall  test

  ldi  R16, 0x01
  out  PORTA, R16

loop:  jmp loop

test:  ldi R17,1
  ret

von Øyvind Fjellang Sæther (Gast)


Lesenswert?

Habe schon die Lösung gefunden. Die Fuse M103C, 103 Compability mode ist
von Atmel schon gesetzt. Nach dem Löschen läuft alles supa.

siehe auch:
http://www.mikrocontroller.net/articles/AVR_Checkliste

unter Atmega128

von samy (Gast)


Lesenswert?

Hi Alle;
Diese Funktionen sind for ATMEL uC geschrieben,
I waere sehr dankbar, wenn jemand mir sagen koennte, wei kann ich zu
msp430 umsetzen.
danke
#define WAIT_FOR_BOUNDARY()    while(!(get_hvalue(TIMESTAT2) |
0xFFFE))
#define ENABLE_T1_COMPC_INT()       do { put_hvalue(TIMECNTL3,
get_hvalue(TIMECNTL3) | 0x0019);  } while (0)
#define DISABLE_T1_COMPC_INT()      do { put_hvalue(TIMECNTL3,
get_hvalue(TIMECNTL3) & 0xFFE6); } while (0)
#define CLEAR_T1_COMPC_INT()        do { put_hvalue(TIMESTAT3, 0x0001);
 } while (0)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.