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>
Lesezeichen