Forum: Compiler & IDEs Assambler delayschleife in C code


von Florian (Gast)


Lesenswert?

Hallo, ich habe eine Bitte.
Ich kenne mich mit Assembler überhaut nicht aus und bin froh das ich 
meine Sachen in C so einigermaßen hin bekomme. Aber ich brauche eine 
sehr genaue delay Funktion, in der ich einfach eine gewisse Anzahl von 
Takten warte.

Die Schleife habe ich mit dem "AVR delay loop Generator" erstellt. Nur 
ist der Code noch nicht ganz so wir ich ihn bräuchte.
Die Funktion muss flexible sein. Ich habe ein Array in dem delaywerte 
steht. Der ausgewählte Wert muss an die Schleife gegeben werden. Aber 
wie mach ich das und wie bekomme ich den Assamblercode in mein C code?

Ich stelle mir das grob so vor:
(das es so nicht geht ist mir klar)

1
uint16_t wait;
2
uint16_t array[99]
3
wait = array[i];
4
while ( !(PINB & (1 << PB0)) ) ;
5
6
7
//das hat der generator erzeugt und soll nun irgenwie da rein. 
8
9
; ============================= 
10
;    delay loop generator 
11
;     452 cycles:
12
; ----------------------------- 
13
; delaying 450 cycles:
14
          ldi  R17, $96
15
WGLOOP0:  dec  R17
16
          brne WGLOOP0
17
; ----------------------------- 
18
; delaying 2 cycles:
19
          nop
20
          nop
21
; ============================= 
22
23
PORTB |= (1 << PB1);
24
PORTA &= ~(1 << PB1);

Könnt mir vieleicht jemand behilflich sein? Das ist für euch bestimmt 
keine Herausforderung, oder?

Mfg
Florian

von Karl H. (kbuchegg)


Lesenswert?

Florian wrote:
> Hallo, ich habe eine Bitte.
> Ich kenne mich mit Assembler überhaut nicht aus und bin froh das ich
> meine Sachen in C so einigermaßen hin bekomme. Aber ich brauche eine
> sehr genaue delay Funktion, in der ich einfach eine gewisse Anzahl von
> Takten warte.

Wenns Taktgenau sein muss, dann nimm einen Timer und betreibe ihn
im CTC Modus.

Ansonsten: Wenn die exakte Zeit nicht ganz so kritisch ist,
dann benutze die _delay_ms Funktion aus <avr/delay.h>.
Aber Achtung: Diese Funktion hat Einschränkungen, was die
maximale Zeit anbelangt. Ist im Header File dokumentiert,
also unbedingt da rein schauen.

von Falk B. (falk)


Lesenswert?


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.