你的l1是一个位变量,而a是一个8位的字符型,a=0x40,是第七位为1,你执行把a赋值给l1,得到的是把a的最低位给了位变量l1,所以l1是得0。l1的值要么是1,要么是0。
DAT=num&0x80;是逻辑与的结果送DAT,这里由最高位决定。l1=a; 屏蔽后送最低位。
把l1改成P10x40 的二进制是 0100 0000P1^0 只是一个位P1 有八个io口,即8位,P1=0X40,就是把 0100 0000 分别赋给P1的八个位