Guten tag.

Versuche es doch mal damit.

MfG
A.Hoffmann


Code:
.include "m8def.inc"
.def		temp	=	r16			; Arbeitsregister
.def		temp2	=	r17			; Arbeitsregister

.equ		CLOCK	=	8000000

.dseg

timer_1:	.byte		1	; 8 Bit
timer_6:	.byte		1	; milisekunden Zähler

.cseg

.org 0x000
		    rjmp	Prog_Initial ;	Interruptvektoren überspringen
			reti				;	INT0addr - Externer Interrupt 0
			reti				;	INT1addr - Externer Interrupt 1
			reti		  		;	OC2addr  - Output Compare2
			reti				;	OVF2addr - Overflow2
			reti				;	ICP1addr - Input Capture1
			reti				;	OC1Aaddr - Output Compare1A
			reti				;	OC1Baddr - Output Compare1B
			reti				;	OVF1addr - Overflow1
			rjmp	delay		;	OVF0addr - Overflow0
			reti				;	SPIaddr  - SPI
			reti	    		;	URXCaddr - USART Receive Complete
			reti				;	UDREaddr - USART Data Register Empty
			reti				;	UTXCaddr - USART Transmit Complete
			reti				;	ADCCaddr - Analog Digital wandler
			reti				;	ERDYaddr - EEPROM 
			reti				;	ACIaddr  - Analog Comparator
			reti				;	TWIaddr  - Two - Wire Interface
			reti				;	SPMaddr  - SPM complete


Prog_Initial:

;*********************************************************
;                               Stack Pointer setzen     *
;*********************************************************

			ldi		temp,	LOW(RAMEND)		; Stack Pointer low
			out		SPL,	temp			; setzen
			ldi		temp,	HIGH(RAMEND)	; Stack Pointer high
			out		SPH,	temp 			; setzen

;********************************************************
;*                        Init  Timer / Counter 0       *
;********************************************************

;Preclaer Divisions Factor = 64

			ldi		temp,	131			; Counter = (256 - 125)	
			out		TCNT0,	temp ; nach 125 Takten erfolgt ein Überlauf
			ldi		temp,	0b00000011	; CS00 + CS01 = 1	
			out		TCCR0,	temp		; Prescaler Division = 64
			in		temp,	TIMSK
			ori		temp,	0b00000001	; Interrupt
			out		TIMSK,	temp		; erlauben

;*********************************************************
;*                           Init LEDs                   *
;*********************************************************

			sbi		DDRB,	DDB0		; Duo LED grün
			sbi		DDRD,	DDD2		; Duo LED rot
			cbi		PORTB,	PORTB0		; aus
			cbi		PORTD,	PORTD2		; schalten
			sbi		DDRD,	DDD6		; Front LED
			cbi		PORTD,	PORTD6		; aus
			sbi		DDRD,	DDD7		; Back LEDs
			cbi		PORTD,	PORTD7		
			sbi		DDRC,	DDC0
			sbi		DDRC,	DDC1
			cbi		PORTC,	PORTC1
			cbi		PORTC,	PORTC1		; ausschalten
			ldi		temp,	0x00
			sts		timer_1,		temp	; max
			sts		timer_6,		temp	; max 255 mili Sekunden


			sei							; Interrupts erlauben
			


;****************   Ende Init  ****************************	
				  						
Prog_Run:
loop:
			rcall	back_led_l_on;
			rcall	back_led_r_on;
			ldi		temp2,	1		; 1 sekunde nichts tun
			rcall	wait_timer_1
			rcall	back_led_l_off
			rcall	back_led_r_off
			ldi		temp2,	1		; 1 sekunde nichts tun
			rcall	wait_timer_1

			rjmp	loop


;*********************************************************
;*                  Interrupt Routine für Timer 0        *
;*********************************************************
delay:		
			push	ZH
			push	ZL
			push	temp2
			push	temp
			in		temp,	SREG
			push	temp			; sichern
			lds		temp,	timer_6	; Milisekunenden
			inc		temp			; Zähler
			sts		timer_6,	temp ; + 1
			adiw	r25:r24,	1	; Counter + 1
			ldi		temp,	 	0xE8 ;0xE8	; 0x03E8 = 1000
			ldi		temp2,		0x03 ;0x03
			cp		r24,	temp	; Counter Low / 16 Bit compare
			cpc		r25,	temp2	; Counter High 
			brne	next_step		; noch keine Sekunde vergangen
			lds		temp,	timer_1	; erhöhe die Sekunden Zähler um 1
			inc		temp
			sts		timer_1,		temp
			ldi		r24,	0
			ldi		r25,	0

next_step:
			ldi		temp,	131		; Counter Register
			out		TCNT0,	temp	; neu Vorbelegen							
			pop		temp			; Register
			out		SREG,	temp
			pop		temp
			pop		temp2
			pop		ZL
			pop		ZH				; wieder herstellen
			reti
			
;********************************************************
;*                Hintere LED rechts Ein                *
;********************************************************
back_led_r_on:
			sbi		DDRD,	DDD7		
			cbi		PORTD,	PORTD7		
			sbi		DDRC,	PORTC0
			sbi		PORTC,	PORTC0
			ret

;*******************************************************
;*                Hintere LED rechts Aus               *
;*******************************************************
back_led_r_off:
			cbi		PORTC,	PORTC0
			ret

;******************************************************
;*                          Hintere LED links Ein     *
;******************************************************
back_led_l_on:
			sbi		DDRD,	DDD7		
			cbi		PORTD,	PORTD7		
			sbi		DDRC,	PORTC1
			sbi		PORTC,	PORTC1
			ret

;******************************************************
;*                       Hintere LED links Aus        *                        
;******************************************************
back_led_l_off:
			cbi		PORTC,	PORTC1
			ret


;***************************************************************
;*                warten auf timer_1                  		   *
;*   in temp2 wird die  Verzögerungs Zeit in Sekunden übergeben*
;***************************************************************

wait_timer_1:
			push	temp2					; Register
			push	temp
			in		temp,	SREG
			push	temp					; sichern
			ldi		temp,	0x00			; timer_1	
			sts		timer_1,		temp	; auf Null setzen
w_t_1:
			lds		temp,	timer_1
			cp		temp,	temp2			; timer_1 => temp2
			brsh	ret_t_1							; ja
			rjmp	w_t_1		
ret_t_1:
			pop		temp			; Register
			out		SREG,	temp
			pop		temp
			pop		temp2			; wieder herstellen
			ret



;******************************************************************************
;*                warten auf timer_6                 						  *
;*   in temp2 wird die  Verzögerungs Zeit in mili Sekunden übergeben          *
;******************************************************************************
wait_timer_6:
			push	temp2					; Register
			push	temp
			in		temp,	SREG
			push	temp					; sichern
			ldi		temp,	0x00			; timer_6	
			sts		timer_6,		temp	; auf Null setzen
w_t_6:
			lds		temp,	timer_6
			cp		temp,	temp2			; timer_6 => temp2
			brsh	ret_t_6					; ja
			rjmp	w_t_6		
ret_t_6:
			pop		temp					; Register
			out		SREG,	temp
			pop		temp
			pop		temp2					; wieder herstellen
			ret