MCS - 51单片机中,除了程序计数器PC和4组工作寄存器组外,其它所有的寄存器均为特殊功能寄存器(SFR),分散在片内RAM区的高128字节中,地址范围为80H~0FFH。SFR中有11个寄存器具有位寻址能力,它们的字节地址都能被8整除,即字节地址是以8或0为尾数的。
  为了能直接访问这些SPR,Franklin C51提供了一种自主形式的定义方法,这种定义方法与标准C语言不兼容,只适合与对MCS_51系列单片机进行C语言编程,特殊的能寄存器C51定义的一般语法格式如下:
  sfr  sfr-name =  int  constant;
  “sfr”是定义语句的关键字,其后必须跟一个MSC-51单片机真实存在的特殊功能寄存器名,“=”后面必须是一个整型常数,不允许带有运算符的表达式,是特殊功能寄存器“sfr-name”的字节地址,这个常数值的范围必须在SFR 地址范围内,位于0x80~0xFF。
例如:

  sfr  SCON=0x98;  /* 串口控制寄存在器地址98H */
  sfr  TMOD=0x89;  /* 定时器/计数器方式控制寄存器地址89H */ 

  MCS-51系列单片机的特殊功能寄存器的数量与类型不尽相同,因此建议将所有特殊的“sfr”定义放入一个头文件中,该文件应包括MCS-51单片机系列机型中的SFR定义。C51编译器的 “reg51.h”头文件是这样一个文件。

  在新的 MCS-51系列产品中,SFR在功能上经常组合为16位值,当SFR的高字节地址直接位于低字节之后时,对16位SFR的值可以直接进行访问。例如52子系列的定时器/计数器2就是这种情况。为了有效地访问这类SFR,可使用关键字“sfr16”来定义,其定义语句的语法格式与8位SFR相同,只是“=”后面的地址必须用16位于的SFR的低字节地址,即低字节地址作为“sfr16”的定义地址。例如:

  sfr16  T2=0xCC           /* 定时器/计数器2;T2低8位地址为0CCH,T2高8位地址为0CDH */ 

  这种定义适用于所有的新的16位SFR,但不能用于定时器/计数器0和1。
  对于位寻址的SFR中的位,C51的扩充功能支持特殊位的定义,像SFR一样不与标准C兼容,使用“ sbit” 来定义位寻址单元。
  定义语句的一般语法格式有如下三种:
  第一种格式:sbit  bit-name=sfr-name^int constant;“sbit”是定义语句的关键字,后跟一个寻址位符号名(该位符号名必须是MCS-51单片机中规定的位名称),“=”后的“sfr=name”中的位号,必须是0~7范围中的数。例如:
  sfr  PSW=0Xd0;   /*定义PSW予寄存器地址为D0H*/
  sfr  OV=PSW^2;   /*定义OV位为PSW.2,地址为D2H/ *
  sfr  CY=PSW^7;   /*定义CY位为PSW.7 地址为D7H^*/
  第二种格式:sbit  bit-name=int constant^int constant;“=”后的 int constant为寻址地址们所在的特殊功能寄存器的字节地址,“^” 符号后的int constant为寻址位在 特殊功能寄存器中的位号。例如:
  sbit  OV=0Xd0 ^2;    /*  定义OV位地址是D0 H字节中的第2位  */
  sbit  CY=0XD0^7;    /*  定义C Y位地址是D0H字节中的第7位  */
  第三种格式:sbit  bit-name=int constant;“=”后的int constant为寻址位的绝对地址。例如:
  sbit  OV=0XD2;    /*  定义OV位地址为D2H  */
  sbit  OY=0XD7;    /*  定义CY位地址为D7H  */
  特殊功能位代表了一个独立的定义类,不能与其它位定义和位域互换。

MCS-51特殊功能寄存器(SPR)的C51定义的更多相关文章

  1. 单片机成长之路(51基础篇) - 017 C51中data,idata,xdata,pdata的区别(转)

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

  2. 寄存器、特殊功能寄存器和ram之间的区别联系

    存储器在CPU外,一般指硬盘,U盘等可以在切断电源后保存资料的设备,容量一般比较大,缺点是读写速度都很慢,普通的机械硬盘读写速度一般是50MB/S左右. 内存和寄存器就是为了解决存储器读写速度慢而产生 ...

  3. Cortex-M3 R0~R15寄存器组 & 特殊功能寄存器组

    [R0~R15寄存器组] Cortex-M3处理器拥有R0~R15的寄存器组,如: [R0~R12通用寄存器]R0~R12都是32位通用寄存器,用于数据操作.其中: R0~R7为低组寄存器,所有的指令 ...

  4. stm32 中库函数、结构体、地址的强制类型转换、相应特殊功能寄存器之间的关系

    以一个挂接在APB2上的外设函数使能为例 A : RCC_APB2PeriphClockCmd():时钟使能函数 1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFI ...

  5. MCS-51系列特殊功能寄存器(摘录)

    MCS-51系列特殊功能寄存器(80H~FFH) 1. P0 (80H) P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 2.SP 栈指针(81H) 3.DPTR 数据 ...

  6. 简单的51单片机多任务操作系统(C51)

    在网上看到这段代码,所以自己尝试了,可以跑起来,但是没有精确的定时功能,仅仅是任务的调度而已. 数组中是11,而不是12.这里写错了... /* 简单的多任务操作系统 其实只有个任务调度切换,把说它是 ...

  7. 单片机成长之路(51基础篇) - 008 C51 的标示符和关键字

    标准 C 语言定义了 32 个关键字,如下表(ANSI C的32个关键字): C51在此基础上针对单片机功能进行了扩展,详情见下表(C51编译器扩充关键字): C 51的数据类型 51单片机使用的C语 ...

  8. 单片机特殊功能寄存器(SFR)

    单片机如8051有21个SFR,地址为80H~0FFH的128个字节中,可以直接用寻址方式来操作SFR.(类似于sbit) 为了能直接访问这些SFR,keil提供饿了一种自汉族形式的定义方法.这种方法 ...

  9. MCS-51系列特殊功能寄存器(摘抄)

    1. P0 (80H) P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 2.SP 栈指针(81H) 3.DPTR 数据指针(由DPH和DPL组成) DPL 数据指针低八 ...

随机推荐

  1. 3D效果导航代码

    *, *:before, *:after { padding:; margin:; box-sizing: border-box; } .menu { list-style: none; width: ...

  2. sql server 扩展存储过程

    C# 代码 using Microsoft.SqlServer.Server; using System; using System.Collections.Generic; using System ...

  3. RELATED INTRODUCED

    1.综合知识 RSS,IMDB 1.1什么是RSS? RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是目前使用最广泛的XML应用.RSS搭建了信息迅速传播 ...

  4. 窥探 Swift 之 函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候 都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小 ...

  5. 1629 - Cake slicing(DP)

    花了近2个小时终于AC,好爽.. 一道类似于最优矩阵链乘的题目,受<切木棍>那道题的启示,该题的原理也是一样的,仅仅只是变成了且面积.那么对应的也要添加维度 . 显然要完整的表示状态,最少 ...

  6. C#截图操作方法大全

    using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApplication1 { class ScreenC ...

  7. Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容

    Asp.Net MVC 页面代码压缩筛选器 首先定义以下筛选器,用于代码压缩. /*页面压缩 筛选器*/ public class WhiteSpaceFilter : Stream { privat ...

  8. 面试题 HashMap 数据结构 实现原理

    数据结构 HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O ...

  9. hdu 2211

    题意: 中文题目,自己看.............. 递归调用.... 没什么难度,注意下long long就行........ AC代码: #include <iostream> #de ...

  10. AngularJs学习之ng-repeat

    ng-repeat用来遍历一个集合或为集合中的每个元素生成一个模板实例.集合中的每个元素都会被赋予自己的模板和作用域.同时每个模板实例的作用域中都会暴露一些特殊的属性. $index:遍历的进度(0 ...