So hier wie von Sternthaler gewünscht erstmal der grundlegende Code für IR-Kollision in Assembler. Die _Inits am Start und die Inc-Dateien ganz oben sind selbst geschriebene Makros um nicht jedes mal die LED's ,Stack etc zu initialisieren. Programm funktioniert wie folgt: Sobald IR anschlägt gehen die Back LED's an. Sendeleistung müsste hier im Programm eingestellt werden,hatte noch keine Zeit mich weiter damit zu befassen (es ist Prüfungszeit).

Der Code:
Code:
.include "m8def.inc"		;Deklaration für Atmega8

.include "Stack.inc"		;Inc-Datei für Stack
.include "UART.inc"	       ;Inc-Datei für UART
.include "Motor.inc"		;Inc-Datei für die Motoren
.include "BackLED.inc"	     ;Inc-Datei für Back LED's
.def temp0=R16				;Benennung der
.def temp1=R17				;Arbeitsregister
.def temp2=R18
.def temp3=R19
.def temp4=R20
.def temp5=R21
.def temp6=R22
.def temp7=R23
.def temp8=R24
.def temp9=R25



.CSEG						;Program-Flash
rjmp Start				;Sprung
reti ;rjmp EXT_INT0 ; IRQ0 Handler
reti ;rjmp EXT_INT1 ; IRQ1 Handler
reti ;rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
reti ;rjmp TIM1_CAPT ; Timer1 Capture Handler
reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
reti ;rjmp TIM1_COMPB ; Timer1 CompareB Handler
reti ;rjmp TIM1_OVF ; Timer1 Overflow Handler
reti ;rjmp TIM0_OVF ; Timer0 Overflow Handler
reti ;rjmp SPI_STC ; SPI Transfer Complete Handler
reti ;rjmp USART_RXC ; USART RX Complete Handler
reti ;rjmp USART_UDRE ; UDR Empty Handler
reti ;rjmp USART_TXC ; USART TX Complete Handler
reti ;rjmp ADC ; ADC Conversion Complete Handler
reti ;rjmp EE_RDY ; EEPROM Ready Handler
reti ;rjmp ANA_COMP ; Analog Comparator Handler
reti ;rjmp TWSI ; Two-wire Serial Interface





Start:
	
	Stack_Init temp0			;Initialisierung als Makro
	Uart_Init temp0				;Initialisierung als Makro
	Pwm_Init temp0				;Initialisierung als Makro
	Motor_Init temp0			;Initialisierung als Makro
	LED_Init temp0				;Initialisierung als Makro
;--------------------------------------------------------------------------------
	in temp0,ddrd				;PD1 als Ausgang 
	ori temp0,0b00000010		;nach dem Read-Modify-Write
	out ddrd,temp0				;Prinzip
	cbi portd,1					;PD1 auf LOW

;-------- seriell interface programmed in boot routine and already running -------
	;  prepare 36kHz for IR - Communication using 8-bit timer 2
	ldi temp0,(1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21)| (1 << CS20)
	out TCCR2, temp0			;Timer2 Einstellungen

	ldi temp0,0xF7				;einzustellender Wert für die PWM
	out OCR2,temp0				;in das Output Compare Register

	in temp0, TIMSK				;Timer2 
	ori temp0, (1<<TOIE2); 		;Overlow Interupt
	out TIMSK, temp0 			;enable

	sei							;global Interupts enable

loop:	SWITCH_LEFT_BACKLED_OFF
		SWITCH_RIGHT_BACKLED_OFF
		sbic pind,0				;Abfrage des Empfängers auf Null,da dieser auf LOW 
		rjmp loop				;gezogen wird bei Empfang
		SWITCH_LEFT_BACKLED_ON
		SWITCH_RIGHT_BACKLED_ON
		rjmp loop


		
TIM2_OVF:						;Interupt Service Routine für den Overflow des Timers2
		
	push temp0
	in temp0,sreg
	push temp0
	in temp0,tcnt2
	subi temp0,-0x25
	out tcnt2,temp0
	pop temp0
	out sreg,temp0
	pop temp0
reti
Für Fragen stehe ich jederzeit zur Verfügung!