SRT noch was

w muss als char oder unsigned char deklariert sein
alternativ als array
char w[1];
der ausdruck
w = (char)a; wirkt so nicht ... um das ascii zeichen a zu erhalten musst du 'a' schreiben. (shift+"#" fürs einfache hochkomma)

und serwrite erwartet einen pointer auf ein char array ... wenn du nur eine variable hast musst du ihre adresse übergeben, also
serwrite(&a,1); & löst hier die adresse der varuiable a auf

bei einem array ist der bezeichner OHNE eckige klammer schon ein pointer auf den anfang also

char WA[1]; // bei der deklaration gibt die ziffer die anzahl der felder im array an
WA[0] = 'a'; // beim zugriff aufs array IMMER darauf achten das du mit dem index arbeitest und der beginnt bei 0 und hört bei (länge - 1) auf
serwrite(WA,1);

ansonsten

char w = 'a';
serwrite(&w,1);