Forum: Mikrocontroller und Digitale Elektronik PIC variable Delay Routine


von Max (Gast)


Lesenswert?

Hallo,
ich suche eine möglichst einfache Routine, mit der ich einen "Delay" 
erzeugen kann, dessen Länge durch 24 Bit (Also 3 Register) bestimmt 
wird.
Mit anderen Worten, ich stecke einen 24 Bit langen Wert aufgeteilt in 
3x8 Bit in 3 Register und Rufe dann die "Delay" Routine auf, die dann 
genauso viele Takte wartet, wie hoch der Wert in den 3 Registern ist.
Natürlich wäre ein Delay von wenigen Takten nicht möglich (Mindestens 4 
schon mal wegen CALL und RETURN geschweige denn von der eigentlichen 
Delay Logik)
Der Delay sollte auf 1000 bis 1.000.000 Takte funktionieren.
Ich weiß nicht ob jemand so eine Routine kennt oder hat, aber ich komme 
gerade irgendwie nicht selbst drauf.
Ich benutze übrigens den PIC16F887.

Grüße Max

von Max H. (hartl192)


Lesenswert?

Ich würde den 16bit Timer in Software noch um ein paar bit erweitern.

von Kenner (Gast)


Lesenswert?


von Max (Gast)


Lesenswert?

Kenner schrieb:
> http://www.biltronix.com/picloops.html

Damit kann ich nichts anfangen, dass könnte ich auch selber.
Ich muss die Delay abstände dynamischen im Programm festlegen können.

Trotzdem Danke :)

von Max H. (hartl192)


Lesenswert?

Um welche Programmiersprache geht es eigentlich und was ist der Zweck 
des ganzen?

von Max (Gast)


Lesenswert?

Es geht um Assembler.
Und Zweck des ganzen ist es, dass ich dynamisch im Programm einen Delay 
erzeugen kann.
Interrupts bzw. die Timer kann ich dafür aber nicht benutzen.
Ich brauche die noch für einen anderen Zweck.

von Gerd B. (bertr2d2) Benutzerseite


Lesenswert?


von chris (Gast)


Lesenswert?

Ich such dir das macro raus.

von Max (Gast)


Lesenswert?

Gerd B. schrieb:
> Wie wäre es hiermit:
>
> http://hg.kewl.org/pub/pickles/file/18d5eac67b2b/include/delay.inc

Dass geht leider nicht, da das ein anderes Assembler ist.
Ich habe den Befehl "DJNZ" nicht zu verfügung.
Ich kann diesen nur durch 2 Befehle "DECFSZ" und "GOTO" emulieren, was 
aber 3 Takte und nicht 1 Takt dauert, was im verschachtelten zählen 
kompliziert wird.

von Max H. (hartl192)


Lesenswert?

Max schrieb:
> Und Zweck des ganzen ist es, dass ich dynamisch im Programm einen Delay
> erzeugen kann.
Ja, das ist klar, wozu braucht man aber ein 1'000'000 Zyklen langes 
Delay mit einer Auflösung von einem Tatzyklus?

Max schrieb:
> Interrupts bzw. die Timer kann ich dafür aber nicht benutzen.
> Ich brauche die noch für einen anderen Zweck.
Achtung, wenn nur ein einziges davon das Delay stört, wird das mit der 
Genauigkeit von einem Tatzyklus auch nichts mehr.
Wenn du das nicht gleichzeitig brauchst könntest du dir vllt. auch kurz 
einen Timer für die Wartezeit ausleihen.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.