打印

能否组合这两个IO口的状态位?

[复制链接]
2167|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xzhenggen|  楼主 | 2007-7-20 08:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
xzhenggen|  楼主 | 2007-7-20 10:29 | 只看该作者

为什么C51里,不能使用status = (P2_3<<0)|(3_6<<1);

那我如何判断它的组合状态:00为0,01为1,10为2,11为3.

使用特权

评论回复
板凳
ayb_ice| | 2007-7-20 10:47 | 只看该作者

可以这样

status = ((unsigned char)P23)|(((unsigned char)P36)<<1);
但是还不如下面方便易懂
status = 0;
if(P23) status |= 1;
if(P36) status |= 2;
switch(status)
{

}

使用特权

评论回复
地板
xzhenggen|  楼主 | 2007-7-20 11:16 | 只看该作者

上面的判断语句好像不能整合啊。

if(P23) status |= 1;
if(P36) status |= 2;
如果我现在的引脚状态此时是:P23是低电平(0),P35也是低电平(0)。
那我如何实现把P23,P36设置成uchar idata status=0;中的status的第0位及P1位,就像P23,P36是status的默认的第0位,第一位一样。我最终的要求就是实现P23,P36是status的默认的第0位,第一位.判断检测两个电位序列,00为0,01为1,10为2,11为3.

使用特权

评论回复
5
ethunter| | 2007-7-20 13:18 | 只看该作者

3楼的方法可行

status这个变量定义成uchar,那么他就有两为,和1取|关系就是控制低位,和2取|的关系是控制高低,这样你在swicth里只要用4个case就可以了,如分析有错误请指出,新人出来砸道

使用特权

评论回复
6
xzhenggen|  楼主 | 2007-7-20 14:11 | 只看该作者

还是不能识别它的状态。

使用特权

评论回复
7
zhiwei| | 2007-7-20 14:48 | 只看该作者

三楼方法很好啊

但是还不如下面方便易懂
status = 0;
if(P23) status |= 1;
if(P36) status |= 2;
switch(status)
{

}
读两个口状态到status里面,status值为0~3,就是那四个组合状态了。
也可以这样:也是4个状态,可能效率还要高一点。
if(P23)
{
  if(P36)
  { }
  else
  { }
}
else
{
  if(P36)
  { }
  else
  { }
}

使用特权

评论回复
8
xzhenggen|  楼主 | 2007-7-20 16:35 | 只看该作者

多谢了,没有更好的方法,上面的也很不错。

正是我想要的,为什么我就想不到呢?真晕死了。

使用特权

评论回复
9
Airwill| | 2007-7-20 21:04 | 只看该作者

这样不行吗?
status = ((P2>>3)&1)|((P3>>5)&2); 

使用特权

评论回复
10
xzhenggen|  楼主 | 2007-7-21 15:38 | 只看该作者

呵呵,不错!!能否先定义下来?。。。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

529

帖子

1

粉丝