首页 理论教育特殊功能寄存器SFR及其C51定义

特殊功能寄存器SFR及其C51定义

【摘要】:MCS-51系列单片机片内有20多个特殊功能寄存器:8031、8051、8751有21个特殊功能寄存器,8032、8052、8752有26个特殊功能寄存器。这些特殊功能寄存器分布在片内RAM区的高128B中,直接地址为80H~0FFH。sfr定义8bit特殊功能寄存器,sfr16定义16bit特殊功能寄存器。MCS-51系列单片机中,位于片内特殊功能寄存器区的每一个SFR都有其字节地址。这20多个SFR中有11个特殊功能寄存器具有位寻址功能。由上可知,sbit表示一个独立的数据类型,是一个特殊功能位,在SFR区间。

MCS-51系列单片机(8031、8051、8751、8032、8052、8752等)片内有20多个特殊功能寄存器(SFR):8031、8051、8751有21个特殊功能寄存器(SFR),8032、8052、8752有26个特殊功能寄存器(SFR)。这些特殊功能寄存器(SFR)分布在片内RAM区的高128B中,直接地址为80H~0FFH。对这些特殊功能寄存器(SFR)的操作,只能使用直接寻址方式,不能使用间接寻址方式。

相对于标准C语言,C51新增了几种新的数据类型,其中两种是sfr和sfr16数据类型,目的是能够通过C51语言直接访问这些特殊功能寄存器。sfr和sfr16数据类型只适用于对MCS-C51系列单片机C编程。sfr定义8bit特殊功能寄存器,sfr16定义16bit特殊功能寄存器。

用sfr定义数据类型举例如下:

sfr IE=0xA8;

sfr TMOD=0x89;

说明:中断允许控制寄存器IE,片内SFR,直接字节地址为A8H。定时器/计数器模式控制寄存器TMOD,片内SFR,直接字节地址为89H。

用sfr16定义数据类型举例如下:

sfr16 T2=0xCC;

说明:16位定时器T2的低8位TL2地址为0CCH,高8位TH2地址为0CDH。

用sfr16定义一个16位SFR,变量名后面不是赋值语句,是一个片内SFR地址,其低字节在前(字节地址小),高字节在后(字节地址大),两个地址紧挨着。这种定义适用于新的SFR,不能用于T0的TL0(字节地址8AH)和TH0(字节地址8CH),也不能用于T1的TL1(字节地址8BH)和(字节地址8DH)。

MCS-51系列单片机中,位于片内特殊功能寄存器区的每一个SFR都有其字节地址。这20多个SFR中有11个特殊功能寄存器具有位寻址功能。这些寄存器的字节地址有一个特点,字节地址能被8整除,即字节地址末位是0或8H。具有位寻址功能的SFR,字节的每一位都可以寻址,即字节的每一位都具有位地址,位地址范围为80H~0FFH。

如果我们需要单独访问SFR中的某一位,C51扩充的数据类型sbit可以满足需求。特殊位(sbit)的定义像sfr和sfr16一样是对标准C的扩充,使用关键词sbit可以访问可寻址的位。

用关键词sbit定义可寻址的位寻址的位变量,sbit后面是位变量名,“=”号后面是位地址,定义可位寻址的位变量有如下3种方法。(www.chuimin.cn)

方法一

语法:sbit位变量名=sfr_name^0~7之一

其中,“^”前面的sfr_name必须是已定义的SFR的名字;“^”后面的常数定义了该SFR字节D7~D0的某一位的位置,其值必须是0~7的常数或者符号常量。

sbit方法一的使用举例如下:

方法二

语法:sbit位变量名=字节地址0x80~0xFF之一^0~7之一其中,“^”前面的值必须在0x80~0xFF之间,表示SFR字节地址,地址能被8整除;“^”后面的常数定义了该SFR字节D7~D0的某一位置,其值必须是0~7的常数或者符号常量。

sbit方法二的使用举例如下:

方法三

语法:sbit位变量名=位地址0x80~0xFF之一其中,“=”前是我们定义的位变量名,该位变量不但是可位寻址的,而且在SFR区间;“=”后是位地址,位地址必须在80H~0FFH范围内,即SFR区,就是将SFR空间内可寻址位的绝对位地址赋给位变量。

sbit方法三的使用举例如下:

说明:可位寻址PS,位地址是0BCH;可寻址位PT1,位地址是0BBH。

由上可知,sbit表示一个独立的数据类型,是一个特殊功能位,在SFR区间。sbit不同于bit数据类型。