[PIC®/AVR®/dsPIC®产品] 使用位定义

[复制链接]
857|17
 楼主| xxrs 发表于 2022-3-4 22:48 | 显示全部楼层 |阅读模式
本帖最后由 pzsh 于 2022-3-5 09:04 编辑

做一个项目 ,PIC8位MCU,MPLAB X IDE 5.15版,编译器XC8 2.05版,定义一个变量BTemp8,由于要对里面的每一位单独操作,需要对每一位做位定义
dengdc 发表于 2022-3-4 22:50 | 显示全部楼层
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| xxrs 发表于 2022-3-4 22:57 | 显示全部楼层

unsigned char BTemp8;        

bit    bit7        __at(((unsigned)&BTemp8*8)+7);
bit        bit6                __at(((unsigned)&BTemp8*8)+6);
bit        bit5                __at(((unsigned)&BTemp8*8)+5);
bit        bit4                __at(((unsigned)&BTemp8*8)+4);
bit        bit3                __at(((unsigned)&BTemp8*8)+3);
bit        bit2                __at(((unsigned)&BTemp8*8)+2);
bit        bit1                __at(((unsigned)&BTemp8*8)+1);
bit        bit0                __at(((unsigned)&BTemp8*8)+0);
 楼主| xxrs 发表于 2022-3-4 22:59 | 显示全部楼层
编译就卡在这里不让过,错误提示如下:
invalid argument to attribute/specifier "__address__"
chuxh 发表于 2022-3-4 23:01 | 显示全部楼层
union数据类型可以帮到你的!!
pengf 发表于 2022-3-4 23:04 | 显示全部楼层

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变量
 楼主| xxrs 发表于 2022-3-4 23:06 | 显示全部楼层
使用联合定义可以很方便的定义位。
zwll 发表于 2022-3-4 23:08 | 显示全部楼层
楼上那个例子应该对
 楼主| xxrs 发表于 2022-3-4 23:10 | 显示全部楼层
感谢各位兄弟的指点,学习又上了一步
hanwe 发表于 2022-3-4 23:12 | 显示全部楼层
其实有个简单的方法, 就是你去看对应芯片的.h文件, 里面就有PORT, LAT之类寄存器的结构体定义,
zwll 发表于 2022-3-4 23:16 | 显示全部楼层
实现单片机的ADC模块的数据快速采集
pzsh 发表于 2022-3-5 09:04 | 显示全部楼层
union就是干这事的,赞同楼上几位大侠
tpgf 发表于 2022-4-3 16:20 | 显示全部楼层
工程不大的话就米有必要把
aoyi 发表于 2022-4-3 16:27 | 显示全部楼层
直接位操作也行啊
nawu 发表于 2022-4-3 16:36 | 显示全部楼层
头文件不是写好了的吗
zljiu 发表于 2022-4-3 16:44 | 显示全部楼层
直接对位进行操作也是可以的
tfqi 发表于 2022-4-3 16:52 | 显示全部楼层
这样做能省很多事
gwsan 发表于 2022-4-3 17:00 | 显示全部楼层
一般都得这样做
您需要登录后才可以回帖 登录 | 注册

本版积分规则

405

主题

7415

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部