C51扩充数据类型

C51编译器提供了扩充数据类型,包括bit、sfr、sfr16和sbit,用于操作单片机的特殊功能寄存器。bit类型用于定义位变量,sfr类型访问所有特殊功能寄存器,sfr16处理16位寄存器,如52子系列的T2定时器,而sbit则用于可寻址位,如RAM中的位或特殊功能寄存器中的位。通过这些类型,程序员可以便捷地对单片机的各个寄存器进行读写操作。

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”中了,故而一般不需要去修改。只有在该头文件中没有时,才需要按照上述格式进行定义,然后才能在程序中使用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术小咖龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值