@theodrin (1. post):
Also das "Bit" hab ich erlich noch nie bei dem C18 gesehen, wobei ich aber sagen muss, dass ich mich bei dem eher an den standard synthax von C halte , so weit es geht . Bei dem geht den Bits namen zu geben am einfachsten mit einem #define (also bei deinem Beispiel zB "#define LCD_RS PortB.1").

@TheScientist: mMn bist du zu schnell für das LCD. Schon bei der Abfrage der Busy-Flags musst du nach dem Enable mindestens 40µs warten, bevor das LCD bereit ist, die Daten herauszurücken. Aber das "Delay1TCY()" verzögert nur um 1 Befehlszyklus (also ein "nop" in ASM). Ich weiß jetzt nicht, wie hoch (oder eher hoffentlich, wie niedrig) du dein PIC getaktet hast, aber schon bei einem externen Takt von 4MHz ist das zu wenig. Bei Sprut stehen eigentlich recht gut die Timings für die einzelnen Schritte zum Ansprechen des Displays drin.

@theodrin: Wie schaut deine wait-routine aus? C18 benutz ich auch nicht seit sehr langem, aber mir ist noch keine Funktion untergekommen die wait_ms() heißt. Hast du auch geschaut, ob die wirklich 1ms Verzögerung erstellt (also pin toggeln und mit osci oder Frequenzcounter nachmessen)?

Ist das eure vollständige Initialisierung? Weil ihr müsst noch den ADC von den Pins des PICs abschalten.

lg
Mobius