Moin,
Ich muss gestehen, dass ich noch nicht mit dem Pic18 gearbeitet habe, nur die 16er aber mit dem CCS compiler.
Welchen Compiler benutzt du? Den C18?
Mein erster Tip ist: schau nach, ob die delay_us routine überhaupt floating point verarbeiten kann, denn das machst du ja bei ner Teilung von 1/irgendwas. Ich glaube, dass nur ganzzahlen, vielleicht sogar nur 8bit unterstützt werden.
Dann versuche ich gerade den Code zu verstehen. Die letzte Zeile ist ein Abbruch wenn ne Taste gedrückt wird oder? Ich würde dir raten statt ner IF und dann Goto geschichte eine While-Schleife zu nehmen, wenn schon C, dann auch richtig.
float freq=0.0f; was macht das f da hinten dran? Ist wohl für die Syntax des Compilers wichtig, oder?
Was du am Anfang mit dem Freq machst, versteh ich nicht ganz, ebenso was diff genau tut und warum du es immer verzehnfachst, soll das für die 10er potenzen sein?
Ich würde dir empfehlen mal die software in nem Simulator laufen zu lassen, z.B. in MPLAB, um dann den Code genau zu betrachten, was da eigentlich passiert.
Die Long könnte wohl irgendwann überlaufen, aber die float... das dauert ne Weile..