先不说P2^0这种明显的错误三种代码都可以得到最高位
把以上三种代码放进Keil 然后编译
得出以下结果:
13: P20 = dat & 0x80;
C:0x008F E508 MOV A,dat(0x08) //<<<<<<<<<<<12时钟
C:0x0091 33 RLC A //<<<<<<<<<<<12时钟
C:0x0092 92A0 MOV P20(0xA0.0),C //<<<<<<<<<<<24时钟
13: if(dat & 0x80 > 0) {
14: P20 = 1;
15: } else {
16: P20 = 0;
17: }
C:0x008F E508 MOV A,dat(0x08) //<<<<<<<<<<<12时钟
C:0x0091 30E004 JNB 0xE0.0,C:0098 //<<<<<<<<<<<24时钟
C:0x0094 D2A0 SETB P20(0xA0.0) //<<<<<<<<<<<12时钟
C:0x0096 8002 SJMP C:009A //<<<<<<<<<<<12时钟
C:0x0098 C2A0 CLR P20(0xA0.0) //<<<<<<<<<<<24时钟
C:0x009A E508
13: P20 = dat >> 7;
C:0x008F E508 MOV A,dat(0x08)
C:0x0091 C4 SWAP A
C:0x0092 13 RRC A
C:0x0093 13 RRC A
C:0x0094 13 RRC A
C:0x0095 5401 ANL A,#0x01
C:0x0097 24FF ADD A,#0xFF
C:0x0099 92A0 MOV P20(0xA0.0),C
看的出第一种要走48时钟
第二种如果高位是零走36+24时钟,高位是一走36+12+12时钟
第三种太多行
结论是第一种代码简洁,效率也最高
推荐第一种
|