很弱的问题,P口定义
时间:10-02
整理:3721RD
点击:
#include <REG52.H>
sbit Start=P0^0;
sbit Stop=P0^1;
void main()
{
if (Start&&Stop!=1) //这时Start和Stop值不是0就是1.
}
如果换成:
#include <REG52.H>
Start和Stop不定义
void main()
{
if (P0^0&&P0^1!=1) //这时在Keil中调试P0^0和P0^1值就不0和1了.而是十六进制0xXX
}
我在网上了解说是要加如Start和Stop这样的变量名,为什么,有什么不一样么?
初学请帮忙解答,谢谢
sbit Start=P0^0;
sbit Stop=P0^1;
void main()
{
if (Start&&Stop!=1) //这时Start和Stop值不是0就是1.
}
如果换成:
#include <REG52.H>
Start和Stop不定义
void main()
{
if (P0^0&&P0^1!=1) //这时在Keil中调试P0^0和P0^1值就不0和1了.而是十六进制0xXX
}
我在网上了解说是要加如Start和Stop这样的变量名,为什么,有什么不一样么?
初学请帮忙解答,谢谢
我觉得,虽然P口支持位寻址,但是头文件中没有关于P1^0的定义,P0^0&&P0^1!=1这条语句就变复杂了,变成P0异或0了,当然就是十六进制了。自己去看看头文件就知道了
P0^0&&P0^1!=1
这个指令好像就有点问题,好像是数据类型不匹配造成的。不如改成(!P0^0&&P0^1)这样的话应给没问题。
解释的好
主要还是头文件只有P0^1的宏定义,不能作为变量使用
对于位变量,给他重新起个名字的好处是直观明了。当需要操作的IO口多了之后,这样的命名很容易区分各个位之间的功能。
当然,你也可以直接使用。但是不直观呀。
^ 在 sbit 语句里表示的是第几位的意思,就像 a = 1.2 的小数点一样。
如果不在 sbit 里,那就是异或运算符。
虽然长的一样,但两个地方的含意和功能是不一样的。
能不能加个括号试试,if ((P0^0)&&(P0^1)!=1)