还有,在单片机编程中,把端口赋值给变量一次,以后变量就自动随端口变化了?
我叙述的不是很清楚,第一个问题:比如我直接在主函数里写if(P2^0)这个if总是真的,即使我把P2^0接地;而如果在全局定义sbit X=P2^0;主函数再使用if(X)就可以把P2^0读入,我不太理解。第二个问题按照书上例程和我的尝试,如果在全局定义char i =P2;之后无需再次赋值 i 也会随P2发生变化,就像C++中的引用一样?(使用89S52,Keil C程序用μvision3编译)
单片机输入时为什么要先定义接口?比如直接使用P2^0的值为什么不可以而要声明sbit XX=P2^0;?
答案:4 悬赏:70
解决时间 2021-03-14 16:15
- 提问者网友:雨之落き
- 2021-03-14 04:00
最佳答案
- 二级知识专家网友:厌今念往
- 2021-03-14 05:38
我看着这句话“把端口赋值给变量一次”,我读不通,解释不了
很久没弄51了,也没查看编译器里的头文件,我的解释可能有错
本人理解如下:首先,sbit xx=P2^0;这个条语句是编译器帮你完成转换的
你要知道你烧写到芯片中最后的程序代码不是C语言,为什么要这么做很好回答,
这就是规定,别人设计这个编译器的人就是这么规定这个语法的,
那你有没有想过,为什么你写上一句int i,就定义了一个整型变量?
为什么不可以这样定义:整型 i,为什么不能用中文写程序,要用英文?
这是别人规定的,如果你不想这么用,很简单,你自己做一个编译器
不过,等你到了那个水平,不知道你还愿意花时间去做这种事不?(除非工作需要)
你说的变量和端口变化的意思,不知道是我理解的这样:
你的意思是:执行char i =P2;后,i的值就随着端口上电平的改变而改变?
不知道你是不是问这个?
但关于这问题的答案是否定的,什么时候执行了i=P2这条语句,i就是当时P2端口上的电平情况。你要想 i 这个变量随着端口电平的变化而变化,很简单,你经常执行i=P2这句话就行了。就像扫描一样,每隔一段时间,我看一下端口的电平是什么情况。
不知道解释的好不好,如有不当,请见谅
很久没弄51了,也没查看编译器里的头文件,我的解释可能有错
本人理解如下:首先,sbit xx=P2^0;这个条语句是编译器帮你完成转换的
你要知道你烧写到芯片中最后的程序代码不是C语言,为什么要这么做很好回答,
这就是规定,别人设计这个编译器的人就是这么规定这个语法的,
那你有没有想过,为什么你写上一句int i,就定义了一个整型变量?
为什么不可以这样定义:整型 i,为什么不能用中文写程序,要用英文?
这是别人规定的,如果你不想这么用,很简单,你自己做一个编译器
不过,等你到了那个水平,不知道你还愿意花时间去做这种事不?(除非工作需要)
你说的变量和端口变化的意思,不知道是我理解的这样:
你的意思是:执行char i =P2;后,i的值就随着端口上电平的改变而改变?
不知道你是不是问这个?
但关于这问题的答案是否定的,什么时候执行了i=P2这条语句,i就是当时P2端口上的电平情况。你要想 i 这个变量随着端口电平的变化而变化,很简单,你经常执行i=P2这句话就行了。就像扫描一样,每隔一段时间,我看一下端口的电平是什么情况。
不知道解释的好不好,如有不当,请见谅
全部回答
- 1楼网友:疯山鬼
- 2021-03-14 08:45
不觉得麻烦么
- 2楼网友:伤口狠精致
- 2021-03-14 08:07
你好!
因为P2^0口程序自己没有自己定义,必须自己声明,但是你可以直接对整个P2口进行操作,如
P2=0xff. 这是因为P2口在include中得reg51.h已经定义好了,你可以把鼠标放在reg51.h上,右键,选择open,查看里面已经定义多得一些引脚和寄存器等东西。
仅代表个人观点,不喜勿喷,谢谢。
- 3楼网友:时光不老我们不分离
- 2021-03-14 06:56
P2^0其实是运算式,所以sbit XX=P2^0;是能够成立的,而P2^0=0;这样的语句是不成立的
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯