单片机C语言怎么声明一个可以位寻址的变量
发布网友
发布时间:2022-05-17 12:36
我来回答
共4个回答
热心网友
时间:2023-08-21 12:12
是这个样子的,你只要声明了位变量,比如bit a;而且这个变量是全局变量,或者是函数内部的静态变量,那么,这个位变量的地上就恒不变了,只是地址是多少这个是编译器随机分配的,不敢十分确定,但是在以后的运行中,地址肯定是不变的。
如果你声明的是函数内部的动态变量,比如在函数内部声明:bit a,那么,这个位变量是随着函数的调用变化的,其地址也是变化的。
所以,你只要声明一个全局的位变量,那么,这个变量就肯定是地址不变的,当然,不知道其地址具体是多少罢了。
如果你非要知道每个地址是多少,那么,有两个办法:
1 你集中把128个位全部都定义出来。
比如,你在某个C文件里,这样写:
bit Bit00 = 0;
bit Bit01 = 0;
bit Bit02 = 0;
bit Bit03 = 0;
一直定义128个,把所有位空间占满,那么,这样,就可以肯定Bit00的地址是0x20的最低位,bit01的地址是0x20的次低位了。
2 用sbit,而不用bit.
比如:unsigned char data B_Var[16] = 0;
sbit Led_Status1 = B_Var[0]^7;那么,就表示Led_Status 是第20H地址中的最高位。
sbit Led_Status2 = B_Var[6]^3;那么,就表示Led_Status 是第26H地址中的第3位。
这个其实并不是定义了位变量,只是起了个别名而已。但效果一样,只是注意,你更改B_Var[6],可能会更改26H的地址第3位,所以,如果你只用位,那么,就不要操作B_Var[6]这个数组元素。
其实呢,你只要定义个全局变量就行了,没有必要知道这个bit变量的地址,因为没有什么实际意义。
热心网友
时间:2023-08-21 12:13
单片机中,可以位寻址的有两个地方,第一是特殊功能寄存器中可以被8整除的寄存器,第二就是20H~2FH这个位址空间。两个地方的位变量申明不一样。
第一个地方的申明是: sbit 位变量
比如:sbit pwm=P1^0;
第二个地方的申明是:bit 位变量
比如: bit flag;
热心网友
时间:2023-08-21 12:13
首先是你的头文件是#include<reg51.h>
在这个头文件中包含着一些声明比如:sfr scan ;
这个声明是你在程序中不必写出来的,只需要#include<reg51.h>
然后你再在你的程序中写语句:sbit 变量名 P0^1;
注意这个P0^1是指P0输出/输入的第一个位。希望对你有帮助
热心网友
时间:2023-08-21 12:14
int *cc;
cc=(int*)0X6300 ;
*cc=3;