Das kommt drauf an, was du unter 'besser' verstehst

Übertragung in deinem Lieblingsformat. Gebräuchlich sind zB
- Binärübertragung oder BCD
-- little endian: low-byte(s)/nibbles zuerst
-- big endian: high-byte(s)/nibbles zuerst

- ASCII-Übertragung
-- als Dezimal- Binär, Hex- Oktalzahl, ...

Zur Darstellung ist ASCII nicht schlecht, erfordert allerdings mehr Arbeit auf dem µC zur Umwandlung, vor allem wenns keine ganzen Zahlen mehr sind. Der PC kann das eigentlich besser auswerten wenn's binär ankommt, weil er intern ja auch diese Darstellung nutzt und nicht zurückwandeln muss. Zudem braucht ASCII mehr Bandbreite bei der Übertragung. Um 16 bit zu übertragen hast du binär mit 2 Bytes, in ASCII brauchst du bis zu 5.

Binär schliesst allerdings eine Soft-Flusskontrolle aus.

Am einfachsten ist die Umwandlung nach Hex:
Code:
#include <avr/pgmspace.h>

extern void send (char);

static const prog_char hexdigits[] = "0123456789abcdef";

#define HEXDIGIT(i) \
   ((char) pgm_read_byte (hexdigits[(i)&0xf]))

foo()
{
   send ('0');
   send ('x');
   send (HEXDIGIT (x>>12));
   send (HEXDIGIT (x>>8));
   send (HEXDIGIT (x>>4));
   send (HEXDIGIT (x));
}
oder so.