Странное маскирующее поведение keil c51

Я пытаюсь прочитать два контакта с контроллера C8051F040.

Чтение порта работает напрямую, но сохранение того же значения порта в переменной не работает, даже если отладчик показывает правильное значение.

// This works
if((P1 & 0xF0) == 0xa0) 
{   
    YEL_LED = 1;            //Turn on
}
else
{
    YEL_LED = 0;            //Turn off
}

// This does not work even though the debugger 
// shows the correct value 0xa0 for the var
ORange = (P1 & 0xF0);
if(ORange == 0xa0)          
{
    YEL_LED = 1;            //Turn on
}
else
{
    YEL_LED = 0;            //Turn off
}   

Это ошибка KEIL c51 или что-то оптимизируется.

1 ответ

Переменная была объявлена ​​как char, которая подписана. Это должно быть без знака.

Я был одурачен отладчиком, который показывал переменную watch как unsigned.

Другие вопросы по тегам