Also deinen Code habe ich fast zur gänze verstanden, ich weiß nur nicht wofür ich solche Sachen wie JTAG oder .CSEG brauche. Ich habe meinen Code jetzt so verändert das man mithilfe zweier Taster die LED heller oder dünkler machen kann, zumindest mit dem Simmulator funktionierts schon mal. Das STK 500 bekomm ich hald erst in ein paar tagen.

Hier mal mein Code, wenn der funktioniert, dann is das ein richtig einfach verständlicher Code zum erlernen von PWM ^^
Code:
.include "m16def.inc"

.def temp = r16
.def PWMstatus = r17
.def Helligkeit = r18

.org 0x000               
	jmp main							; Reset Interupt Handler
    jmp EXT_INT0						; INT 0 Interupt Handler
	jmp EXT_INT1						; INT 1 Interupt Handler
	jmp Kein_Interrupt ;TIM2_COMP		; Timer 2 Compare Interupt Handler 
	jmp Kein_Interrupt ;TIM2_OVF		; Timer 2 Overflow Interupt Handler
	jmp Kein_Interrupt ;TIM1_CAPT		; Timer 1 Capture Interupt Handler
	jmp Kein_Interrupt ;TIM1_COMPA		; Timer 1 Compare A Interupt Handler
	jmp Kein_Interrupt ;TIM1_COMPB		; Timer 1 Compare B Interupt Handler
	jmp Kein_Interrupt ;TIM1_OVF		; Timer 1 Overflow Interupt Handler
	jmp Kein_Interrupt ;TIM0_OVF		; Timer 0 Overflow Interupt Handler
	jmp Kein_Interrupt ;SPI_STC			; SPI Transfer Complete Interupt Handler
	jmp Kein_Interrupt ;USART_RXC		; USART RX Complete Interupt Handler
	jmp Kein_Interrupt ;USART_DRE		; USART UDR empty Interupt Handler
	jmp Kein_Interrupt ;USART_TXC		; USART TX Complete Interupt Handler
	jmp Kein_Interrupt ;ADC				; ADC Conversion Complete Interupt Handler
	jmp Kein_Interrupt ;EE_RDY			; EEPROM Ready Interupt Handler
	jmp Kein_Interrupt ;ANA_COMP		; Analog Comperator Interupt Handler
	jmp Kein_Interrupt ;TWSI			; TWI Interupt Handler 
	jmp Kein_Interrupt ;EXT_INT2		; INT 2 Interupt Handler 
	jmp TIM0_COMP						; Timer 0 Compare Interupt Handler 
	jmp Kein_Interrupt ;SPM_RDY			; Store Program Memory Ready Interupt Handler

main:
;Stackpointer
	ldi temp, LOW(RAMEND)
	out SPL, temp
	ldi temp, HIGH(RAMEND)
	out SPH, temp
;Aus/Eingänge
	ldi temp, 0xFF
	out DDRB, temp						; Ausgang

;PWM
	ldi temp, (1<<WGM00) | (1<<CS00)	; Einstellungen siehe Seite 81-83
	out TCCR0, temp

	ldi Helligkeit, 0b00000000
	out OCR0, Helligkeit				; Stellt die Einschaltzeit ein (Alles gesetzte --> immer ein, alles aus --> immer aus)
	
	ldi temp, (1<<OCIE0)
	out TIMSK, temp
;External Interrupt
	ldi temp, 0b00001111
	out MCUCR, temp						; Steigende Flanke löst Ext. Int. 0 und 1 aus

	ldi temp, 0b11000000
	out GICR, temp						; Ext. Int 0 und 1 aktivieren
;Interrupts freigeben
	sei									; Interrupts allgemein aktivieren
	
Ende:
	jmp ende
	
Kein_Interrupt:
	reti

TIM0_COMP:
	inc PWMstatus
	ldi temp, 0b00000001
	andi PWMstatus, 0b00000001
	cp PWMstatus, temp
	breq PC+3
	cbi PortB, 0
	reti
	sbi PortB, 0
	reti

EXT_INT0:
	ldi temp, 0b11111111
	cp Helligkeit, temp
	breq PC+4
	ldi temp, 0b00001111
	add Helligkeit, temp
	out OCR0, Helligkeit
	reti

EXT_INT1:
	ldi temp, 0b00000000
	cp Helligkeit, temp
	breq PC+4
	ldi temp, 0b00001111
	sub Helligkeit, temp
	out OCR0, Helligkeit
	reti
Ich habe jetzt noch vor den Ausgangsport auch per Taster verändern zu können, das Problem ist nur, jetzt habe ich nur noch einen EXT_int.

Sehr hilfreich war der Hinweis das meine Interruptvektortabelle nicht korrekt ist, die hab ich einfach aus dem tuturial von mikrocontroller.net abgeschrieben ^^, wusste nicht das das beim mega16 anders ist.

Für Verbesserungsvorschläge bin ich natürlich immer offen.

Grüße,

Gerko