Hallo,
was mir auf Anhieb auffällt, daß die beiden Subroutinen 'ausg' und 'ausgd' unterschiedlich sind, obwohl beide bis auf das Setzen / Rücksetzen von 'LcdRS' gleich sein müßten.
Warum wartest Du 2 mal 10 ms ? Es müßte doch 1 mal 10ms zwischen der Zeichenausgabe reichen und 1 ms zwischen Enable.
Dann ist mir nicht klar, warum 'LcdRS' auch noch an anderen Stellen im Programm gesetzt / gelöscht wird. Ist dieses Bit nicht für die Umschaltung zwischen Control und Data ?