LCD 128x64 PIC16F877 nejde načíst hodnota bytu

Dobrý den,
Mám podobný problém s podobnou sestavou (PIC16F877A, displej 128x64 ST7920 (Digole 12864ZW - datasheet v příloze), kompilátor XC8 a následující kód:

#include <xc.h>
#define _XTAL_FREQ 20000000

#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF

#define DATA_OUT PORTD
#define RW PORTAbits.RA4
#define RS PORTAbits.RA5
#define EN PORTAbits.RA3
#define RST PORTAbits.RA0
#define PSB PORTAbits.RA2

void Send_Data(unsigned char data);
void Send_Command(unsigned char command);
void Set_GraphicMode();
void Initialise();
void Clear_Graphics();
void Write_String (unsigned Y ,char * string);

char message[16] =  "ahoj";

void main(void)
{
    __delay_ms(5000);       // Allow time for Vdc to settle on GLCD
    TRISD = 0x00000000;              //Set data port  B as output
    TRISB = 0x00000000;             // Set control port D as output
    TRISA = 0x00000000;
    PSB = 1; //nastaveni paralelni komunikace (podle DS))
    RST = 0;                      // Set reset line to low
    Initialise();                  //Initialise GLCD
    __delay_ms(200);
    while(1)
    {
        Send_Command(0b00000001); //smazani displeje
        Send_Command(0x80);    // Setting location to write characters. In this case 0,0 - Top Left Corner
        Send_Data(0x03);             // Sending a PREDEFINED character as described in ST7920 Datasheet.
        __delay_ms(3000);
        Send_Data(0x04);             // another one
        __delay_ms(3000);
        Send_Data(0x05);             // another one
        __delay_ms(3000);                   // Must send a Clear command otherwise display could be corrupt.
    }
    return;
}


//======================== All the command codes below can be found on the ST7920 datasheet ======================
void Initialise()
{
    __delay_ms(80);
    RS=0;
    RW=0;
    __delay_us(200);
    RST = 1;
    __delay_ms(10);                           // Short delay after resetting.
    Send_Command(0b00110000);    // 8-bit mode.
    __delay_us(200);
    Send_Command(0b00110000);     // 8-bit mode again.
    __delay_us(200);
    Send_Command(0b00001100);     // display on
    __delay_us(200);
    Send_Command(0b00000001);  // Clears screen.
    __delay_ms(20);
    Send_Command(0b00000110);  // Cursor moves right, no display shift.
    __delay_us(80);
    Send_Command(0b00000010);  // Returns to home. Cursor moves to starting point.
}


 //========= Setting the control lines to send a Command to the data bus ================
void Send_Command(unsigned char command)
{
    RW=0;
    RS=0;
    __delay_us(20);
    EN=1;
    DATA_OUT = command;
    __delay_us(50);
    EN=0;
}

//============= Setting the control lines to send Data to the data bus =====================
void Send_Data(unsigned char data)
{
    RW=0;
    RS=1;
    __delay_us(40);
    DATA_OUT = data;
    __delay_us(30);
    EN = 1;
    __delay_us(20);
    EN = 0;
    __delay_us(20);
}


 //======================= Sent Command to set Extanded mode ====================
void Set_GraphicMode()
{
    Send_Command(0b00110100); // Extended instuction set, 8bit
    __delay_us(100);
    Send_Command(0b00110110);   // Repeat instrution with bit1 set
    __delay_us(100);
}


 //=========== This function set all the pixels to off in the graphic controller =================
void Clear_Graphics()
{
    unsigned char x, y;
    for(y = 0; y < 64; y++)
    {
        if(y < 32)
        {
            Send_Command(0x80 | y);
            Send_Command(0x80);
        }
        else
        {
            Send_Command(0x80 | (y-32));
            Send_Command(0x88);
        }
        for(x = 0; x < 16; x++)
        {
            Send_Data(0x00);
        }
    }
}

//==== Send one character at the time from the 'message' string ===========
 void Write_String ( unsigned Y ,char * string )
 {
    Send_Command(Y);
    while(*string!= '\0')      // Looking for code signigying 'end of line' .
    {
        Send_Data(*string++);
    }
 }

Který jsem převzal odtud: microchip.com/forums/m830183.aspx
Ale musel ho upravit pro PIC16.
Čas na náběh LCD jsem nechal 5s, ale poté se nic nestane. Na displeji se nic neobjeví.
Nemohl by jste někdo prosím zkontrolovat správnost příkazů podle datasheetu?
Děkuji za odpověď!
Display 12864ZW.pdf (1010 KB)