Forum: Mikrocontroller und Digitale Elektronik LED gehen wieder an, aber warum?


von Gerrit (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade auf dem myAVR MK2 mein erstes Programm zum Laufen zu 
bekommen, aber irgendwie will es nicht. Was soll es tun? LEDs am PORTC 
einschalten und nachdem ich eine Taste am PORTD gedrückt habe aus 
schalten und auch aus bleiben. Was aber passiert: Die LEDs gehen wieder 
an, wenn ich den Taster loslasse. Das kann ich mir nicht erklären.

Hier mein Code:
start:
  ; PORTC als Ausgang
        ldi r16, 0xFF
  out DDRC, r16

  ldi r16, 0xFF
  out PORTC, r16

  ; PÓRT D als Eingang
  ldi r16, 0x00
  out DDRD, r16
  ; Pull-Up aktivieren
  ldi r16, 0xFF
  out PORTD, r16

main:
  sbis PIND, 2
  rcall switch_off
        rjmp main

switch_off:
  mov r17, r16
  ldi r16, 0x00
  out PORTC, r16
  mov r16, r17
  ret

von Michael U. (amiga)


Lesenswert?

Hallo,

wenn man eine Subroutine benutzt, sollte man nicht vergessen, den 
Stackpointer als erstes zu setzen.

So stürzt der AVR beim ret einfach nur ab.

https://www.mikrocontroller.net/articles/AVR-Tutorial

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Gerrit (Gast)


Lesenswert?

Danke!

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.