Ich wollte mit SBI TCCR0, CS02 ein Bit in den Register setzen, aber der Compiler meldet: "Out of range".
Mit LDI temp, 0b00000100 und dann OUT TCCR0, temp hat es dann geklappt. Aber jetzt frage ich mich, wie ich einzelne Bits in dem Register manipulieren kann, ohne andere zu beeinflussen?

Noch was:
Ne ganz komische Sache. Beim ersten Überlauf wird der Interrupt aktiviert, alles ok. Der TOV0 Flag wird auch (automatisch) zurückgesetzt und die LED geht an. Beim zweiten Überlauf kommt das Programm aber nicht mehr aus der loop-Schleife und der TOV1 Flag wird zwar gesetzt, aber nicht mehr gelöscht. Auch die Befehle ldi temp, (1<<TOV0) und out TIFR, temp haben da nicht gebracht. Woran liegt das?

Hier der Quellcode:
Code:
.include "m8def.inc"
 
.def temp = r16
 
.org 0x000
	rjmp main				; Reset Handler

.org OVF0addr 
	rjmp timer				; Timer0 Handler			
 
 
main:                        
 
	ldi temp, HIGH(RAMEND)
	out SPH, temp
	ldi temp, LOW(RAMEND)
	out SPL, temp

	sbi DDRD, PD5
	cbi DDRD, PD2
	
	ldi temp, 0b00000001
	out TCCR0, temp	

	ldi temp, 0b00000001
	out TIMSK, temp

	sei                  
 
loop:
	rjmp loop             
 
timer:
	sbis PORTD, PD5
	rjmp setLED

	sbic PORTD, PD5
	rjmp clrLED

setLED:
	sbi PORTD, PD5

	ldi temp, (1<<TOV0)
	out TIFR, temp

	rjmp loop

clrLED:
	cbi PORTD, PD5

	ldi temp, (1<<TOV0)
	out TIFR, temp

	rjmp loop