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