TI中文支持网
TI专业的中文技术问题搜集分享网站

G2553在操作P1IN和P2IN上有顺序要求吗?

我在用G2553写矩阵键盘的控制程序时用到了8个IO口,分别是P2.0—P2.5、P1.6、P1.7

#define KEYDIR0() {P1DIR |= (BIT7+BIT6);P2DIR |= (BIT5+BIT4+BIT3+BIT2+BIT1+BIT0) ; }//
#define KEYDIR1() {P1DIR&=~(BIT7+BIT6);P2DIR&=~(BIT5+BIT4);P2DIR&=~(BIT3+BIT2+BIT1+BIT0);}//
#define KEYOUT0() {P1OUT|=(BIT7+BIT6);P2OUT|=(BIT5+BIT4+BIT3+BIT2+BIT1);P2OUT&=~BIT0;}
#define KEYOUT1() {P1OUT|=(BIT7+BIT6);P2OUT|=(BIT5+BIT4+BIT3+BIT2);P2OUT&=~BIT1;P2OUT|=BIT0;}
#define KEYOUT2() {P1OUT|=(BIT7+BIT6);P2OUT|=(BIT5+BIT4+BIT3);P2OUT&=~BIT2;P2OUT|=(BIT1+BIT0);}
#define KEYOUT3() {P1OUT|=(BIT7+BIT6);P2OUT|=(BIT5+BIT4);P2OUT&=~BIT3;P2OUT|=(BIT2+BIT1+BIT0);}
#define KEYIN (P1IN & 0xc0)|(P2IN & 0x3f)//这个是对的
//#define KEYIN (P2IN & 0x3f)|(P1IN & 0xc0)//这个是错误

上面是宏定义部分

对于最后两句,在逻辑上是一样的吧,都是位运算

可是就像注释那样,只有定义成#define KEYIN (P1IN & 0xc0)|(P2IN & 0x3f)才能使程序运行正确

这是怎么回事啊?

我用的是CCS编译器

谢谢(^_^)……

灰小子:

这两句代码,在执行顺序上肯定是不一样的。具体可以看生成的汇编代码。
至于为什么换了顺序运行不正确,是和你的矩阵键盘的电路有关系的

赞(0)
未经允许不得转载:TI中文支持网 » G2553在操作P1IN和P2IN上有顺序要求吗?
分享到: 更多 (0)