Problem s displayom - chyba po volani instrukcii

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 :slight_smile: .

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ě?