关于单片机端口的问题

sbit PinA = P1^0;
sbit PinB = P1^1;
sbit PinC = P1^2;
sbit PinSTART = P1^5;
sbit PinOE = P1^6;
sbit PinEOC = P1^7;

#define PinData P0

我用的是STC98C52,Sbit吧可以吧一个引脚的值赋值给PinA,但是后面又有#define PinData P0
P0应该有8个口了,那个pinData里面应该也就是类似10010101这样的8位了,可以这样理解吗?还有在书上的程序中他们总是写temp = PinData & 0xff;;,这个有什么意义吗?& 0xff;这个之后原来应该是什么就还是什么啊。
谢谢高手指点一下。

sbit 不是赋值,是定义寄存器位变量,PinA在程序中代表的就是P1^0,你也可以直接在程序里面写P1^0,不用PinA,只不过可读性低了而已。

#define是预处理指令,就是把PinData作为P0的一个别名,在编译开始前,对整个程序里面的PinData都替换成P0再进行编译的,所以你举例的那句temp = PinData & 0xff; 就是说把P0每位都赋值给temp,每位同1做与操作对原数据无改变。

其实sbit可以被#define代替的,sbit PinA = P1^0 完全可以写成#define PinA P1^0。但是sbit是C51里面拓展出来的关键字,专门用于定义寄存器位的操作,如果使用时定义的类型不对会在编译中报错,是很有利于程序DEBUG的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-07
你的理解是正确的;
temp = PinData & 0xff;这种书写格式可能是编程者的一种习惯,试想一下,如果把0xff换成0xf0就可以只保留PinData的高4位,也就是说这种习惯下,你可以随意处理你想要的和不想要的位数据。