|

楼主 |
发表于 2020-4-3 19:40:41
|
显示全部楼层
这样看起来比较清爽点:
- typedef union {
- unsigned char c;
- struct {
- unsigned char b0:1;
- unsigned char b1:1;
- unsigned char b2:1;
- unsigned char b3:1;
- unsigned char b4:1;
- unsigned char b5:1;
- unsigned char b6:1;
- unsigned char b7:1;
- };
- } BITS;
- BITS __at (0x20) var;
- void main2(void)
- {
- var.c = 0x55;
- var.b0 = 1;
- var.b1 = 1;
- while(1);
- }
复制代码
功能实现是一样的。
不过看汇编:
- ; main.c:69: var.b7=var.b6;
- mov r0,#_var
- mov a,@r0
- rl a
- rl a
- anl a,#0x01
- mov r0,#_var
- rrc a
- mov a,@r0
- mov acc.7,c
- mov @r0,a
复制代码
不如这个:
- ; main.c:58: D7=D6;
- ; assignBit
- mov c,_D6
- mov _D7,c
复制代码
比较用的源码:
- /*
- */
- #include <mcs51/at89x52.h>
- #include<mcs51/bitMem.h>
- BITCHAR(D,15)
- typedef union {
- unsigned char c;
- struct {
- unsigned char b0:1;
- unsigned char b1:1;
- unsigned char b2:1;
- unsigned char b3:1;
- unsigned char b4:1;
- unsigned char b5:1;
- unsigned char b6:1;
- unsigned char b7:1;
- };
- } BITS;
- BITS __at (0x20) var;
- void timer2(void) __interrupt 5{
- TF2=0;
- }
- void main(void)
- {
- __data char c=1,i=0;
- __data int j=0;
- __bit b=1;
- RCAP2H=0;
- RCAP2L=0;
- T2CON=0;
- T2MOD=0;
- TR2=1;
- ET2=1;
- EA=1;
- P1=0;
- PBYTE[1]=0x20;
- PBYTE[2]=0x55;
- PBYTE[4]=0xaa;
- D=0x33;
- var.c=0xa0;
- while(1){
- PCON|=1;
- i++;
- if(i==10){
- i=0;
- b=D7;
- D7=D6;
- D6=D5;
- D5=D4;
- D4=D3;
- D3=D2;
- D2=D1;
- D1=D0;
- D0=b;
- P1=D;
- b=var.b7;
- var.b7=var.b6;
- var.b6=var.b5;
- var.b5=var.b4;
- var.b4=var.b3;
- var.b3=var.b2;
- var.b2=var.b1;
- var.b1=var.b0;
- var.b0=b;
- P1=var.c;
- }
- }
- }
复制代码
|
|