Du wirst es mir wahrscheinlich nicht glauben, aber das habe ich mir selbst auch bereits mal durchgelesen (ich gehöre nämlich nicht zu denen, die ihre Fragen stellen in der Hoffnung, dass andere für sie googlen). Doch leider ist es ja auch so, dass es auf dem Controller so ist, dass das Programm hängen bleibt, wenn ich an der besagten Stelle "ret" verwendet. Mit "rcall mainloop" läuft alles, wie es soll. Ist also nicht dieser AVRStudio Bug.
€: Da es wohl mit Code besser zu verstehen ist (auch wenn nicht ganz Thema vom Thread hier):
Code:
.include "m8def.inc"
begin: 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
;------------------------------------------------------------------------
; Initialisierungen
;------------------------------------------------------------------------
main:
;--- Stack Initialisierung ---
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
; Register
ldi r17,0x00
ldi r18,0x00
ldi r19,0x00
; Ports initialisieren
cbi DDRB,0 ; PORTB0 auf Eingang mit PullUp
sbi PORTB,0
sbi DDRB,1 ; PORTB1 auf Ausgang
sbi DDRB,2 ; PORTB2 auf Ausgang
sbi DDRB,3 ; PORTB3 auf Ausgang
sbi DDRB,4 ; PORTB4 auf Ausgang
sbi DDRB,5 ; PORTB5 auf Ausgang
sbi DDRB,6 ; PORTB6 auf Ausgang
sbi DDRB,7 ; PORTB7 auf Ausgang
sbi DDRC,0 ; PORTC0 auf Ausgang
sbi DDRC,1 ; PORTC1 auf Ausgang
sbi DDRC,2 ; PORTC2 auf Ausgang
sbi DDRC,3 ; PORTC3 auf Ausgang
sbi DDRC,4 ; PORTC4 auf Ausgang
sbi DDRC,5 ; PORTC5 auf Ausgang
sbi DDRC,6 ; PORTC6 auf Ausgang
;------------------------------------------------------------------------
; Hauptprogramm-Schleife
;------------------------------------------------------------------------
mainloop: wdr
in r17,PINB
cp r18,r17
breq led
rjmp mainloop ; Sprung zum Beginn der Hauptprogrammschleife
;Subroutinen
;------------------------------------------------------------------------
led:
rcall myWait_30ms
inc r19
out PORTC,r19
rcall mainloop ; <<< Diese Zeile ist gemeint
myWait_30ms:
push r16
ldi r16,1
myWait_30ms_3:
push r16
ldi r16,143
myWait_30ms_2:
push r16
ldi r16,255
myWait_30ms_1:
dec r16
brne myWait_30ms_1
pop r16
dec r16
brne myWait_30ms_2
pop r16
dec r16
brne myWait_30ms_3
pop r16
ret
Lesezeichen