Hallo, ich habe nur eine ganz kleine Frage: Bei meinem PIC12 möchte ich der __delay_us() Funktion eine unsigned int (16 bit)variable übergeben, aber es funktioniert nicht. Kann mir Jemand sagen, wie ich den Wert der Variablen übergeben kann? Ich programmiere in MPLAB mit dem HIGH-TECH Compiler. Viele Grüße
Yasin schrieb: > möchte ich der __delay_us() Funktion eine unsigned int > (16 bit)variable übergeben, aber es funktioniert nicht. /bloedelmodus_an du mußt igned integer übergeben, damit man auch _delay_us(-100) eingeben kann. Damit wird der nächste Befehl schon xx mikrosekunden vor Abarbeitung des aktuellen Befehls ausgeführt. Vorsichtig anwenden, kann Effekte im aktuellen Zeit-Kontinuum verursachen! /bloedelmodus_aus nee, zeigt doch mal deinen Code, dann ist das alles einfacher zu bewerten was falsch sein könnte
und was sagt die Hilfe des Compilers, was für eine Variable die Funktion erwartet?
Der Compiler sagt: inline delay argument must be conastant. Geht das dann überhaupt? Der Code ist nur:
1 | #define _XTAL_FREQ 4000000
|
2 | unsigned int x; |
3 | x = 100; |
4 | __delay_us(x); |
Ja ein #include "delay.h" würde ich auch vermissen. Ansonsten würde ich mich bei solch einem 'Programm' als Compiler auch weigern! Ich würde schon aus Protest keine Fehlermeldung bringen sondern einen Link auf ein Tutorial....
Rene Schube schrieb: > Ja ein #include "delay.h" würde ich auch vermissen. Sicher? Im Manuel vom HIGH-TECH steht da nix von. Außerdem funktioniert es einwandfrei, solange ich Zahlen übergebe. Nur mit der Variablen funktioniert es nicht.
Yasin schrieb: > Der Compiler sagt: inline delay argument must be conastant. Na dann ist doch alles klar. Du mußt eine Konstante übergeben, was du hier: > unsigned int x; > x = 100; > __delay_us(x); nicht tust, denn x ist keine Konstante, sondern eine Variable. Wegstaben Verbuchsler schrieb: > du mußt igned integer übergeben, damit man auch _delay_us(-100) eingeben > kann. Damit wird der nächste Befehl schon xx mikrosekunden vor > Abarbeitung des aktuellen Befehls ausgeführt. Vorsichtig anwenden, kann > Effekte im aktuellen Zeit-Kontinuum verursachen! Das erinnert mich an den COMEFROM-Befehl in Intercal. Der funktioniert quasi wie goto, nur umgekehrt.
Versuchs mal mit einer Erklärung dessen, was du eigentlich erreichen willst. Vielleicht wirds dann was.
Wie sollte das gehen? Dazu müßte sich das Programm ja dynamisch selbst neu compilieren. ;-) Konstanten sind zur Compilezeit bekannt, Variablen erhalten aber erst zur Laufzeit ihren Wert.
Yasin schrieb: > Ist es denn irgendwie möglich meine Variable in eine Konstante > umzuwandeln? Für die Frage ziehst du dir jetzt ein Ohr lang. SELBSTVERSTÄNDLICH NICHT! void Delay(unsigned char nDelay) { for (unsigned char nInd = 0; nInd < nDelay; nInd++) _delay_ms(1); } Dauert zwar ein Taktchen länger, wegen der Schleife und dem Funktionsaufruf, aber wenn es 100 Pro sein muss, nimmt man einen Timer. mfg.
Peter II schrieb: > oder eine schleife Hätte ich nicht soviel dazugesülzt, wäre ich der schneller gewesen. mfg.
Thomas Eckmann schrieb: >> oder eine schleife > Hätte ich nicht soviel dazugesülzt, wäre ich der schneller gewesen. dein code ist nur zu lang.
Ok, eine Schleife ist keine schlechte Idee. Es ging mir eigentlich nur darum, Variablen so auszugeben, dass ich sie am Oszi auslesen kann. Mit dem Debugger wird das nichts, weil die Variablen vom Timer abhängen. Danke für die Hilfe!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.