#define OUT_MagPower(x) rPDATG=((rPDATG&0xbf)|(x<<6)) //GPG6
#define OUT_ACPower(x) rPDATG=((rPDATG&0xef)|(x<<4)) //GPG4
其中X=1。
我没想明白为什么是这样呢?我想的是:
0xbf: 1011 1111
x<<6: 0100 0000
=
..................
1111 1111
怎么就成了 GPG6 了呢?我实在搞不明白呀?是不是我哪里想错了呢,把PDATG寄存器的某一位弄成1 就是输出啊。
------解决方案--------------------
这个您想错了吧,应该是这样
假设原来rPDATG = 0x01
则(rPDATG&0xbf) = 0x01
如果x=1则
((rPDATG&0xbf)|(x<<6)) = 0x41;
即
rPDATG=((rPDATG&0xbf)|(x<<6))
的意思是将bit6位置1或清0而保持bit0-bit5和bit7位不变。即只改变CPG6引脚的值。
后面那个CPG4一个意思。
------解决方案--------------------
运算顺序问题吧
------解决方案--------------------
因为x也可以等于0,所以必须要有 rPDATG & 0xbf ,以便把GP6清零。
就是说,x可以是0或者1,所以既要清零,又要置位,才能实现OUT 0或1.