C51扩充数据类型
单片机内部有很多特殊功能寄存器(Special Function Register),每个寄存器在单片机内部都分配有唯一的地址,一般会根据寄存器功能的不同给寄存器赋予不同的名称。当需要在程序中操作这些特殊功能寄存器时,必须在程序的最前面对这些名称加以声明,也就是将这个寄存器的地址编号赋给这个名称,这样编译器在以后的程序中才能找到这些名称所对应的寄存器。跟51单片机特殊功能寄存器相关的数据类型是C51的扩充数据类型,如表1.5.2所示。
表1.5.2 C51扩充数据类型
数据类型 |
长度 |
值域 |
bit |
位 |
0或1 |
sfr |
单字节 |
0-255 |
sfr16 |
双字节 |
0-65535 |
sbit |
位 |
0或1 |
C51扩充数据类型介绍如下:
(1)bit类型
即位变量类型,C51编译器的一种扩充数据类型。利用它可定义位变量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。
(2)sfr类型
即特殊功能寄存器类型,也是一种扩充数据类型。sfr类型点用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。例如用sfr P1=0x90这一句定“P1”为P1端口在片内的寄存器,在后面的语句中我们可以用P1=0xff(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。
(3)sfr16类型
即16位特殊功能寄存器类型,占用两个内存单元,值域为0~65535。sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器,比如52子系列单片机的扩展定时器T2。
(4)sbit类型
即可寻址位类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。注意:51单片机内部RAM中只有十六进制地址尾数为0或8的存储单元或特殊功能寄存器才能进行位寻址。
如先前定义了:
sfr P1=0x90; //因P1端口的寄存器是可位寻址的,地址尾数为0
所以可以定义:
sbit P11=P1^1; //P11为P1中的P1.1引脚
同样可以用P1.1引脚的地址去写:
sbit P11=0x91; //P1.1引脚地址为0x91
这样我们在以后的程序语句中就可以用P11来对单片机P1.1引脚进行读写操作了。
上述这些声明大部分已经包含在单片机的特殊功能寄存器声明头文件“reg51.h”中了,故而一般不需要去修改。只有在该头文件中没有时,才需要按照上述格式进行定义,然后才能在程序中使用。
转载:https://blog.csdn.net/dyq1995/article/details/103612974