;#########################################################
;##					    ENTPRELLEN						##
;##			Programm um das Entprellen auszutesten		##
;##					Toggelt leds an-aus					##
;##						10-09-2003						##
;##						 M. Jansen						##
;#########################################################	

.nolist
.include "4433def.inc"
.list
.def temp = r16
.def oldstate = r17
.def state = r18
.def led = r19
.def counter = r20
.equ loops = 3
.equ start = 256 - 244				; 1/32 sec
;----------------------
rjmp reset
reti
reti
reti
reti
reti
rjmp timer0
;----------------------
reset:	
	;stack:
	ldi temp, ramend
	out sp, temp
	
	;I/Os:
	ldi temp, 0xff
	out DDRC, temp				; C = ausgang; ACHTUNG: 6 Ausgänge!!!
	clr led
	ldi temp, 0x00
	out DDRB, temp				; B = eingang
	
	;Timer:
	ldi temp, 1<<TOIE0
	out TIMSK, temp				
	ldi temp, start
	out TCNT0, temp
	ldi temp, 0b00000101
	out TCCR0, temp
	ldi counter, loops
	
	sei
	rjmp main
;---------------------
main:
	out portc, led
	rjmp main
;---------------------
timer0:
	dec counter					; counter - 1
	brne restart				; wenn counter>0 dann restart

	ldi counter, loops			; counter wieder aufladen
	mov oldstate, state			; alten status wegschieben
	in state, PINB				; neuen einlesen
	cp state, oldstate			; vergleichen
	breq ende					; wenn nicht gleich dann ende, sonst...
	sbis pinb,0					; überspringe wenn bit0=1
	rjmp test
	reti
	
test:
	cpi led, 0x00
	breq aus
	cpi led, 0xff
	breq ein
	reti
ein:
	ldi led, 0x00
	reti
aus:
	ldi led, 0xff
	reti
ende:
	reti
	
restart:
	ldi temp,start
	out TCNT0, temp
	reti