//Here every 50ms static uint8_t u8_100msCounter = 0; //100ms tick if (u8_100msCounter) u8_100msCounter--;I may be wrong here, but when will this ever run? You reset u8_100msCounter to 0 every time the ISR fires.
The code is ok, "u8_100msCounter" is initialized to zero only once (during declaration).