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
<pre> pre ist gut gemeint. Im Forum aber bitte "code" (PicNick) </pre>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







Zitieren

Lesezeichen