hola,
te cuento, yo hice algo parecido a lo tuyo, pero utilice el port D y mi problema era ese, utilizar un solo port para manejar todo.
entonces cuando escribis algo en los 4 bits de datos tenes q hacerlo con una "OR" pq sino resulta q sobreescribis el resto de los pines, fijate si no tenes alguna mezcla de ese tipo,
ademas siempre tenes q recordar q luego de bajar la señal E debes volver a a borrar los bits de datos para q funcion la proxima OR
bueno espero q tengas suerte y sino sigue escribiendo y te paso mi ejemplo.
no olvide revisar tambien con este criterio el busyCheck y todo eso..
Suerte.