Что-то мне кажется, что проще так status = (T >= B) xor (T >= E) xor (B >= E), где T - текущее время
B - время начала окна
E - время конца окна
XOR можно сделать инкрементом переменной и анализом младшего бита.
status = 0;
if(T >= B) ++status;
if(T >= E) ++status;
if(B >= E) ++status;
/* тут _младший_ бит в единичке - время в окне */
Кстати, совершенно не важно -- все времена двухбайтовые в BCD часах-минутах или же линейные в минутах.
Если сами разности не нужны, нужно только больше/меньше/равно, то можно пары hh:mm сравнивать как двухбайтовые двоичные числа, для AVR будет пара cp/cpc и переход. Или вообще cp/cpc в нужном порядке и сообразить чем инициализировать status и кто там нужен из
adc status, zero_reg sbci status, 0 sbci status, 0xFFи какое состояние младшего бита является активным. На этом ещё кое-что наиграется, вместо цепочек команд
двухбайтовое_сравнение обход_инкремента инкрементбудут цепочки
двухбайтовое_сравнение добавление_переноса