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

yumao   2015-3-25 10:37 楼主
我在用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编译器
谢谢(^_^)......

回复评论 (4)

一般这种复杂的应该和上面一样,最外面加括号
点赞  2015-3-25 10:52
一般这种复杂的应该和上面一样,最外面加括号
点赞  2015-3-25 10:52
逻辑上是没有区别的,但是你说会出错,这确实不明原因
点赞  2015-3-25 11:44
这个就要看它的汇编是怎样的了,也许还真有顺序
点赞  2015-3-25 20:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复