.include "8515def.inc" ;Laden der Prozessordaten von dem Prozessor AT90S8515

; Josh-Programm Nummer 2 für den Typ Josh no.2: Speziell für den AVR-Prozessor AT90S8515

ldi 	r16,low(RAMEND)        ;Initialisierung, des Prozessors
out	SPL,r16                ;Initialisierung, des Prozessors
ldi	r16,high(RAMEND)       ;Initialisierung, des Prozessors
out	SPH,r16                ;Initialisierung, des Prozessors
ldi 	r16,0x05               ;Initialisierung, des Timers
out	TCCR0,r16              ;Initialisierung, des Timers

; Constanten werden festgelegt, um den Umgang der Programmierung zu erleichtern

.equ	OptischLinks=PIND2     ;PortD Nr. 2 wird mit den linken Sensoren geschaltet
.equ	OptischRechts=PIND3    ;PortD Nr. 3 wird mit den rechten Sensoren geschaltet
.equ	PIN1MOTOR1=PIND7       ;Die Motoren belegen PortD Nr. 4 bis 7
.equ	PIN2MOTOR1=PIND6       ;Die Motoren belegen PortD Nr. 4 bis 7
.equ	PIN1MOTOR2=PIND5       ;Die Motoren belegen PortD Nr. 4 bis 7
.equ	PIN2MOTOR2=PIND4       ;Die Motoren belegen PortD Nr. 4 bis 7

; Variablen werden festgelegt

.def	temp=r16               ;Temp-Variable

; Ports werden gesetzt

ldi	temp,0b11110000        ;Festlegen der Ein- und Ausgänge
out	PORTD,temp             ;Festlegen der Ein- und Ausgänge
out	DDRD,temp              ;Festlegen der Ein- und Ausgänge

;Programmteil

Main:
sbis	PIND,OptischLinks
rcall	chkr
sbis	PIND,OptischRechts
rcall	chkl
rjmp Main

chkr:
sbis	PIND,OptischRechts
rjmp 	beide
rcall	rueck
cr:
sbis	PIND,OptischLinks
rjmp 	cr
rcall	Rechts
rcall	osd
rcall	vor
ret

chkl:
sbis	PIND,OptischLinks
rjmp 	beide
rcall	rueck
cl:
sbis	PIND,OptischRechts
rjmp 	cl
rcall	Links
rcall	osd
rcall	vor
ret

Beide:
sbis	PIND,OptischRechts
rjmp 	Beide
sbis	PIND,OptischLinks
rjmp 	Beide
rcall	Links
rcall	osd
rcall	vor
ret

Vor:
sbi	PORTD,PIN1MOTOR1
cbi	PORTD,PIN2MOTOR1
sbi	PORTD,PIN1MOTOR2
cbi	PORTD,PIN2MOTOR2
ret

Rueck:
sbi	PORTD,PIN2MOTOR1
cbi	PORTD,PIN1MOTOR1
sbi	PORTD,PIN2MOTOR2
cbi	PORTD,PIN1MOTOR2
ret

Links:
sbi	PORTD,PIN2MOTOR1
cbi	PORTD,PIN1MOTOR1
sbi	PORTD,PIN1MOTOR2
cbi	PORTD,PIN2MOTOR2
ret

Rechts:
sbi	PORTD,PIN1MOTOR1
cbi	PORTD,PIN2MOTOR1
sbi	PORTD,PIN2MOTOR2
cbi	PORTD,PIN1MOTOR2
ret

;Warteschleifen

wt:                             
	ldi	r20, 1
	ldi	r21, 5
	ldi	r22, 200
delay:	dec	r22
	brne	delay
	dec	r21
	brne	delay
	dec	r20
	brne	delay
	ret
osd:
	ldi	r20, 20
	ldi	r21, 255
	ldi	r22, 255
	rjmp delay
