很弱的问题,P口定义

2019-07-16 03:02发布

#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这样的变量名,为什么,有什么不一样么?
初学请帮忙解答,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
大头BB
1楼-- · 2019-07-16 06:20
我觉得,虽然P口支持位寻址,但是头文件中没有关于P1^0的定义,P0^0&&P0^1!=1这条语句就变复杂了,变成P0异或0了,当然就是十六进制了。自己去看看头文件就知道了
肖成0904
2楼-- · 2019-07-16 10:37
P0^0&&P0^1!=1
这个指令好像就有点问题,好像是数据类型不匹配造成的。不如改成(!P0^0&&P0^1)这样的话应给没问题。
sirius08
3楼-- · 2019-07-16 13:51
 精彩回答 2  元偷偷看……
jackor88
4楼-- · 2019-07-16 15:20
主要还是头文件只有P0^1的宏定义,不能作为变量使用
3htech
5楼-- · 2019-07-16 17:07
对于位变量,给他重新起个名字的好处是直观明了。当需要操作的IO口多了之后,这样的命名很容易区分各个位之间的功能。

当然,你也可以直接使用。但是不直观呀。
starsnow
6楼-- · 2019-07-16 19:14
^ 在 sbit 语句里表示的是第几位的意思,就像 a = 1.2 的小数点一样。
如果不在 sbit 里,那就是异或运算符。
虽然长的一样,但两个地方的含意和功能是不一样的。

一周热门 更多>