51单片机C51语言的几个问题。

2024年12月28日 01:17
有4个网友回答
网友(1):

问题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就行

网友(2):

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就是上面描述的。异同点你可以自己归纳了。

网友(3):

bit的意思是定义1个布尔逻辑变量如:bit a;,sbit是按位定义SFR寄存器地址,如:
sbit Add_Key = P1.0;。而sfr是按字节定义,如:sfr P1 = 0x90;。
sbit a = PSW^2;
上面这条语句是声明一个sbit类型的变量a并给其赋以寄存器PSW第二位的状态值。如果后面PSW第二位状态值发生改变了,a的值会同样发生改变。

网友(4):

1、sbit a = PSW^2;意思是PSW的第二位的值赋给a,sbit是对位定义的变量,sfr是针对特殊寄存器定义变量的!多看看例子,就会明白咋回事啦!