【问题标题】:keil c51 weird masking behaviourkeil c51 奇怪的掩蔽行为
【发布时间】:2015-05-26 19:16:02
【问题描述】:

我正在尝试从 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 错误还是正在优化的东西。

【问题讨论】:

  • 看起来不错。你有汇编输出吗?
  • 您实际上是在测试 4 个引脚,而不是 2 个。您确定您是在比较类似的,其他 2 个输入是低的吗?如果您想测试 2 个引脚,代码应为 if((P1 & 0xa0) == 0xa0)
  • ORange 的类型是什么?你能包括声明吗?如果它不是至少 8 位,那么您的第二个 if 将永远不会是真的。

标签: microcontroller bitwise-operators 8051 keil c51


【解决方案1】:

变量被声明为带符号的字符。它应该是未签名的。

我被调试器愚弄了,它把监视变量显示为无符号。

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2021-10-08
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多