Habe jetzt nochmal zusammengefasst (Weil etwas funktioniert)

Hier mein Code

Code:
#include <stdbool.h>
#include <stdio.h>
#include <asuro.h>
   int main(void)
{
   Init();
   char zC[2];
   unsigned char umschaltpunkt;
   int t = 0,z = 0;
/*******************************************************************************************/
while( 1 )
{
   if(Gettime() > umschaltpunkt)       // Umschaltzeitpunkt überschritten?
   {
   umschaltpunkt += 1000;              // neuen Umschaltzeitpunkt festlegen
   z++;
   }

if (PollSwitch() == 1)
   z=80;

if (PollSwitch() == 2)
   z=65500;

if (PollSwitch() == 4)
   z=32740;

if (PollSwitch() == 16)
   z=0;

/**********************************************************************/
      //sprintf(zC, "%d", z);      //Übertragen
      utoa (z, zC, 10);
      
      SerWrite(zC, 5);         //Übertragen
      SerWrite ("  zC\n\r", 6);   //Übertragen
   for (t=0; t< 40; t++)         //Übertragen
        {                     //Übertragen
        Sleep (72);               //Übertragen
        }                     //Übertragen
/***********************************************************************/


   

   if (z > 200)
      z=0;
}
   return 0;
}

Hier HT ausgabe
Code:
65528  zC
65529  zC
65530  zC
65531  zC
65532  zC
65533  zC
65534  zC
65535  zC             //So stimmt es Da ich oben z mit int deklarieert habe
0535  zC
1535  zC
2535  zC
3535  zC
4535  zC
5535  zC
6535  zC

Wenn ich z mit unsigned int deklariere:

Init();
char zC[2];
unsigned char umschaltpunkt;
int t = 0;
unsigned int z = 0;

Code:
10  zC
11  zC
12  zC
13  zC
14  zC
15  zC                    //Taster gedrückt
30000  zC                  // fangt er immer wieder bei null an 
1000  zC
2000  zC
3000  zC
4000  zC
5000  zC
6000  zC
7000  zC
8000  zC
9000  zC
1000  zC
1100  zC

Wieso?