The variable is defined in *.h:
static unsigned char cPwLe[3] = {0};
cPwLe[cCh] = Power_Level(cP[cCh]); //Here value is right
cPower = cPwLe[cCh]; //Here value is always 0
It's called a global variable because it's recognized almost everywhere, just like your American express card. The danger is modifying it in an isr and using it several places in main loop code assuming it is doesn't get modified between reads. It usually leads to much hair-pulling and cursing.
using it several places in main loop code assuming it is doesn't get modified between reads that is not the most common reason for "much hair-pulling and cursing". The one most get caught on is reading an int/short/long (anything beyond 8 bits) in main without disabling interrupt. Erik