Zitat von
Saturas077
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 Atmega 6.2 ein.
Allerdings wird dann nicht die Routine ausgeführt,es wird nichts zurück gesetzt...
Was soll Atmega 6.2 sein? Was soll den das Programm machen und was meinst Du mit "es wird nichts zurück gesetzt..."?
Ich habe keinen Simulator für Dein Programm installiert und bin nur gedanklich durchgegangen:
Meiner Meinung nach sollte die ISR schon ausgeführt werden allerdings wird PORTB nicht auf Ausgang geschaltet und die Konfiguration von Interrupt und Vorteiler scheint mir eher zufällig zu klappen.
Hab Deinen Code kopiert und mit weiteren Kommentaren versehen:
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 (alle Bits in r17 werden gesetzt)
out DDRB, r16 (r16 ist nicht initialisiert und wird defaultmäßig 0x00 enthalten
Ausgabe nach DDRB wird keinen einen Effekt haben, PORTB bleibt auf Eingang)
ldi r16, 0x01 ; setze Pin 1 als High. (Bit 0 in R16 wird gesetzt)
ldi r17, (1<<CS00) ; Setze Vorteiler (Bit 0 in r17 wird gesetzt, alle anderen gelöscht)
out TCCR0, r16 (r16 soll den Vorteiler setzen? Soll nicht r17 nach TCCR0 ausgegeben werden?)
ldi r17, (1<<TOIE0) ; Setze Overflow Interrupt (Bitnummer von TOIE0 wird in r17 gesetzt - Maske für TIMSK?)
out TIMSK, r16 (r16 wird nach TIMSK geschrieben. Sollte das nicht r17 sein?)
loop:
rjmp loop ; Ewiger Loop
interrupt:
out PORTB, r16 (r16 hat beim ersten interrupt noch Bit 0 gesetzt
und schaltet hier nur den Pullup für PB0 ein, da PORTB noch auf
defaultmaessigem Eingang ist, siehe oben)
(beim zweiten Interrupt wird Pullup für PB0 wieder ausgeschaltet und
und für alle anderen Pins auf PORTB eingeschaltet)
(Nur die Pullups werden getoggelt wg. nachfolgendem COM r16)
com r16 (alle Bits in R16 werden invertiert und SREG verändert)
reti
Gruß
Searcher
Lesezeichen