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
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.