pirat777knj писал(а):Прошу помощи в доведении до ума)))
Вообще код эпичный.
В прерывании: "if (type-=0x44)"
Во-первых "type" должен быть "volatile", иначе компилятор его может выкинуть.
Во-вторых, вдумайся в "if (type-=0x44)"
Отнять 0x44 от type и если он "true" то что-то выполнить. True - любое значение кроме нуля. Сам type = "unsigned char". При вычитании из такого типа, когда новое значение будет отрицательным, байт просто пройдет через 0xff и опять станет >0. Шансов у переменной type, при вычитании 0х44, стать нулем - минимальный. Код после if будет исполняться практически всегда. И иногда будет исполнятся "else // Если датчика нет - отображать ошибку "
И вообще, что это за хитрое использование "{...}" ???
- Код: Выделить всё • Развернуть
if (type-=0x44)
{if (time<2500)
{zoff;
if (type==0x11)
{mon;
indicating(1);
}
Это же надо иметь бинарное мышление как у компилятора, чтоб понять такой код.
Если ты для "if" используешь один оператор, то делай без фигурных скобок:
- Код: Выделить всё • Развернуть
if (type-=0x44) бла-бла-бла;
Если в if используется несколько операторов, то:
- Код: Выделить всё • Развернуть
if (type-=0x44)
{
бла-бла-бла;
бла-бла-бла;
бла-бла-бла;
}
Но не так как у тебя...
И конечно заменить "if (type-=0x44)" на:
- Код: Выделить всё • Развернуть
type-=0x44;
if (type > 0)
{
бла-бла-бла;
бла-бла-бла;
бла-бла-бла;
}
Соответственно type должен быть не беззнаковым "unsigned char", а каким-нибудь "char", а лучше "byte" или каким-нибудь int_8, ну что прописано в заголовочных файлах типов переменных...