请教一下各位: 我用51单片机的普通IO口的操作技巧。

请教一下各位:我用51单片机的普通IO口定义了一组开关,就像sbitS1A=P0^1;sbitS1B=P0^2;sbitS2A=P0^3;sbitS2B=P0^4;的形式... 请教一下各位:
我用51单片机的普通IO口定义了一组开关,就像
sbit S1A = P0^1;sbit S1B = P0^2;sbit S2A = P0^3;sbit S2B = P0^4;的形式,但是调用的时候S1A、S1B和S2A、S2B是分组调用的,而且动作都一样,比如:if (a=1){S1A=1;S1B=1;S2A=1;S2B=1;}有办法用一组简单的语句(像FOR循环之类的)让各个分组都进行相同的动作而不是分别单独写各个分组的动作吗?
因为用端口操作不方便,所以用了位操作。所以对端口赋值的方法不太适用这个程序。
展开
 我来答
橙芯电子
2012-10-05
知道答主
回答量:15
采纳率:0%
帮助的人:17.1万
展开全部
这个简单啊,直接对P0口进行位操作就可以了,但是如果其他地方用到P0口的话不要用赋值操作如:P0=0x1e;这样会影响P0口其他位的值。最好如下:
#define S1 P0
开:S1 |= 0x1e;

关:S1 &=0xe1;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
领航circuit
2012-10-17 · TA获得超过178个赞
知道小有建树答主
回答量:162
采纳率:100%
帮助的人:130万
展开全部
如果你只用p0的这几个口,你可以用P0=0xf0代替。也可以用一函数
void sab(bit a,b,c,d)

大括号
s1a=a
s2a=b
……
直接调用这个函数就行了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ywhjp
2012-10-05 · TA获得超过1299个赞
知道小有建树答主
回答量:1002
采纳率:60%
帮助的人:432万
展开全部
可能直接写P口, 不用单独一位一位写

可以定义动作为数组啊, 根据动作输出数组到端口就好了
追问
这样应该是可以的。不过这个程序的两个判断参数的组合有144个,要输出到3.5个8位端口,都计算出数组再给端口输出好像很浪费资源呀。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iamtian
2012-10-05
知道答主
回答量:21
采纳率:0%
帮助的人:12.9万
展开全部
直接端口赋值P0=0x1e;就OK了亲!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
panhanrui139
2012-10-05 · TA获得超过478个赞
知道小有建树答主
回答量:633
采纳率:100%
帮助的人:293万
展开全部
这个问题太深奥了,看公式都把我看晕了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式