c51特殊功能寄存器定义及作用

发布者:MysticGlow最新更新时间:2024-03-20 来源: elecfans关键字:c51  特殊功能寄存器  C语言 手机看文章 扫描二维码
随时随地手机看文章

  单片机C51语言是由C语言继承而来的。和C语言不同的是,C51语言运行于单片机平台,而C语言则运行于普通的桌面平台。C51语言具有C语言结构清晰的优点,便于学习,同时具有汇编语言的硬件操作能力。对于具有C语言编程基础的读者,能够轻松地掌握单片机C51语言的程序设计。

  c51主要特点

  单片机C51语言兼备高级语言与低级语言的优点。


  语法结构和标准C语言基本一致,语言简洁,便于学习。

  

  单片机C51实验板

  运行于单片机平台,支持的微处理器种类繁多,可移植性好。对于兼容的8051系列单片机,只要将一个硬件型号下的程序稍加修改,甚至不加改变,就可移植到另一个不同型号的单片机中运行。

  具有高级语言的特点,尽量减少底层硬件寄存器的操作。

  单片机C51语言提供了完备的数据类型、运算符及函数供使用。

  C51语言是一种结构化程序设计语言,可以使用一对花括号“{}”将一系列语句组合成一个复合语句,程序结构清晰明了。

  C51语言代码执行的效率方面十分接近汇编语言,且比汇编语言的程序易于理解,便于代码共享。

  “Hello world”程序

  c51特殊功能寄存器定义与作用

  在开始讲对C51单片机中特殊寄存器(SPR)的定义前,先简单介绍下我们在进行51单片机开发时经常看到的两个关键字“sbit”和”sfr“:

  sfr用于将一个单片机的特殊功能寄存器(specialfunctionregister)赋值给一个变量,这样在后面的程序中就可以中这个变量指引(referto)该寄存器

  sbit与sfr用法类似,只是sbit是位操作,用于将某个sfr中具体位赋值给一个变量,这样后面程序就可用通过该变量为该位清0或置1。

  接着我们以STC系列的51单片机为例简单的了解下单片机的特殊功能寄存器布局,如下:

  c51特殊功能寄存器定义及作用

  MCS-51单片机中,除了程序计数器PC和4组工作寄存器组外,其它所有的寄存器均为特殊功能寄存器(SPR),分散在片内RAM区的高128字节中,地址范围为80H~0FFH。SFR中有11个寄存器具有位寻址能力,它们的字节地址都能被8整除,即字节地址是以8或0为尾数的。

  为了能直接访问这些SPR,FranklinC51提供了一种自主形式的定义方法,这种定义方法与标准C语言不兼容,只适合与对MCS-51系列单片机进行C语言编程,特殊的能寄存器C51定义的一般语法格式如下:

  sfrsfr-name=intconstant;

  “sfr”是定义语句的关键字,其后必须跟一个MSC-51单片机真实存在的特殊功能寄存器名,“=”后面必须是一个整型常数,不允许带有运算符的表达式,是特殊功能寄存器“sfr-name”的字节地址,这个常数值的范围必须在SFR地址范围内,位于0x80~0xFF。

  例如:

  sfrSCON=0x98;    /* 串口控制寄存在器地址98H*/

  sfrTMOD=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”的定义地址。例如:

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

  这种定义适用于所有的新的16位SFR,但不能用于定时器/计数器0和1。

  对于位寻址的SFR中的位,C51的扩充功能支持特殊位的定义,像SFR一样不与标准C兼容,使用“sbit” 来定义位寻址单元。

  定义语句的一般语法格式有如下三种:

  第一种格式:sbitbit-name=sfr-name^intconstant ;

  “sbit”是定义语句的关键字,后跟一个寻址位符号名(该位符号名必须是MCS-51单片机中规定的位名称),“=”后的“sfr=name”中的位号,必须是0~7范围中的数。例如:

  sfrPSW=0Xd0;   /*定义PSW予寄存器地址为D0H*/

  sfrOV=PSW^2;   /*定义OV位为PSW.2,地址为D2H/*

  sfrCY=PSW^7;   /*定义CY位为PSW.7 地址为D7H^*/

  第二种格式:sbitbit-name=intconstant^intconstant;

  “=”后的intconstant为寻址地址们所在的特殊功能寄存器的字节地址,“^” 符号后的intconstant为寻址位在特殊功能寄存器中的位号。例如:

  sbitOV=0Xd0^2; /*定义OV位地址是D0H字节中的第2位*/

  sbitCY=0XD0^7; /*定义CY位地址是D0H字节中的第7位*/

  第三种格式:sbitbit-name=intconstant;

  “=”后的intconstant为寻址位的绝对地址。例如:

  sbitOV=0XD2;    /*定义OV位地址为D2H*/

  sbitOY=0XD7;    /*定义CY位地址为D7H*/

  特殊功能位代表了一个独立的定义类,不能与其它位定义和位域互换。

  了解完了关于特殊功能寄存器的定义,有人又会产生疑问:

  我们用sfrP0=0×80表示P0,用sfrSP=0×81表示SP,这个没有歧义。但有疑问的是:假如用sbitP0_1=0×81表示P0口的第一位,那么我想表示SP寄存器的第0位怎么办呢?如果也是定义成sbitSP_0=0×81那么明显会有二义性,编译器理解不了。其实这个问题是不存在的,从图1中可以看出,SPR又可以分为两个区域:可位寻址区和不可位寻址区。可位寻址区的寄存器地址能够被8整除,而不可位寻址区的寄存器地址不满足这一要求。因此例子中的sbitSP_0=0×81对于SP寄存器这是无效的应该写成sfrSP=0x81。

  例如:sbitP1^1=0x81;sfrSP=0x81;

  它们虽然都引用了同一个地址0×81,但是对于编译器来说,这两者的含义完全不同,前者因为有sfr关键字,所以是字节地址。后者因为是sbit关键字,所以是位寻址,表示的是一个bit。


关键字:c51  特殊功能寄存器  C语言 引用地址:c51特殊功能寄存器定义及作用

上一篇:51汇编伪指令
下一篇:学习51单片机晶振这21问题搞懂了学单片机就简单了

推荐阅读最新更新时间:2026-03-25 01:26

51特殊功能寄存器详解
一:中断允许寄存器 IE CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。 EX0 (IE.0),外部中断0允许位; ET0 (IE.1),定时/计数器T0中断允许位; EX1 (IE.2),外部中断0允许位; ET1 (IE.3),定时/计数器T1中断允许位; ES (IE.4),串行口中断允许位; EA (IE.7), CPU中断允许(总允许)位。 IE寄存器可进行位寻址,所以可单独操作各个位 例如要操作第零位,直接给EX0赋值即可 二:中断优先级控制 IP
[单片机]
51<font color='red'>特殊</font><font color='red'>功能</font><font color='red'>寄存器</font>详解
51单片机的特殊功能寄存器SFR
51单片机的特殊功能寄存器(SFR) 内容提要: 21个特殊功能寄存器不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作. 关键词: 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有2
[单片机]
对S3C2440特殊功能寄存器地址的深入挖掘
S3C2440集成了丰富了外设控制器(LCD控制器、USB Device控制器、USB Host控制器、NAND FLASH控制器、I2C控制器、SPI控制器等)。要控制这些外设就要设置相应控制器的寄存器以产生相应的驱动时序。学习S3C2440,主要是如何配置寄存器。 下面是S3C2440特殊功能寄存器地址: #define rBANKCON0 (*(volatileunsigned *)0x48000004) //Boot ROM control #define rBANKCON1 (*(volatileunsigned *)0x48000008) //BANK1 control #define rBANKCON2
[单片机]
对S3C2440<font color='red'>特殊</font><font color='red'>功能</font><font color='red'>寄存器</font>地址的深入挖掘
什么是单片机特殊功能寄存器?作用是什么?
什么是特殊功能寄存器? 答:特殊功能寄存器是用来对片内各功能模块进行管理、控制、监视的控制寄存器和状态寄存器,是一个特殊功能的RAM区。 MCS-51单片机特殊功能寄存器的作用是什么? 答:特殊功能寄存器的作用是对片内各功能模块进行管理、控制和监视。
[单片机]
51单片机特殊功能寄存器有多少?如何设置
MCS-51单片机特殊功能寄存器是怎样设置的? 答:MCS-51单片机内的I/O口锁存器、定时器、串行口缓冲器以及各种控制寄存器和状态寄存器都以特殊功能寄存器的形式出现 。 它们位于片内数据存储器之上,离散地分布在80H~FFH的地址空间范围内。 MCS-51单片特殊功能寄存器有多少? 答:MCS-51单片机特殊功能寄存器的总个数为26个 。 其中有12个可以位寻址,用户可以通过位功能标记对这12个寄存器的任意一个有效位进行操作。
[单片机]
单片机c语言教程第十三章--C51循环语句
循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操 作。如一个 12M 的 51 芯片应用电路中要求实现 1 毫秒的延时,那么就要执行 1000 次空语句 才能达到延时的目的(当然能使用定时器来做,这里就不讨论),如果是写 1000 条空语 句那是多么麻烦的事情,再者就是要占用很多的存储空间。我们能知道这 1000 条空语句, 无非就是一条空语句重复执行 1000 次,因此我们就能用循环语句去写,这样不但使程序 结构清晰明了,而且使其编译的效率大大的提高。在 C 语言中构成循环控制的语句有 while,do-while,for 和 goto 语句。同样都是起到循环作用,但具体的作用和使用方法又大不一 样
[单片机]
单片机C语言软件开发系统Keil C51的使用教程
KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,但是界面是英文的好多初学者看很多教程都是一头雾水,本站特地制作了一个相对简单的教程。他能能嵌入汇编语言保留了汇编代码高效,快速的特点。KEIL C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品,其效率已经达到了相当搞的程度。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。 Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序
[单片机]
单片机<font color='red'>C语言</font>软件开发系统Keil <font color='red'>C51</font>的使用教程
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved