64

帖子

0

TA的资源

一粒金砂(初级)

21
 
不知道low_data能不能被赋值啊
如果能,那么P2值会不会相应的改变呢
求解

回复

63

帖子

0

TA的资源

一粒金砂(初级)

22
 
要是51的话就不能被直接赋值,个人这样理解:若赋值相当于间接给 P2^X赋值 51里不允许 需要用sbit重新声明一下。  仅供参考
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

23
 
引用 21 楼 liukun321 的回复:

要是51的话就不能被直接赋值,个人这样理解:若赋值相当于间接给 P2^X赋值 51里不允许 需要用sbit重新声明一下。  仅供参考


不是赋值 , 是 read_p2= low_data,  read_p2 =P2
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(初级)

24
 
P2^0|P2^1<<1|P2^2<<2|P2^3<<3|P2^4<<4|P2^5<<5|P2^6<<6|P2^7<<7
P2等于0xA0,代进去:
0xa0^0|0xa0^1<<1|0xa0^2<<2|0xa0^3<<3|0xa0^4<<4|0xa0^5<<5|0xa0^6<<6|0xa0^7<<7 =
0xa0|0xa0^2|0xa0^8|0xa0^0x18|0xa0^0x40|0xa0^0xa0|0xa0^0x180|0xa0^0x380 =
0xa0 | 0xa2 | 0xa8 | 0xb8 | 0xe0 | 0 | 0x120 | 0x320 = 0x3ea

...........这会是楼主想要的东西么?
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

25
 
引用 20 楼 sytu_chyq 的回复:
不知道low_data能不能被赋值啊
如果能,那么P2值会不会相应的改变呢
求解


不能赋值,因为它本来一个值,是个右值,不能被赋值的
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

26
 
引用 23 楼 great_bug 的回复:

P2^0|P2^1<<1|P2^2<<2|P2^3<<3|P2^4<<4|P2^5<<5|P2^6<<6|P2^7<<7
P2等于0xA0,代进去:
0xa0^0|0xa0^1<<1|0xa0^2<<2|0xa0^3<<3|0xa0^4<<4|0xa0^5<<5|0xa0^6<<6|0xa0^7<<7 =
0xa0|0xa0^2|0xa0^8|0xa0^0x18|0xa0^0x40|0x……

呵呵,你曲解了我的本意了。 P2^4<<4  ,优先级‘<<’比'^'高么?
这样:
sbit b0 =P2^0;
sbit b1 =P2^1;
sbit b2 =P2^2;
sbit b3 =P2^3;
sbit b4 =P2^4;
sbit b5 =P2^5;
sbit b6 =P2^6;
sbit b7 =P2^7;
然后:
#define low_data   b0 | b1<<1 | b2<<2 |....
这样呢?   我主要考虑到有些电路为了布线方便, 把P2,P0,P3等端口几位混杂在一起了,这样读取端口很不方便,所以想的了这种移位,如果可以的话,那就会方便很多了。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

27
 
  再顶一个,希望明天有高手出现。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

28
 
加括弧吧....<<的优先级比^要高.
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

29
 
看不懂你的意图......这样的low_data是干什么用的?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

30
 
试着向"low_data"赋值,编译失败
试着读取"low_data"....产生的代码像这样,是你想要的么?

   112:     P2 = low_data;
   113:  
C:0x0439    E5A0     MOV      A,PPAGE_SFR(0xA0)
C:0x043B    6401     XRL      A,#0x01
C:0x043D    25E0     ADD      A,ACC(0xE0)
C:0x043F    45A0     ORL      A,PPAGE_SFR(0xA0)
C:0x0441    FF       MOV      R7,A
C:0x0442    E5A0     MOV      A,PPAGE_SFR(0xA0)
C:0x0444    6402     XRL      A,#0x02
C:0x0446    25E0     ADD      A,ACC(0xE0)
C:0x0448    25E0     ADD      A,ACC(0xE0)
C:0x044A    4F       ORL      A,R7
C:0x044B    FF       MOV      R7,A
C:0x044C    E5A0     MOV      A,PPAGE_SFR(0xA0)
C:0x044E    6403     XRL      A,#0x03
C:0x0450    33       RLC      A
C:0x0451    33       RLC      A
C:0x0452    33       RLC      A
C:0x0453    54F8     ANL      A,#0xF8
C:0x0455    4F       ORL      A,R7
C:0x0456    FF       MOV      R7,A
C:0x0457    E5A0     MOV      A,PPAGE_SFR(0xA0)
C:0x0459    6404     XRL      A,#0x04
C:0x045B    C4       SWAP     A
C:0x045C    54F0     ANL      A,#B(0xF0)
C:0x045E    4F       ORL      A,R7
C:0x045F    FF       MOV      R7,A
C:0x0460    E5A0     MOV      A,PPAGE_SFR(0xA0)
C:0x0462    6405     XRL      A,#0x05
C:0x0464    C4       SWAP     A
C:0x0465    33       RLC      A
C:0x0466    54E0     ANL      A,#ACC(0xE0)
C:0x0468    4F       ORL      A,R7
C:0x0469    FF       MOV      R7,A
C:0x046A    E5A0     MOV      A,PPAGE_SFR(0xA0)
C:0x046C    6406     XRL      A,#0x06
C:0x046E    C4       SWAP     A
C:0x046F    33       RLC      A
C:0x0470    33       RLC      A
C:0x0471    54C0     ANL      A,#0xC0
C:0x0473    4F       ORL      A,R7
C:0x0474    FF       MOV      R7,A
C:0x0475    E5A0     MOV      A,PPAGE_SFR(0xA0)
C:0x0477    6407     XRL      A,#0x07
C:0x0479    FE       MOV      R6,A
C:0x047A    C4       SWAP     A
C:0x047B    33       RLC      A
C:0x047C    33       RLC      A
C:0x047D    33       RLC      A
C:0x047E    5480     ANL      A,#P0(0x80)
C:0x0480    4F       ORL      A,R7
C:0x0481    F5A0     MOV      PPAGE_SFR(0xA0),A
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

31
 
不懂,帮顶
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

32
 
sbit b0 =P2^0;
sbit b1 =P2^1;
sbit b2 =P2^2;
sbit b3 =P2^3;
sbit b4 =P2^4;
sbit b5 =P2^5;
sbit b6 =P2^6;  
sbit b7 =P2^7;
然后:
#define low_data b0 | b1<<1 | b2<<2 |....

-------------------

这个,根本就无法通过编译..........

兄弟呀,你没有自己先试一下么?
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

33
 
引用 29 楼 great_bug 的回复:

试着向"low_data"赋值,编译失败
试着读取"low_data"....产生的代码像这样,是你想要的么?

C:0x0439 E5A0 MOV A,PPAGE_SFR(0xA0)
C:0x043B 6401 XRL A,#0x01
C:0x043D 25E0 ADD A,ACC(0xE0)
C:0x043F 45A0 ORL A,PPAGE_SFR(0xA0)
C:0x0441 FF MOV R7,A

看不明白,great_bug ,要不你白话文说一下这样究竟是怎么样错了的吧。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

34
 
我明白你的意思了.

这样弄,代码可读性很差,且效率也很差......
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

35
 
你的意思是用任意IO重新组合成一个8-BIT或其它宽度的口.

比如说可以这样定义:

#define low_data (P1^5|(P3^4)<<1|(P2^2)<<2|(P1^7)<<3|(P2^0)<<4|(P3^7)<<5|(P0^2)<<6|(P2^7)<<7)
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

36
 
这样定义的口,只可读,无法写...写的话还是要一个位一个位的去写.

实际上还是通过PCB布线来解决这个问题可能要好一些.
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

37
 
引用 34 楼 great_bug 的回复:

你的意思是用任意IO重新组合成一个8-BIT或其它宽度的口.

比如说可以这样定义:

#define low_data (P1^5|(P3^4)<<1|(P2^2)<<2|(P1^7)<<3|(P2^0)<<4|(P3^7)<<5|(P0^2)<<6|(P2^7)<<7)


非常感谢great_bug ,分给你一半。看来我是没有加括号。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

38
 
必须告诉你....那个仍是不对的.........
正确的弄法或许该像这样:
#define PTN0 P1^6
#define PTN1 P2^2
#define PTN2 P1^5
......
#define PTN7 P3^5

#define READ_IO_PATTERN ((PTN0?1:0)|(PTN1?2:0)|(PTN2?4:0)|...|(PTN7?0x80:0))
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(中级)

39
 
写要麻烦些...

#define WRITE_IO_PATTERN(x) (PTN0=(x)&1?1:0,PTN1=(x)&2?1:0,PTN2=(x)&4?1:0,...,PTN7=(x)&0x80?1:0)
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

40
 
引用 38 楼 great_bug 的回复:

写要麻烦些...

#define WRITE_IO_PATTERN(x) (PTN0=(x)&1?1:0,PTN1=(x)&2?1:0,PTN2=(x)&4?1:0,...,PTN7=(x)&0x80?1:0)

再次感谢,我还没来得及试验的呢,呵呵,过会试验了告诉你。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表