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







Zitieren

Lesezeichen