in deiner print methode hast du
x = data[1];

zu viel drinne,
das mit der wertübrgabe überlass ich jemand anderen, vll. schreib ich heut nachmittag was dazu aber im moment würde ich nur unverständliches gebrabbel statt ner handfesten erklärung hinbekommen

kurzfassung "data" ist ein array, der bezeicher "data" ist gleichzeitig ein pointer auf den anfang des array, mit den eckigen klammern dahinter greifst du auf die werte des array zu, ACHTUNG indizes starten bei 0 und hören bei n-1 auf wobei n die größe des array ist

deklariert wird ein array entweder
char meinarray[5]; damit habe ich ein array von 5 char index also 0-4

oder

char meinarray[] = "blabla"; hier legt der compiler die größe fest, und zwar 7 nicht 6 !!!! ein asgeschriebener string endet nämlich auf eine binäre 0, also hat "blabla" 7 zeichen
möchtest du die größe eines array erfahren kannst du

sizeof(meinarray);

aufrufen und erhälst die anzahl an speicherplätzen im array

wenn dein array aus word (2 bytes) besteht, bekommst du zwar für
word myarray[5];
sizeof(myarray);
eine 5 raus, aber im speicher liegen 10 byte!!!!
wenn du einen pointer auf das array holst

byte* mypointer = myarray;
wird der compiler zwar warnen weil mypointer byte ist udn myarray word aber erfolgreich compilieren
wenn du jetzt
*(myarray+1) ODER myarray[1]
aufrufst bekommst du den wert an dem index 1 (als an 2ter stelle)
wenn du aber jetzt
*(mypointer+1)
benutzt, bekommst du das highbyte von wert 0 und das lowbyte von wert 1 als neuen wert vorgerechnet

postscript: ih hoffe du hast verstanden was ich meine sonst editier ich das heut nachmittag wenn ich muse habe oder wer anders erklärts besser ^^