[8/16位单片机] 如何使用位定义

[复制链接]
139|7
 楼主 | 2019-4-15 15:46 | 显示全部楼层 |阅读模式
做一个项目 ,PIC8位MCU,MPLAB X IDE 5.15版,编译器XC8 2.05版,定义一个变量BTemp8,由于要对里面的每一位单独操作,需要对每一位做位定义,

  1. unsigned char BTemp8;       

  2. bit    bit7        __at(((unsigned)&BTemp8*8)+7);
  3. bit        bit6                __at(((unsigned)&BTemp8*8)+6);
  4. bit        bit5                __at(((unsigned)&BTemp8*8)+5);
  5. bit        bit4                __at(((unsigned)&BTemp8*8)+4);
  6. bit        bit3                __at(((unsigned)&BTemp8*8)+3);
  7. bit        bit2                __at(((unsigned)&BTemp8*8)+2);
  8. bit        bit1                __at(((unsigned)&BTemp8*8)+1);
  9. bit        bit0                __at(((unsigned)&BTemp8*8)+0);
复制代码

但是编译就卡在这里不让过,错误提示如下:
invalid argument to attribute/specifier "__address__"
请教各位师兄,如何破解。
| 2019-4-15 16:34 | 显示全部楼层
union数据类型可以帮到你的!!
| 2019-4-15 17:31 | 显示全部楼层

union both {
unsigned char BTemp8;
struct {
unsigned b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;
} bitv;
} var;

访问时,使用var.bitv.b0访问单个bit,var.BTemp8 访问char变量

评论

yppic82 2019-4-19 10:19 回复TA
谢谢兄弟指点,没及时回复,望理解 
yppic82 2019-4-19 10:18 回复TA
谢谢兄弟指点 

评分

参与人数 1威望 +5 收起 理由
bellstudio + 5 很给力!
| 2019-4-15 21:14 | 显示全部楼层
使用联合定义可以很方便的定义位。
| 2019-4-15 22:08 | 显示全部楼层
楼上那个例子应该对
 楼主 | 2019-4-19 10:20 | 显示全部楼层
感谢各位兄弟的指点,学习又上了一步
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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