So wäre ich mal wieder,

Kurzer Überblick:
Ich hab jetzt alles so gemacht das ich beim Auslösen
des Timer Interuptes +1 in einen Register dazurechne
und diese mit einen anderen Register vergleiche.
Wenn dies zutrifft dann springe ich zu den Unterprogramm
wo ich das Bit einmal durch PortB schiebe und wieder
in die Hauptschleife Springe.

Das Vergleichregister soll mit einen Tastendruck den Wert +16 oder
-16 'gutgeschrieben bekommen' Somit ist das Vergleichregister
mit 17 Werten einzustellen und somit ist die Geschwindigkeit einzustellen.

Jetzt zu meinen Problem:
PD2 und PD3 sind aktiviert und die PullUps auch.
Bei Tastendruck wird entweder -16 und +16
gerechnet.Die Addition ist ein wenig umständlich gelöst
Für die Subthraktion gibt es einen direkt befehl für das addieren
hab ich nichts direktes gefunden.

Oder gibt es noch was zu beachten?
Und kann mal jemand über den Code gucken?
Beim Assembilieren gab es zumal keine Fehler.... \/

Edit:
So jetzt habe ich den Code weiter überarbeitet und im Simulator
von AVRStudio funktioniert dieser Super, sogar die Addition
im Vergleichsregister wird aufaddiert und alles stimmt.
Nur wenn ich das in Hardware aufbaue funktioniert
das ganze Nicht.
Aufgebaut ist das ganze auf einen MyAVRBoard+Breadboard.
Die LED's laufen einfach durch aber ein Tastendruck hat keinerlei
ausmaß auf deren Geschwindigkeit.

Die Ports habe ich auch schon gewechselt,statt die Spannung vom LPT
zu nehmen habe ich auch mal einen Akku + den 7806er genommen
und da hat sich auch nichts geändert.
Jetzt bin ich mal gespannt was ihr dazu sagt.

Liebe Grüße
Namenlos

Code:
.include	"m8def.inc"

.def Arbeit     = r16		;Für die Initialisieung zuständig
.def Licht  	= r17		;Werte für das Lauflicht
.def Zaehler 	= r18		;Zähler für jeden Interrupt
.def Vergleich  = r19		;Vergleichs Register für den Zähler [ "Referenz" ]

.def Wert		= r20		;Wert für die Addition / Subthraktion
							;Für den Vergleichswert

.def Reset		= r21


.org 0x0000					; Hauptprogramm
    rjmp    Hauptprogramm    
.org OVF0addr               ;Timer 0 Interrupt Vector Addresse [8 Bit-Timer ]
	rjmp Timer1




Hauptprogramm:				;Initialisierung




		 ldi Arbeit, LOW(RAMEND)       ; LOW-Byte der obersten RAM-Adresse
         out SPL, Arbeit
         ldi Arbeit, HIGH(RAMEND)      ; HIGH-Byte der obersten RAM-Adresse
         out SPH, Arbeit
 


		ldi	Arbeit,0b11111111
		out	DDRC, Arbeit		        ;Alle Pins am Port C durch Ausgabe 0b11111111 ins
								        ;Richtungsregister DDRC als Ausgang konfigurieren

		
		ldi Arbeit,0b11111000
		out	DDRB, Arbeit		        ;PB0 und PB1 und PB2 als Eingang Aktivieren


		ldi	Arbeit,0b00000111	        ;PB0 und PB1 und PB2 bekommen Pullup Widerstände
		out	DDRB, Arbeit

		

		ldi Arbeit,0b00000001	     	;Vorteiler 1024 an Timer 0
		out TCCR0,Arbeit			    ;Setze Bits [CS02 und CS00]

		ldi Arbeit,0b00000001	     	;Timer Interupt Aktivieren
     	out TIMSK,Arbeit		  	    ;Setze Bit	[T0IE0]
							  
		

		ldi Licht,0b00000001	     	; =1
		out PortC, Licht			    ;Erste LED an PortC an


		ldi Wert,0b00010000			    ;Konstante für das Subtharieren/Addieren [ 16 ]

	
		ldi Vergleich,0b00100000	    ;Startwert für das Vergleichsregister 
										; [ 32 ]

		ldi Reset,0b00000000			;Lösche das Reset Register

		sei								;Interrupt Aktivieren
	
Schleife:		;Hauptschleife

		

		rjmp Schleife


Timer1:									;Aktion beim Timerinterupt

	    sbic     PINB,0           	 	;Wenn Taster gedrückt PD2 = 0
        rcall Addiere
      
        sbic     PINB,1           		;Wenn Taster gedrückt PD3 = 0
        rcall Subthraiere
                          		    	

      	sbic     PINB,2           		;Wenn Taster gedrückt PD4 = 0
        rcall Wiederherstellen




		inc		Zaehler					;Addiere 1 zum Zähler Register
        cp		Zaehler,Vergleich		;Wenn der Zähler <= ist als der Vergleich ist
										;Springe zu 'Bitschieben'
		
		brge Bitschieben				;Ansonsten:
										
		reti							;Verlasse den Interrupt Handler

		
								
Bitschieben:							;Aktion wenn der Vergleich größer war



		ldi Zaehler,0b00000000			;Setze den Zähler Zurück
		rol Licht						;Bits 'schieben'
		out PortC, Licht				;Gebe 'Licht' an PortC aus
	
		inc Reset						;Erhöhe Inhalt von 'Reset' um +1
		cpi Reset,7						;Wenn Reset= 7 Springe zu Zuruecksetzen

		brge	Zuruecksetzen			;wenn nicht:
								


		reti							;Verlasse den Interrupt Handler

Zuruecksetzen:



		ldi	Licht,0b00000001			;Setze 'Licht' zurück'
		out	PortC, Licht				;und gebe es in PortC aus

		ldi	Reset,0b00000000			;Lösche das Reset-Register

		reti							;Verlasse den Interrupt Handler



Addiere:

add      Vergleich,Wert         ;Addiere 8 zu das Vergleichregister
ret								;Gehe wieder zurück

Subthraiere:
sub      Vergleich,Wert         ;Subthraiere 8 von dem  Vergleichregister
ret								;Gehe wieder zurück


Wiederherstellen:                          		    	
ldi Vergleich,0b00100000	    ;Startwert für das Vergleichsregister 
ret								;Gehe wieder zurück