Hallo zusammen,

ich bin blutjunger Anfänger auf dem Gebiet der AVR-Programmierung in Assembler.

Deshalb habe ich auch folgendes Problem ;o)

Ich habe ein Prg. (vielen Dank an alle Teilnehmer der Foren) erstellt. Wenn der Komparator nun schaltet, wird dei Interrupt ANA_COMP ($007) gesetzt.
Soweit sogut!

Nun soll die Routine "Delay" das Singal am Port B2 um eine Sek. z.b. verzögern. Es können aber auch 892,5ms sein, es geht hier nicht um genaue Werte.

Da schwierige ist, das Port B2 retriggerbar sein soll.
Also, wenn der Interrupt das "Delay" auslöst und es kommt während der Delayzeit erneut ein Interrupt, dann soll die Zeit neu gestartet werden.

Ein retriggerbares Monoflop also.
Ich habe diese Frage auch in ein weiteres Forum gesetzt, denn ich muss mich langsam mit der Umsetzung des Problems beeilen. Sitze nun bald schon 24 Stunden an dieser einen Sache.

Wäre net, wenn mir bitte jemand helfen könnte.

Danke im Voraus und Grüße

popi

Code:
.include "tn15def.inc"       ; Definitionsdatei einbinden

rjmp Init
.org $007 					;ana_comp vector adres
rjmp ANA_COMP 				;interrupt handler


Init:
		ldi r16,0b00001011
		nop
		nop
		out ACSR,r16		;analogue comp interrupt enable
		sei 				;global interrupt enable

Main:	ldi r16, 0x00    	; 0b11111100 in r16 laden
		out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben
 		;reti
		rjmp Main			; Sprung zur Marke "ende" -> Endlosschleife

ANA_COMP:
		ldi r16, 0x04       ; 0xFF ins Arbeitsregister r16 laden
		out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
		ldi r16, 0x04    	; 0x04 in r16 laden
		out PORTB, r16   	; r16 ins IO-Register PORTB ausgeben
		ldi r17, 0xff		; r17 auf 255 für Delay setzen
		rcall Delay
		ldi r16, 0x00    	; 0b11111100 in r16 laden
		out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben
 		reti

Delay:
		dec r17				; Vermindert Inhalt in r17 um 1
		brne Delay  		; Sprung nur, wenn r17 nun nicht 0 ist.
		ret
<pre> pre ist gut gemeint. Im Forum aber bitte "code" (PicNick) </pre>