\/
Habs nu hinbekommen. Also die "Teilaufgabe". Es piept und die LED blinkt im Sekundentakt:
Code:
.include "m8def.inc"

.equ time0_1 = 256-2			;Damit wird der Timer0 vorgeladen
.equ time2 = 256-90				;Damit wird der Timer2 vorgeladen
.equ Summer = PB2				;Summer an B.2
.equ LED = PB5					;LED an B.5
.def tmp = r16					;Mein Universallregister
.def statusreg = r17			;Mein Statusregister
.def zaehlerLED = r18			;Mein Zählregister

.org 0x000
	rjmp reset					;Interruptvektor "reset:"

.org OVF2addr
	rjmp timerLED

.org OVF0addr
	rjmp timerSummer			;Interruptvektor für Timer0 Überlauf, hier springt
								;das Programm hin, wenn der Timer überläuft

reset:
	;Stack einrichten
	ldi tmp, HIGH(RAMEND)			;HIGH-Byte der obersten RAM-Adresse
	out SPH, tmp
	ldi tmp, LOW(RAMEND)			;LOW-Byte der obersten RAM-Adresse
	out SPL, tmp

	sbi DDRB, Summer				;B.2 als Ausgang
	sbi DDRB, LED					;B.5 als Ausgang
	sbi PORTB, Summer				;B.2 auf HIGH stellen
	sbi PORTB, LED					;B.5 auf HIGH stellen

	ldi zaehlerLED, 0b00000000			;Zähler auf 0 setzen

	;Timer Register werden belegt, hier Timer 0
	ldi tmp, (1<<CS02)				;Prescaler ist 512
	out TCCR0, tmp					;Register TCCR0 ist für den Prescaller zuständig
	ldi tmp, time0_1				;Hier wird der Timer vorgeladen
	out TCNT0, tmp

	;Timer Register werden belegt, hier Timer 2
	ldi tmp, (1<<CS22) | (1<<CS21) | (1<<CS20) ;Prescaler ist 1024
	out TCCR2, tmp					;Register TCRR2 ist für den Prescaller zuständig
	ldi tmp, time2					;Hier wird der Timer vorgeladen
	out TCNT2, tmp

	ldi tmp, (1<<TOIE0) | (1<<TOIE2);Hier werden Interrupts nach Timer0 Überlauf eingeschaltet
	out TIMSK, tmp					;Register TIMSK ist dafür zuständig

	sei								;Interrupts zulassen

loop:
	cpi zaehlerLED, 0b00101000	;Wenn Zählerregister != 40 ist
	breq pruefLED				;dann zu "pruefLED:" springen
	rjmp loop					;immer wieder zu "loop:" springen

pruefLED:
	clr zaehlerLED				;Zählerregister auf 0 setzen
	sbis PORTB, LED				;überspring, wenn B.5 = 1 ist
	rjmp umschaltenLED			;wenn B.5 = 0 ist, dann spring zu "umschaltenLED:"
	cbi PORTB, LED				;wenn B.5 = 1 ist, dann B.2 auf 0 setzen
	rjmp loop					;wieder zurück zu "loop:"

umschaltenLED:
	sbi PORTB, LED				;wenn B.5 = 0 ist, dann auf 1 setzen
	rjmp loop					;wieder zurück zu "loop:"

timerSummer:
	in statusreg, SREG			;SREG sichern

	sbis PINB, Summer			;überspringe, wenn B.2 = 1 ist
	rjmp umschaltenSummer1		;wenn B.2 = 0 ist, dann spring zu "umschalten1:"
	cbi PORTB, Summer			;wenn B.2 = 1 ist, dann B.2 auf 0 setzen
	rjmp umschaltenSummer2		;zu "umschalten2:" springen

umschaltenSummer1:
	sbi PORTB, Summer			;wenn B.2 = 0 ist, dann auf 1 setzen

umschaltenSummer2:
	ldi tmp, time0_1			;Hier wird der Timer vorgeladen
	out TCNT0, tmp
	out SREG, statusreg			;SREG wiederholen
	reti						;wieder zurück, wo du hergekommen bist

timerLED:
	in statusreg, SREG			;SREG sichern
	inc zaehlerLED				;Zählerregister um 1 erhöhen
	ldi tmp, time2				;Hier wird der Timer2 vorgeladen
	out TCNT2, tmp
	out SREG, statusreg			;SREG wiederholen
	reti
Nu werd ich erstmal was essen