Du hast natürlich recht, ich war bei einem anderen Wert in Gedanken.
Ich habe jetzt einen Anfang gemacht und möchte das mit dem USART verbinden, allerdings klappt das nicht so wie ich das möchte.
Die Low Time ist jetzt auf 10ms eingestellt, wie könnte ich das erweitern auf 100ms mit einem 8 Bit Timer?
Es wäre lieb wenn Ihr einmal drüber schaut:
Code:
.def temp = r16
.def value = r17
.def timer0 = r20
.def timer1_low = r21
.def timer1_high = r22


/* BEGINN DES HAUPTPROGRAMMES*/

Reset:
	ldi temp, HIGH(RAMEND)		; Stackpointer
	out SPH, temp
	ldi temp, LOW(RAMEND)
	out SPL, temp

	ldi temp, ( (1<<PD2) | (1<<PD3) ) ; Interrupt Pins auf Eingang, der Rest bleibt als Ausgang
	out DDRD, temp
	
	ldi temp, 0xFF				; PORTB wird als Ausgang gesetzt
	out DDRB, temp
	ldi temp, 0x00
	out PORTD, temp				; Alle Pins auf 0 setzen (Die beiden Eingänge bekommen keinen Pull-Up)

UART_Reset:
	ldi temp, HIGH(UBRR_VAL)
	sts UBRR0H, temp
	ldi temp, LOW(UBRR_VAL)
	sts UBRR0L, temp
	ldi temp, ( (1<<UMSEL00) | (1<<UCSZ01) | (1<<UCSZ00) ) ; synchron mit 8 Bit.
	sts UCSR0C, temp
	ldi temp, (1<<TXEN0)
	sts UCSR0B, temp

Timer0_Reset:
	ldi temp, (1<<CS01)			; setze Vorteiler auf 8
	out TCCR0B, temp

	ldi temp, (1<<COM0A1)		; der Ausgang wird immer beim Oberflow
	out TCCR0A, temp			; immer auf LOW gesetzt

	ldi temp, 0xFA				; 250 Schritte entsprechen genau 100us
	out OCR0A, temp

	ldi temp, (1<<OCIE0A)		; aktiviere Compare-Overflow Interrupt
	sts TIMSK0, temp

Timer1_Reset:
	ldi temp, (1<<ICES1)
	sts TIMSK1, temp

Loop:
	jmp Loop

isUDRclear:
	ldi temp, UCSR0A 
	sbis temp, 5	; Überprüfe ob das UDR Register LEER ist !!! Hier ist der Fehler :" Invalid number"
	rjmp isUDRclear		; Wenn nicht bleibt in einer Schleife bis es so ist.
	sts UDR0, value
	ret nop

Result_Output:
	mov value, timer1_low		; Timerwert auf den USART geben
	rcall isUDRclear
	mov value, timer1_high		; Timerwert auf den USART geben
	rcall isUDRclear
	rcall sync_0
	jmp Loop

Sound_On:
	cbi PORTD, 6
	reti nop
	

TIM0_COM:
	/*Die Pegel auf LOW setzen brauch nicht implementiert werden,
	da das von der HArdware gemacht wird*/
	inc timer0
	cpi timer0, 0x64 ; Damit wird der High Timer auf 10ms festgelegt.
	breq Sound_On
	reti nop

TIM1_CAP:
	/*Hardware speichert Werte im RAM*/
	ldi timer1_low, TCNT1L
	ldi timer1_high, TCNT1H
	reti nop
In der Doku steht:
Code:
in r16, UCSRnA
sbrs r16, UDREn
Wenn das so eingetippt wird, ist das UCSR0A Register nicht in der Range.
Ich muss mir noch etwas einfallen lassen, wie ich die Ausgabe zum PC mache, ohne das interrupt zu verlängern und ohne es im Main Loop die ganze Zeit ausgeben zu lassen

Liebe Grüße