Hallo zusammen,
ich versuche mich mal mit den Grundlagen der ASM-Programmierung und bin auf ein Problem gestoßen. In Anlehnung an ein Video-Tutorial für ein atmega8 versuche ich mit einem atmega32 nun per Timer0-Overflow-Int eine LED auf dem RNControl 1.4 zu schalten. Der Code ist eigentlich copy&paste. Dennoch tut es nicht - weder im AVRstudio-Debugger, noch in Hardware. Im Debugger wird TOV0 trotz Overflow von TCNT0 nicht gesetzt (AVRstudio-Einstellung: Mask Interrupts While Stepping=false).
Ich bin für jede Hilfe dankbar!
Grüß
NRicola
Code:.include "m32def.inc" .org 0x000 begin: ;-------------------------------------------------- rjmp main ; RESET External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset, and JTAG AVR Reset reti ; INT0 External Interrupt Request 0 reti ; INT1 External Interrupt Request 1 reti ; INT2 External Interrupt Request 2 reti ; TIMER2 COMP Timer/Counter2 Compare Match reti ; TIMER2 OVF Timer/Counter2 Overflow reti ; TIMER1 CAPT Timer/Counter1 Capture Event reti ; TIMER1 COMPA Timer/Counter1 Compare Match A reti ; TIMER1 COMPB Timer/Counter1 Compare Match B reti ; TIMER1 OVF Timer/Counter1 Overflow reti ; TIMER0 COMP Timer/Counter0 Compare Match rjmp timer_int ; TIMER0 OVF Timer/Counter0 Overflow reti ; SPI, STC Serial Transfer Complete reti ; USART, RXC USART, Rx Complete reti ; USART, UDRE USART Data Register Empty reti ; USART, TXC USART, Tx Complete reti ; ADC ADC Conversion Complete reti ; EE_RDY EEPROM Ready reti ; ANA_COMP Analog Comparator reti ; TWI Two-wire Serial Interface reti ; SPM_RDY Store Program Memory Ready ;-------------------------------------------------- main: ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16 ldi r16, 0b11111111 ; Ausgänge=1 Eingänge=0 out DDRC, r16 ; Ausgeben ldi r16, 0x00 out PortC, r16 ; Timer und Interrupt konfigurieren ldi r16, 6 ; 8bit-Timer-Register vorladen out TCNT0, r16 ; so sind nur 256-6 / (16MHz/64) = 1ms zu zählen ldi r16, 0b00000011 ; CS00 & CS01 setzen: Clock/64 out TCCR0, r16 ldi r16, 0b00000001 ; TOIE0 (Timer0-Overflow-Int) setzen out TIMSK, r16 sei ; Interrupts aktivieren mainloop: nop rjmp mainloop timer_int: rcall LEDswitch ldi r16, 6 out TCNT0, r16 reti LEDswitch: in r16, PortC ldi r17, 0b10000000 ; Bit 7 (LED) eor r16, r17 ; invertieren out PortC, r16 ret







 
			
			 
					
					
					
						 Zitieren
Zitieren Hoffentlich liegt das Ziel auch am Weg
 Hoffentlich liegt das Ziel auch am Weg 
 
						 . Um den Vector sicher auf die  richtige Speicheradresse zu bringen könntest Du die Tabelle eventuell so aufbauen:
 . Um den Vector sicher auf die  richtige Speicheradresse zu bringen könntest Du die Tabelle eventuell so aufbauen:

Lesezeichen