... weil der String so definiert ist: char ergebnis[] = {'0','0','0'};

Wenn der Wert nicht dreistellig ist werden trotzdem die führenden Nullen ausgegeben. Wenn du das ändern willst - nur zu :)

Die Werte schwanken vermutlich weil es ein asuro ist. Minimale Hardware erfordert eben pfiffige Software. Wenn du die Funktion testen willst:

unsigned int x;
for(x=0;x<1000;x++) PrintChar(x);