首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]如何令CW编译时对位判断与位设置使用HC08汇编位判断与位设置指令?

BITR要位于零页地址(0x0000-0x00FF)对位的操作才和PTA相同
typedef union {
byte Byte;
struct {
byte BITR0 :1;
byte BITR1 :1;
byte BITR2 :1;
byte BITR3 :1;
byte BITR4 :1;
byte BITR5 :1;
byte BITR6 :1;
byte BITR7 :1;
} Bits;
} BITRSTR;
extern volatile BITRSTR _BITR 0x00000100;

使用typedef定义一个名字为BITRSTR的联合体,使用联合体的好处是可以根据使用情况,自动开辟对应的空间。
比如对整个字节操作就使用联合体内的成员Byte,因为Byte是byte类型(即一个字节的大小);
对位操作,就使用联合体内结构体成员Bits的某一个成员,例如BITR0。 BITR0定义成byte类型,但其后面还跟有成员说明符:1,这个说明符指示了该变量只占用字节中一个bit的空间,根据在结构体中的位置,它占用的是bit0的空间。
这就返回到前面所说的联合体定义的好处,这时候编译器就知道对该变量的操作是位操作。
#pragma DATA_SEG MY_ZEROPAGE

typedef union {
byte Byte;
struct {
byte BITR0 :1;
byte BITR1 :1;
byte BITR2 :1;
byte BITR3 :1;
byte BITR4 :1;
byte BITR5 :1;
byte BITR6 :1;
byte BITR7 :1;
} Bits;
} BITRSTR;

BITRSTR _BITR;

#define BITR _BITR.Byte


我用pragma的方式定义是可以把_BITR放到零页的

除了定义之外,必须在程序中使用到BITR,否则编译器会做优化,不给BITR地址空间
感谢cnzbm的经验
返回列表