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
Can you tell why? No. Nor can anybody else, from what you wrote. You're not giving anywhere nearly enough information for that. Just a MOD caculating result in the mistake: In what mistake? When be corrected to if (){} and add statement There's nothing to be corrected about what you wrote --- ripped completely out of context as it is, it's impossible for anyone not sitting on your chair to find out what "correct" might possibly mean, for this snippet of code.
Study the meaning and use of the volatile keyword. Code generated for the main routine might not use the latest value of a variable updated by an ISR unless that variable is declared volatile.