找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5913|回复: 16
打印 上一主题 下一主题
收起左侧

51单片机P2口赋值问题

[复制链接]
跳转到指定楼层
楼主
ID:442990 发表于 2020-4-21 11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教一个问题:

#define motor(x) {p2&=0xf0;p2|=x},这是怎么给P2口赋值的,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:734207 发表于 2020-4-21 11:37 来自手机 | 只看该作者
你确定是这个端口吗
回复

使用道具 举报

板凳
ID:734207 发表于 2020-4-21 11:37 来自手机 | 只看该作者
我觉得这个端口不对吧
回复

使用道具 举报

地板
ID:442990 发表于 2020-4-21 15:15 | 只看该作者
主函数中调用motor(x),x=0x01等,该程序是驱动步进电机的,分别给不同相供电
回复

使用道具 举报

5#
ID:220661 发表于 2020-4-21 20:39 | 只看该作者
这个得结合电路连接了,看似是P2低位四位驱动输出,先清0,再赋值的,如果是那种玩具电机,就逐位为1.
回复

使用道具 举报

6#
ID:311846 发表于 2020-4-22 11:58 | 只看该作者
在51中一般你这个是P2端口组,代表这P2^0到P2^7的8个端口,p2&=0xf0,把0xf0转变为二进制为11110000再与P2的8个IO口做位与运算,是把P2^0到P2^3四个IO口赋值为0,P2^4到P2^7端口不变,p2|=x就是将X的值赋值给P2的8个IO,x为1字节=8个比特,每个比特代表一个IO
回复

使用道具 举报

7#
ID:442990 发表于 2020-4-22 17:21 | 只看该作者
十分感谢各位回复!谢谢!
回复

使用道具 举报

8#
ID:97249 发表于 2020-4-22 19:22 | 只看该作者
#define motor(x) {p2&=0xf0;p2|=x},
等于
#define motor(x)  {p2=p2&0xf0;p2=p2|x},
p2&0xf0低4位 置0,
回复

使用道具 举报

9#
ID:97249 发表于 2020-4-22 22:58 | 只看该作者
权威人物 发表于 2020-4-22 11:58
在51中一般你这个是P2端口组,代表这P2^0到P2^7的8个端口,p2&=0xf0,把0xf0转变为二进制为11110000再与P2 ...

p2|=x就是将X的值赋值给P2的8个IO,----这一句是有误的。
p2|=x相当:p2=p2|x   p2与x进行或运算再赋值给p2.
回复

使用道具 举报

10#
ID:442990 发表于 2020-4-23 07:52 | 只看该作者
@权威人物@红尘有你,二位的解答让我学习了,非常感谢!
回复

使用道具 举报

11#
ID:191511 发表于 2020-4-23 10:16 | 只看该作者
宏定义里前一句,与0xf0求&,是为了给低4位清零,高4位保持原来的值不变,这个是&的逻辑运算特性决定的。下一句是P2口在上一句结果上和输入参数x求或操作。
其实这两句最后的结果应该是在保持高4位不变的情况下,把x的值传入P2口。从而也可以猜出来,x的值低4位有效(有效指的是有可能值是0,也可能非0),而高4位应该是0。如果不是0,会修改P2高4位值,与第一句操作不符。
回复

使用道具 举报

12#
ID:519352 发表于 2020-4-23 10:49 | 只看该作者
motor(x) 等效为 {p2=p2&0xf0;p2=p2|x}
回复

使用道具 举报

13#
ID:442990 发表于 2020-4-23 13:11 | 只看该作者
银河天地 发表于 2020-4-23 10:49
motor(x) 等效为 {p2=p2&0xf0;p2=p2|x}

假如x分别等于0x09和ox01,P2值各是多少?
回复

使用道具 举报

14#
ID:538345 发表于 2020-4-23 13:33 | 只看该作者
P2口高四位 为1,带参数的宏定义的话,则P2|=x,即只会对低四位进行操作看具体赋值多少即可。
回复

使用道具 举报

15#
ID:672349 发表于 2020-4-23 13:36 | 只看该作者
学习了
回复

使用道具 举报

16#
ID:97249 发表于 2020-4-24 11:09 | 只看该作者
jhz931920 发表于 2020-4-23 13:11
假如x分别等于0x09和ox01,P2值各是多少?

p2=0x09&0xf0   =  0
p2= o|0x09 = 0x09
x=0x01时也是一样。楼主要加强位运算的学习啊
回复

使用道具 举报

17#
ID:442990 发表于 2020-4-24 16:46 | 只看该作者
红尘有你 发表于 2020-4-24 11:09
p2=0x09&0xf0   =  0
p2= o|0x09 = 0x09
x=0x01时也是一样。楼主要加强位运算的学习啊

收到!谢谢指导!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表