51单片机C51语言的几个问题。
我学过C,也不是说学的特别精,反正算是会C语言吧。现在刚好要做一个51单片机的开发,其它的都还行就是在一些数据类型上有一些没弄明白。1、sbita=PSW^2;上面这条语...
我学过C,也不是说学的特别精,反正算是会C语言吧。
现在刚好要做一个51单片机的开发,其它的都还行就是在一些数据类型上有一些没弄明白。
1、sbit a = PSW^2;
上面这条语句是不是声明一个sbit类型的变量a并给其赋以寄存器PSW第二位的状态值?
如果后面PSW第二位状态值发生改变了,a的值是否同样发生改变,还是要再执行一次上面这条语句,才能使a变量获取新的PSW^2的值?
2、sfr和sbit异同处?
3、bit与sbit异同处?
谢谢。 展开
现在刚好要做一个51单片机的开发,其它的都还行就是在一些数据类型上有一些没弄明白。
1、sbit a = PSW^2;
上面这条语句是不是声明一个sbit类型的变量a并给其赋以寄存器PSW第二位的状态值?
如果后面PSW第二位状态值发生改变了,a的值是否同样发生改变,还是要再执行一次上面这条语句,才能使a变量获取新的PSW^2的值?
2、sfr和sbit异同处?
3、bit与sbit异同处?
谢谢。 展开
意法半导体(中国)投资有限公司
2023-06-12
展开全部
展开全部
问题1:
sbit a = PSW^2;
这不是一条简单的赋值语句,a也不是什么变量,而是把他和PSW的第二位关联起来,相当于a是它的别名一样,如果a变化的话PSW的第二位会变,PSW的第二位变化时a当然也会变(假设你叫李宇春,现在这条语句就是说把春哥也变成你的名字),其实是一个东西,这么做的原因是,在程序中(主函数)PSW^2不能够直接被编译(如果直接引用,编译不通过)只能在主函数之前或头文件下方来这么一句,你可以打开reg52.h文件看看其实里面有很多这种定义,目的是为某个寄存器或IO口(其实还是寄存器)的某一位起个别名,使编程时既可以位操作又使编译能通过。
问题二:
sbit在问题1中说的很清楚了,就是为某一位起别名,sfr 这个关键字在reg52.h头文件中出现很多
它是单片机开发商把特殊功能寄存器的物理地址映射到一个宏上面,这样的话就可以对寄存器操作了,你自己可以改动,比如reg52.h中的sfr P0 = 0x80;你改为sfr PP=0X80; 那么单片机上的P1口(起名P1口是一种习惯)变成了你的PP口了,sbit a=PP^2完全正确;
问题三:
bit 只是个位变量的关键字,和bool (单片机不支持bool类型),char ,int 类似,为了进行2种状态判断有为了节省存储空间所以有了bit ,你就把他理解为bool就行
sbit a = PSW^2;
这不是一条简单的赋值语句,a也不是什么变量,而是把他和PSW的第二位关联起来,相当于a是它的别名一样,如果a变化的话PSW的第二位会变,PSW的第二位变化时a当然也会变(假设你叫李宇春,现在这条语句就是说把春哥也变成你的名字),其实是一个东西,这么做的原因是,在程序中(主函数)PSW^2不能够直接被编译(如果直接引用,编译不通过)只能在主函数之前或头文件下方来这么一句,你可以打开reg52.h文件看看其实里面有很多这种定义,目的是为某个寄存器或IO口(其实还是寄存器)的某一位起个别名,使编程时既可以位操作又使编译能通过。
问题二:
sbit在问题1中说的很清楚了,就是为某一位起别名,sfr 这个关键字在reg52.h头文件中出现很多
它是单片机开发商把特殊功能寄存器的物理地址映射到一个宏上面,这样的话就可以对寄存器操作了,你自己可以改动,比如reg52.h中的sfr P0 = 0x80;你改为sfr PP=0X80; 那么单片机上的P1口(起名P1口是一种习惯)变成了你的PP口了,sbit a=PP^2完全正确;
问题三:
bit 只是个位变量的关键字,和bool (单片机不支持bool类型),char ,int 类似,为了进行2种状态判断有为了节省存储空间所以有了bit ,你就把他理解为bool就行
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
单片机是一种集成电路芯片。又称单片微控制器,是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。一块芯片就成了一台计算机。特点是体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
1.把PSW中的第二位用一个名字a来表示,只要后面使用到a,就是使用PSW的第二位。
2.sfr是用来给特殊寄存器区的一个地址命名的,假设在特殊寄存器区有个地址0xAC,将其命名为XAF寄存器,就用 sfr XAF=0xAC。sbit是针对特殊寄存器区的位地址命名的。因此sbit和sfr都是针对特殊寄存器区的命名使用的,不同的是sbit针对“位”(bit)地址,sfr针对“字节”(byte)地址。
3.bit是针对RAM区可位寻址范围(字节地址20~2F区)128位的位命名的。sbit就是上面描述的。异同点你可以自己归纳了。
2.sfr是用来给特殊寄存器区的一个地址命名的,假设在特殊寄存器区有个地址0xAC,将其命名为XAF寄存器,就用 sfr XAF=0xAC。sbit是针对特殊寄存器区的位地址命名的。因此sbit和sfr都是针对特殊寄存器区的命名使用的,不同的是sbit针对“位”(bit)地址,sfr针对“字节”(byte)地址。
3.bit是针对RAM区可位寻址范围(字节地址20~2F区)128位的位命名的。sbit就是上面描述的。异同点你可以自己归纳了。
更多追问追答
追问
我这么理解对不对
sbit a = PSW^2; /* a在程序中就可以代表PSW第2位的值,它的值随PSW第2位的变化而变化。同样的,对于一些可以被赋值的寄存器位,也可以对a进行赋值而改变a所指向的寄存器的某位的值。*/
sfr b = 0XD0; /*PSW的地址是0XD0,而这个语句使b始终代表PSW的值*/
bit c = 0X6F; /*bit语句只针对00H-7FH间的128个位数进行操作,实际上是字节物理地址20H-2FH这16个字节物理地址里的位数*/
追答
sbit a = PSW^2,此时a就是PSW的第二位,不是跟着其变化!
sfr b=0xD0,就是说用名字b代替原来0xD0寄存器的名字(PSW)。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
bit的意思是定义1个布尔逻辑变量如:bit a;,sbit是按位定义SFR寄存器地址,如:
sbit Add_Key = P1.0;。而sfr是按字节定义,如:sfr P1 = 0x90;。
sbit a = PSW^2;
上面这条语句是声明一个sbit类型的变量a并给其赋以寄存器PSW第二位的状态值。如果后面PSW第二位状态值发生改变了,a的值会同样发生改变。
sbit Add_Key = P1.0;。而sfr是按字节定义,如:sfr P1 = 0x90;。
sbit a = PSW^2;
上面这条语句是声明一个sbit类型的变量a并给其赋以寄存器PSW第二位的状态值。如果后面PSW第二位状态值发生改变了,a的值会同样发生改变。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、sbit a = PSW^2;意思是PSW的第二位的值赋给a,sbit是对位定义的变量,sfr是针对特殊寄存器定义变量的!多看看例子,就会明白咋回事啦!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询