Deklaration:

unsigned char i;

Definition/Initialisierung:

i = 0;

Man kann auch beides mit einmal machen, kommt halt immer drauf an:

unsigned char i = 0;

Wenn du in einer Header-Datei eine Variable global anlegst, dann darfst du sie dort nur deklarieren. Initialisiert wird sie in der zugehörigen C-Datei.
Arbeitest du mit einer Variable lokal in einer Funktion o.ä., dann dürfen beide Schritte mit einem mal ausgeführt werden.

Alle Klarheiten beseitigt?