[求助]如何令CW编译时对位判断与位设置使用HC08汇编位判断与位设置指令?
 
- UID
- 104631
- 性别
- 男
|
BITR要位于零页地址(0x0000-0x00FF)对位的操作才和PTA相同 |
|
|
|
|
|
 
- UID
- 104631
- 性别
- 男
|
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的空间。
这就返回到前面所说的联合体定义的好处,这时候编译器就知道对该变量的操作是位操作。 |
|
|
|
|
|
 
- UID
- 104631
- 性别
- 男
|
#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地址空间 |
|
|
|
|
|
 
- UID
- 104631
- 性别
- 男
|
|
|
|
|
|