Hallo Leute,

ich habe ein Programm geschrieben, wo ein Timer-Interrupt benutzt wird.
Nur dieser verhält sich etwas komisch, sprich der eine Motor geht aus und der andere an ...
Ich habe keine Ahnung, woran das liegen kann ...
Bitte helft mir ...

Hier ist der Code:

Code:
.include "m8def.inc"

;31248 1 Sek 
.EQU TIME05 = 65536 - 15624		; 0,5 Sekunden 
.EQU TIME2 = 65536 - 62496		; zwei Sekunde 
.EQU TIME1 = 65536 - 31248		; eine Sekunde
 
.def temp = r16
.def temp = r21
.def temp = r22
.def updown = r23

.org 0x0000
	rjmp start
.org OVF0addr		;Interrupt-handler für 8 Bit Timer0
	rjmp interrupt

start:
	ldi updown, 0b00000000
	
	ldi r20,HIGH(TIME2)	;Trick, um Timer0 auf 16 Bit zu erweitern
    ldi temp,LOW(TIME2)		;Starwert Timer
    out TCNT0,temp
    ldi temp,(1<<CS02|1<<CS00)	;Prescaler Systemtakt/1024
    out TCCR0,temp
	ldi temp,(1<<TOIE0)	;Timer Interrupt über TOV0 erlauben
	out TIMSK,temp		;    "

    ldi      temp,   (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1)
    out      TCCR1A,   temp
    ldi      temp,   (1 << CS11)
    out      TCCR1B,   temp

	ldi temp,25
    out      OCR1BH,   temp
	out      OCR1BL,   temp
	ldi temp,150
    out      OCR1AH,   temp    
    out      OCR1AL,   temp


	cbi DDRD, PD7
	cbi PORTD, PD7
	sbi PORTC, PC0
	sbi PORTC, PC1

	sei					;global Interrupts einschalten

;Stackpointer setzen wg. Unterprogramm
	ldi temp,HIGH(RAMEND) 
	out SPH,temp
	ldi temp,LOW(RAMEND)
	out SPL,temp

	SBI DDRB, DDB1 ; Motordatenrichtungsbit setzen
	SBI DDRB, DDB2
	SBI DDRB, DDB4
	SBI DDRB, DDB5
	SBI DDRD, DDD4
	SBI DDRD, DDD5
	SBI PORTB, PB1 ; Motorenports PB1 und PB2 auf 5V schalten
	SBI PORTB, PB2
	sbi PORTD, PD5
	sbi PORTB, PB5

	sbi DDRC, DDC0
	sbi DDRC, DDC1

;Hauptprogramm:
loop:				;leere Schleife
   	rjmp loop

;Interrupt Handler 
interrupt:			;LEDs toggeln
	inc r20			;Timererweiterung inkrementieren
	brne interrupt2	;wenn r20=0, zu interrupt2 springen
    ldi r20,HIGH(TIME2)		;sonst Starwert Timer neu setzen
	
		 sbrs updown,7 ;0 hoch, 1 runter
		 rjmp switch0
		 sbrc updown,7
		 rjmp switch1

		 switch0:
		 ldi updown, 0b10000000
		 ldi temp,150
    	 out      OCR1BH,   temp
		 out      OCR1BL,   temp
		 ldi temp,25
    	 out      OCR1AH,   temp
    	 out      OCR1AL,   temp
		 cbi DDRC, DDC0
		 cbi DDRC, DDC1
		 sbi PORTD, PD6
		 sbi DDRD, DDD6
		 rjmp interrupt2

		 switch1:
		 ldi updown, 0b00000000
		 ldi temp,25
    	 out      OCR1BH,   temp
		 out      OCR1BL,   temp
		 ldi temp,150
    	 out      OCR1AH,   temp    	 
    	 out      OCR1AL,   temp
		 sbi DDRC, DDC0
		 sbi DDRC, DDC1
		 cbi PORTD, PD6
		 cbi DDRD, DDD6
		 rjmp interrupt2

noswitch:
interrupt2:
    ldi temp,LOW(TIME2)		;Startwert Timer neu
    out TCNT0,temp
    reti
Danke im Voraus!