	LIST	p=16F84A

#include <p16f84a.inc>

warte	equ	0Ch

		org	00h
		goto	main

		org	0Ah
main		clrw
		movwf	PORTA		;alle A auf 0
		movwf	PORTB		;alle B auf 0
		bsf	STATUS,RP0	;Speicherbank 1
		movlw	06h
		movwf	TRISA		;A1+2 als Eingänge, alle anderen als Ausgänge
		clrw
		movwf	TRISB		;alle B als Ausgänge
		bcf	STATUS,RP0	;SPeicherbank zurück auf 0

Eingang		btfsc	PORTA,2		;A1 = 2?
		goto	Empfangen	; Ja: Empfangen
		goto	Eingang		; Nein: Weiter warten

Empfangen	bsf	PORTB,2		;LED (rot) anschalten als Eingangsbestätigung
		

Schalter	btfss	PORTA,1		;Schalter gedrückt?
		goto	Schalter	; Nein: weiter warten
		call	wait
		bcf	PORTB,2		;LED (rot) aus
		bsf	STATUS,RP0
		bcf	TRISA,2		;A2 als Ausgang benutzen
		bcf	STATUS,RP0
		call	wait
		bsf	PORTA,2		;Antwort senden
		bsf	PORTB,3		;LED (grün) an als Sendebestätigung
		call	wait
		bcf	PORTA,2		;Senden abgeschloßen
		call	wait
		bsf	STATUS,RP0
		bsf	TRISA,2		;A2 wieder als Eingang
		bcf	STATUS,RP0

clear		btfss	PORTA,1		;A1=1? (Schalter gedrückt?)
		goto	clear		; Nein: warten
		clrw
		movwf	PORTB		;LEDs aus
		goto	Eingang

wait		movlw	0FFh
		movwf	warte		;Warte mit 255 laden
wait_loop	decfsz	warte		;255 Takte warten
		goto	wait_loop
		return

	END
