打印

我是新手,想用51实现这样一个功能,怎么编?(想了很久了

[复制链接]
2066|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tanyuekang|  楼主 | 2007-2-1 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用51编这样一个功能:外部设备对p0口起作用(例如按键),设p00到p02为一个3位数据(设为a),例如001是代表1,011代表3,p03到p05也是如此(设为b),然后把a和b进行对比相减,即c=a-b或b-a,怎样编才好?(要用C语言)
我之前是想过这样的:a=P00*1+P01*2+P02*4;
b=P03*1+P04*2+P05*4;
但编译的时候说'*':bad operand type
希望各位指教一下啊。

相关帖子

沙发
雁舞白沙| | 2007-2-1 10:37 | 只看该作者

操作类型不同

P00 是位类型

位类型只是是0或者1,不能进行数值运算!

使用特权

评论回复
板凳
lixun00| | 2007-2-1 10:40 | 只看该作者

a = P0 & 0x07; b= P0 & 0x38;或者

sbit P0_0 = P0 ^ 1;
...
sbit P0_5 = P0 ^ 5;
a = P0_0 + ((unsigned char)P0_1<<1) + ((unsigned char)P0_2<<2);
...

使用特权

评论回复
地板
duanhnhy| | 2007-2-1 15:10 | 只看该作者

RE

;把P0的状态读到内存再进行一下处理不就OK了~!
;以下我写的小程序

            MOV A,P0       ;读P0状态
            PUSH A         ;P0状态暂存,方便得到数B
            ANL A,#0FCH    ;屏蔽高位,得到数A
            MOV NUM1,A
            POP A
            ANL A,#0E3H    ;屏蔽其他位,得到数B
            RR A           ;右移3位
            RR A
            RR A
            MOV NUM2,A
            MOV A,NUM1
            CLR C
            SUBB A,NUM2     ;此数即为A-B的结果

使用特权

评论回复
5
szzhengjin| | 2007-2-1 16:04 | 只看该作者

很基本的语句啦

unsigned char a,b,c;
a=P0 & 0x07;//取最低三位
b=(P0 & 0x38) >> 3;//取中间三位右移三位

c = a-b;
c = b-a;

使用特权

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

本版积分规则

11

主题

13

帖子

0

粉丝