OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8252|回复: 22

新人求助,关于不连续IO口整体赋值问题

[复制链接]

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-3-4
在线时间
0 小时
发表于 2015-4-21 14:11:02 | 显示全部楼层 |阅读模式
5金钱
初学单片机,想请教一下,如何将不连续的IO口的值赋予一个变量,比如说P2.2 P2.3和P3.2赋予一个变量,使其值为010
t = P2^2<<2 | P2^3<<1 | P3^2
这是我在网上找到的,好像不能工作。
谢谢各位大神了

最佳答案

查看完整内容[请看2#楼]

首先设定2个变量T1,T2,T,    2 &= 0X0F;//也就是高位清零,低位不变,然后让P2 |= 0X00;// 也就是整个P2口都不变,当然也就保证了P2的高4位不变了,然后将T1 = 2;//将P2的值赋值给T1,同样的道理 3 &= 0XF0;//低四位清零 T2 = 3;//将P3口低四位的值赋值给T2,然后T = T1 |T2;就可以了,与或非建议你看看C语言
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 14:11:03 | 显示全部楼层
首先设定2个变量T1,T2,T,    2 &= 0X0F;//也就是高位清零,低位不变,然后让P2 |= 0X00;// 也就是整个P2口都不变,当然也就保证了P2的高4位不变了,然后将T1 = 2;//将P2的值赋值给T1,同样的道理 3 &= 0XF0;//低四位清零
T2 = 3;//将P3口低四位的值赋值给T2,然后T = T1 |T2;就可以了,与或非建议你看看C语言
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 15:16:37 | 显示全部楼层
到底是什么意思?010是二进制表示还是10进制表示?
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 15:17:02 | 显示全部楼层
初学单片机,感觉你弄得好复杂
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-3-4
在线时间
0 小时
 楼主| 发表于 2015-4-21 15:20:56 | 显示全部楼层
回复【3楼】坏苹果:
---------------------------------
就是因为电路画的有问题所以才特别麻烦感觉,010当然是2进制啦
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12691
金钱
12691
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-4-21 15:22:53 | 显示全部楼层
看着好蛋疼。。。。。呵呵   C语言基础多练练吧
学无止境
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 15:33:34 | 显示全部楼层
唉,你的C语言基础不是很好啊,还得看看,我学了3年,虽然学的不怎么样,但差一点被你这种写法唬住了,我从来没用过,你要是非得这样写的话,可以用  & | !,也就是与或非,二进制的0000 0010也就是2,但我想你刚开始学C,可能搞混,也可能是0X10,也就是0001 0000,到底是那个,不知道,如果用P2.2P2.3P3.2,首先要定义端口,
#include"reg52,h"
typedef unsigne char uint8;
typedef unsignd int uint16;
typedef unsigned long uint32;

void main()
{

}
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 15:34:05 | 显示全部楼层
怎么搞的,我还没发表呢
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-3-4
在线时间
0 小时
 楼主| 发表于 2015-4-21 15:44:32 | 显示全部楼层
回复【5楼】jermy_z:
---------------------------------
确实是新学这个,不太懂。。
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 15:45:54 | 显示全部楼层
接上面的,

uint8 t = 0;


P2 |= 0X10;
P3 &= 0X00;
t = 2 | 3;
应该是这样吧,呵呵
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 15:48:44 | 显示全部楼层
P2 |= 0X02;
P3 &= 0X00;
这样写,P1 | 0X10;这样写不对,0X10是0001 0000
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-3-4
在线时间
0 小时
 楼主| 发表于 2015-4-21 15:50:23 | 显示全部楼层
回复【9楼】坏苹果:
---------------------------------
基础比较差,没有太看得懂不好意思
P2 |= 0X10; 
P3 &= 0X00; 这两句没太明白
重新说一下问题吧
比如从P2.5-P3.4是一个八位数据嘛,我想把这8位赋予一个变量,该怎么写。
我在网上找的都是说做移位,但是确实没写过。
以前只接触过单纯的把P2或者P3的值赋予变量这种。
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 15:52:44 | 显示全部楼层
我恳求你别这样写,没有人这样写代码,51单片机不是可以单独的位操作吗?你可以一位一位的赋值啊,
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-3-4
在线时间
0 小时
 楼主| 发表于 2015-4-21 16:12:24 | 显示全部楼层
回复【12楼】坏苹果:
---------------------------------
事情比较复杂,我也想过其他办法,但是真的是没办法我才来发帖子的。
我承认自己很蠢,电路图画的乱七八糟所以才这么麻烦,具体不一位一位赋值的原因是因为用的P6口,没办法单独操作吧
总之谢谢你,我都不好意思问下去了。
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 16:15:39 | 显示全部楼层
算了,我还是详细的给你解释解释吧,至于听不听懂那你再提问好吧,比如从P2.5-P3.4是一个八位数据嘛,我想把这8位赋予一个变量,只有这一个问题对吗?
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-3-4
在线时间
0 小时
 楼主| 发表于 2015-4-21 16:20:05 | 显示全部楼层
回复【14楼】坏苹果:
---------------------------------
对,但是单片机从P4-7不是不能单独赋值么,如果方便一并讲讲吧,感激不尽
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-3-4
在线时间
0 小时
 楼主| 发表于 2015-4-21 16:41:26 | 显示全部楼层
回复【16楼】坏苹果:
---------------------------------
我看明白了,非常谢谢你,我去试试,很有帮助
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-3-4
在线时间
0 小时
 楼主| 发表于 2015-4-21 17:22:09 | 显示全部楼层
回复【16楼】坏苹果:
---------------------------------
您好,再麻烦问一下,由于我8位数据不是44分开的,写的时候与的数我也改了,那么T = T1 |T2需不需要修改呢
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 17:29:18 | 显示全部楼层
你需要哪一位就改哪一位 & 是让某一位清零的意思,|是让某一位置一的意思,如果不是高四位和低四位这么排列的,那么你对应着改,就是用 &|
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 17:29:50 | 显示全部楼层
如果你改了的话,T1 |T2是不需要改的,
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-3-4
在线时间
0 小时
 楼主| 发表于 2015-4-21 17:39:19 | 显示全部楼层
回复【20楼】坏苹果:
---------------------------------
忽然又不是特别明白了,如果我要取P2.5开始到3.4结束,也就是P2的3位加上P3的5位
tmp1 = 2 & 0xe0;
tmp2 = 3 & 0x1f;
t = tmp2 | tmp1;
我这么写对么?没有特别理解为什么要让P2 |= 0X00;
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-15
在线时间
11 小时
发表于 2015-4-21 18:48:01 | 显示全部楼层
严格的说不对,应该先赋值给P2,P3口,因为temp1 temp2只是我们自己定义的变量,P2,P3则是寄存器,所以应该写
P2 = 2 & 0XE03 =P3 & 0X1F,让P2 |= 0X00;只是因为万一P2口的低四位你用到的话,他们互不干扰对方,0或任何数还是任何数,不会变的
http://shop118132896.taobao.com/index.htm?spm=2013.1.w5002-10547694187.2.UDhjf5&v=1我的淘宝小店,欢迎光临
回复

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2015-4-26 22:13:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 10:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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