打印

使用位定义

[复制链接]
565|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxrs|  楼主 | 2020-8-25 22:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做一个项目 ,PIC8位MCU,MPLAB X IDE 5.15版,编译器XC8 2.05版,定义一个变量BTemp8,由于要对里面的每一位单独操作,需要对每一位做位定义

使用特权

评论回复
沙发
yufe| | 2020-8-25 22:56 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
xxrs|  楼主 | 2020-8-25 23:00 | 只看该作者

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|  楼主 | 2020-8-25 23:03 | 只看该作者
编译就卡在这里不让过,错误提示如下:
invalid argument to attribute/specifier "__address__"

使用特权

评论回复
5
chuxh| | 2020-8-25 23:10 | 只看该作者
union数据类型可以帮到你的!!

使用特权

评论回复
6
spark周| | 2020-8-25 23:14 | 只看该作者

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变量

使用特权

评论回复
7
xxrs|  楼主 | 2020-8-25 23:17 | 只看该作者
使用联合定义可以很方便的定义位。

使用特权

评论回复
8
wenfen| | 2020-8-25 23:21 | 只看该作者
楼上那个例子应该对

使用特权

评论回复
9
xxrs|  楼主 | 2020-8-25 23:24 | 只看该作者
感谢各位兄弟的指点,学习又上了一步

使用特权

评论回复
10
CoolSilicon| | 2020-8-27 10:34 | 只看该作者
xxrs 发表于 2020-8-25 23:24
感谢各位兄弟的指点,学习又上了一步

其实有个简单的方法, 就是你去看对应芯片的.h文件, 里面就有PORT, LAT之类寄存器的结构体定义,
你照着抄嘛...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

405

主题

7415

帖子

1

粉丝