Writes to internal EEPROM are self-timed. So you don't need to pause or wait for a flag.

My guess is that it's saving the value to EEPROM. But it's not Reading it before trying to display it.

As you follow through from the start of the program, nothing happens to ModeStore. Then just before GetBytes, it does GOTO Main, and the first statement in Main: is the hserout to display ModeStore, but it hasn't been read yet.

Had that "call DlyTime" just before main been executed, it might have read the value, except that ModeCnt was set to 6 at the beginning, so no matter what, the EEPROM value would end up as 6. Even if it had been written to something else before.

I'd say, read the value from eeprom first, and only set it to 6 if the value read is 255 (erased).

Or set the default value with EEPROM or DATA, and don't set ModeCnt at the beginning.
<br>