先不說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時鐘
第三種太多行
結論是第一種代碼簡潔,效率也最高
推薦第一種
|