Das kann alles und nichts sein.
Man müsste deinen Code bzgl. Timing und die magischen Kommandos mit dem
Datenblatt deines nicht angegebenen LCD Controllers vergleichen, um
herauszufinden, ob da alles stimmt.
Dann müsste man auch wissen welchen µC du verwendest und nachforschen,
ob du so den so eingestellt hast und das Programm so übersetzt hast,
dass die angegebenen Wunschtimings auch die realen Timings sind. Wenn
genau der gleiche µC-Aufbau nur mit anderem Programm im 8-Bit-Modus
funktionierte, ist das wahrscheinlich keine Fehlerursache.
Dann müsste man noch wissen, wie das LCD angeschlossen ist, insbesondere
ob die nicht benutzten Datenleitungen des LCD über Pulldowns an GND
hängen, d.h. sicher auf log. 0 kleben. Dazu müsste man den Schaltplan
kennen. Wenn genau der gleiche µC-Aufbau nur mit anderem Programm im
8-Bit-Modus funktionierte, ist das möglicherweise eine Fehlerursache,
weil die jetzt unbenutzen Leitungen Tristate, d.h. undefiniert sind.