Hallo Guten Nabend,
Ich steige von C auf Assembler um und verstehe hier was nicht.
Viele Tutorials gibt es zu Assembler AVR nicht, die nicht kopiert worden sind.
Ich habe alles ausprobiert was ich in irgendwelchen Anleitungen und Tutorials fand.
Die Interrupt Vectoren per .org, weglassen, mit reti, etwas gemischt....
Das Handbuch über den Atmega 8 sagt:
When the SREG I-bit, TOIE0 (Timer/Counter0 Overflow
Interrupt Enable), and TOV0 are set (one), the Timer/Counter0 Overflow interrupt is executed.
Genau dieser Zustand tritt auch in der Simulation von Atmel Studio 6.2 ein.
Allerdings wird dann nicht die Routine ausgeführt, es wird nichts zurück gesetzt...
Ich komme mit den Tutorials und meinem eigenen Latein nicht mehr weiter und hoffe ihr könnt mich auf den rechten Pfad zurück bringen.
Mein Übungscode sieht wie folgt aus:
Code:
.include "m8def.inc"
rjmp main ; Reset Handler
reti ; IRQ0 Handler
reti ; IRQ1 Handler
reti ; Timer2 Compare Handler
reti ; Timer2 Overflow Handler
reti ; Timer1 Capture Handler
reti ; Timer1 CompareA Handler
reti ; Timer1 CompareB Handler
reti ; Timer1 Overflow Handler
rjmp interrupt ; Timer0 Overflow Handler
reti ; SPI Transfer Complete Handler
reti ; USART RX Complete Handler
reti ; UDR Empty Handler
reti ; USART TX Complete Handler
reti ; ADC Conversion Complete Handler
reti ; EEPROM Ready Handler
reti ; Analog Comparator Handler
reti ; Two-wire Serial Interface Handler
reti ; Store Program Memory Ready Handler
main:
;Initializiere Stackpointer
ldi r17, HIGH(RAMEND)
out SPH, r17
ldi r17, LOW(RAMEND)
out SPL, r17
sei
ldi r17, 0xFF ;setze B als Ausgang
out DDRB, r16
ldi r16, 0x01 ; setze Pin 1 als High.
ldi r17, (1<<CS00) ; Setze Vorteiler
out TCCR0, r16
ldi r17, (1<<TOIE0) ; Setze Overflow Interrupt
out TIMSK, r16
loop:
rjmp loop ; Ewiger Loop
interrupt:
out PORTB, r16
com r16
reti
Lesezeichen