单片机输入时为什么要先定义接口?比如直接使用P2^0的值为什么不可以而要声明sbit XX=P2^0;?

还有,在单片机编程中,把端口赋值给变量一次,以后变量就自动随端口变化了?我叙述的不是很清楚,第一个问题:比如我直接在主函数里写if(P2^0)这个if总是真的,即使我把P... 还有,在单片机编程中,把端口赋值给变量一次,以后变量就自动随端口变化了?
我叙述的不是很清楚,第一个问题:比如我直接在主函数里写if(P2^0)这个if总是真的,即使我把P2^0接地;而如果在全局定义sbit X=P2^0;主函数再使用if(X)就可以把P2^0读入,我不太理解。第二个问题按照书上例程和我的尝试,如果在全局定义char i =P2;之后无需再次赋值 i 也会随P2发生变化,就像C++中的引用一样?(使用89S52,Keil C程序用μvision3编译)
展开
 我来答
zk212139
2011-08-11 · TA获得超过311个赞
知道答主
回答量:50
采纳率:100%
帮助的人:46.8万
展开全部
我看着这句话“把端口赋值给变量一次”,我读不通,解释不了

很久没弄51了,也没查看编译器里的头文件,我的解释可能有错
本人理解如下:首先,sbit xx=P2^0;这个条语句是编译器帮你完成转换的
你要知道你烧写到芯片中最后的程序代码不是C语言,为什么要这么做很好回答,
这就是规定,别人设计这个编译器的人就是这么规定这个语法的,
那你有没有想过,为什么你写上一句int i,就定义了一个整型变量?
为什么不可以这样定义:整型 i,为什么不能用中文写程序,要用英文?
这是别人规定的,如果你不想这么用,很简单,你自己做一个编译器
不过,等你到了那个水平,不知道你还愿意花时间去做这种事不?(除非工作需要)

你说的变量和端口变化的意思,不知道是我理解的这样:
你的意思是:执行char i =P2;后,i的值就随着端口上电平的改变而改变?
不知道你是不是问这个?
但关于这问题的答案是否定的,什么时候执行了i=P2这条语句,i就是当时P2端口上的电平情况。你要想 i 这个变量随着端口电平的变化而变化,很简单,你经常执行i=P2这句话就行了。就像扫描一样,每隔一段时间,我看一下端口的电平是什么情况。
不知道解释的好不好,如有不当,请见谅
追问
非常感谢回答了这么多,我叙述的不是很清楚,第一个问题:比如我直接在主函数里写if(P2^0)这个if总是真的,即使我把P2^0接地;而如果在全局定义sbit X=P2^0;主函数再使用if(X)就可以把P2^0读入,我不太理解。第二个问题你理解的是对的,但是按照书上例程和我的尝试,如果在全局定义char i =P2;之后无需再次赋值 i 也会随P2发生变化,就像C++中的引用一样。(使用89S52,Keil C程序用μvision3编译)
追答
在全局变量中定义char X=P2,i会随P2的改变而改变?这个我理解不了,从原理上来讲,char X就是定义一个整型变量X,并且给X分配一个固定的内存空间,X=P2,无非就是把P2的电平状态存入到X的内存空间里面,两者间又没有物理上的连接,数据改变都要经过CPU的控制啊,CPU后面不执行X=P2,X的值怎么会改变?所以,我理解不了
那个第一个问题if(P2^0)这种用法,我从来没试过,但是根据你的结果,我有一个理论解释,但不知道对不对,你想要知道实际情况的话,我提议,你用keil进行仿真,察看keil中的返汇编语言,这样的话,你这两个问题都可以找到原因的,另外不知道你看的内核头文件没有,如果没有,建议看下,如果看了,那我多嘴了,嗯,根据你的现象,我猜测啊,不使用X=P2^0,而单单使用P2^0,表明P2^0是一个非零的数,推测有二种情况,第一种合乎逻辑的是:P2^0,这里的" ^ "这个符号是运算符“异或”,P2的8位异或上0,只要8个管脚里有一个为1,那么结果就为真了,要8个管脚全部为0,才是运算结果为假。另外,还有一种猜测没有逻辑,所以就不说了,呵呵
我是chooperman
2011-08-11 · 超过21用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:57.8万
展开全部
因为P2^0口程序自己没有自己定义,必须自己声明,但是你可以直接对整个P2口进行操作,如
P2=0xff. 这是因为P2口在include<reg51.h>中得reg51.h已经定义好了,你可以把鼠标放在reg51.h上,右键,选择open,查看里面已经定义多得一些引脚和寄存器等东西。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
greatway000
2011-08-11 · TA获得超过362个赞
知道小有建树答主
回答量:193
采纳率:100%
帮助的人:182万
展开全部
P2^0其实是运算式,所以sbit XX=P2^0;是能够成立的,而P2^0=0;这样的语句是不成立的
追问
我叙述的不是很清楚,第一个问题:比如我直接在主函数里写if(P2^0)这个if总是真的,即使我把P2^0接地;而如果在全局定义sbit X=P2^0;主函数再使用if(X)就可以把P2^0读入,我不太理解。第二个问题但是按照书上例程和我的尝试,如果在全局定义char i =P2;之后无需再次赋值 i 也会随P2发生变化,就像C++中的引用一样?(使用89S52,Keil C程序用μvision3编译)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tuwulin365
2011-08-11 · TA获得超过4644个赞
知道大有可为答主
回答量:1.3万
采纳率:100%
帮助的人:6402万
展开全部
不觉得麻烦么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式