我在用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编译器
谢谢(^_^)......