Pravdu může mít radius to přepnutí pinu Enable do nuly a hned zas do jedničky může překladač při optimalizaci vyhodnotit, jako že jsi se zbláznil a vyhodí ti to .
Naopak, co píše standa33 je nesmysl - 0xC0 je binárně 0b11000000 ať je char signed, nebo unsigned - to získává smysl až při nějakých výpočtech - ne v pouhém bitovém posunu jako v tomto případě - mimochodem ve většině překladaču se dá v nějakém nastavení najít jestli zápis char znamená unsigned char, nebo signed char, případně si to nastavit.
Největší jistotu ale budeš mít, když to tam budeš psát celé - unsigned char - nebo si definovat vlastní typ - třeba:
typedef unsigned char byte;
typedef unsigned char u_char8;
atd, atd....
A jinak tvoje funkce se docela liší od mé - spolehlivě fungující - úprava té tvojí
void sendAByte(char sendBites) {
//E = 1;
LCD1 = 1 & (sendBites >> 7);
LCD2 = 1 & (sendBites >> 6);
LCD3 = 1 & (sendBites >> 5);
LCD4 = 1 & (sendBites >> 4);
E=1; // E = 0;
__delay_ms(1);
E=0;// E = 1;
LCD1 = 1 & (sendBites >> 3);
LCD2 = 1 & (sendBites >> 2);
LCD3 = 1 & (sendBites >> 1);
LCD4 = 1 & sendBites;
E=1; // E = 0;
__delay_ms(1);
E=0;// E = 1;
__delay_ms(2);
RS=0;
}
tedy zápis do LCD na náběžnou hranu na E - předpokládám, že tvůj displej má klasický hd44780 řadič.
Taky ta vložená funkce **__delay_ms(1); ** by měla zajistit, aby nedošlo k té optimalizaci při překladu.
Taky by bylo dobré, dát k dispozici celý kód - a hlavně definice těch výstupů (LCD1…4,E,RS atd).
LCD1 máš na displeji na D4, nebo D7? Neposíláš to tam obráceně?