首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

关于44B0 GPIO控制的小疑点

2012-03-18 
关于44B0 GPIO控制的小问题#define OUT_MagPower(x)rPDATG((rPDATG&0xbf)|(x6))//GPG6#define OUT_ACPo

关于44B0 GPIO控制的小问题
#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.

热点排行