Forum: Mikrocontroller und Digitale Elektronik AVR Studio Code geht nicht richtig


von Thomas K (Gast)


Lesenswert?

Hallo!

Ich versuche verzweifelt (virtuell) knöpfe an PORTC and den pins 2 und
3 auszulesen und and leds an den pins 0 und 1 wieder auszugeben.
Das Programm ist zwar noch nicht fertig, ich habe aber jetzt schon ein
gravierendes Problem.

Sobald PIN 2 oder 3 aktiviert werden springt er in eine der letzen 2
Subroutinen. DANN hüpft er bei dem RET befehl aber immer wieder auf
"rjmp main".
Wieso? Sollte er nicht nach dem Sprungbefehl (z.B. rjmp bit3set1)
wieder fortsetzen?


Vielen Dank im Voraus,
Thomas K



.NOLIST
.include "m16def.inc"
.LIST

; Name the registers we are using.
;.equ temp, 0x10      ;does not work in avrstudio
;.equ temp2, 0x11      ;does not work in avrstudio

.def temp = r16
.def temp2 = r17

.org 0x0000

  rjmp main

main:
  ; initialize DIGIT port (all bits as output), activate CC_LEDs

;  ldi temp, low8(RAMEND)      ;does not work in avrstudio
  ldi temp, LOW(RAMEND)
  out SPL, temp
;  ldi temp, hi8(RAMEND)      ;does not work in avrstudio
  ldi temp, HIGH(RAMEND)
  out SPH, temp


  ldi temp, 0b11111100    ;Pull-ups
  out PORTC, temp
  ldi temp2, 0b00000011    ;PORTC Input
  out DDRC, temp2        ;Bits 0-1 Output, Bits 2-3 Input

  in temp, PINC        ;read PinC

  sbic PINC, 2        ;switch1 == 0?
  rjmp bit2set1

  sbic PINC, 3        ;switch2 == 0?
  rjmp bit3set1

  rjmp main

bit2set1:
  sbi PORTC, 0
  ret

bit3set1:
  sbi PORTC, 1
  ret

von Thomas K (Gast)


Lesenswert?

Vielen Dank an die Leute im Chat.
Die Lösung meines Problems ist, das rjmp für die Subroutinen durch ein
rcall zu ersetzen.
Bei rcall wird die Rücksprungadresse auf den Stack gelegt, bei rjmp
nicht!

von crazy horse (Gast)


Lesenswert?

klare Sache.
Ansonsten bei Problemen mit PortC: JTAG enabled, macht immer wieder
Probleme.

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.