特殊功能寄存器

单片机学习笔记——特殊功能寄存器(SFR)_(上) 使用控制电路实现乘除法时,用B寄存器存放在运算过程中保持不变的被乘数和除数 乘法运算中,需要不断地将乘数右移,判断其最低位,如果为1,则加上被乘数,故乘数不变 在除法运算中,要将被除数减去除数,得到余数,然后再加上商和向左移,所以除数是不变的 阅读详情

 

特殊功能寄存器(SFR)也称为专用寄存器,特殊功能寄存器反映了MCS-51单片机的运行状态。很多功能也通过特殊功能寄存器来定义和控制程序的执行。

MCS-51有21个特殊功能寄存器,它们被离散地分布在内部RAM的80H—FFH地址中,这些寄存的功能已作了专门的规定,用户不能修改其结构。表2是特殊功能寄存器分布一览表,我们对其主要的寄存器作一些简单的介绍。

表2 特殊功能寄存器

标识符号 地址寄存器名称

ACC 0E0H 累加器

B 0F0H B寄存器

PSW 0D0H 程序状态字

SP 81H 堆栈指针

DPTR 82H、83H 数据指针(16位)含DPL和DPH

IE 0A8H 中断允许控制寄存器

IP 0B8H 中断优先控制寄存器

P0 80H I/O口0寄存器

P1 90H I/O口1寄存器

P2 0A0H I/O口2寄存器

P3 0B0H I/O口3寄存器

PCON 87H 电源控制及波特率选择寄存器

SCON 98H 串行口控制寄存器

SBUF 99H 串行数据缓冲寄存器

TCON 88H 定时控制寄存器

TMOD 89H 定时器方式选择寄存器

TL0 8AH 定时器0低8位

TH0 8CH 定时器0高8位

TL1 8BH 定时器1低8位

TH1 8DH 定时器1高8位

 

程序计数器PC(program Counter)

程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。

累加器ACC(Accumulator)

累加器A是一个最常用的专用寄存器,大部分单操作指令的一个操作数取自累加器,很多双操作数指令中的一个操作数也取自累加器。加、减、乘、除法运算的指令,运算结果都存放于累加器A或AB累加器对中。大部分的数据操作都会通过累加器A进行,它形象于一个交通要道,在程序比较复杂的运算中,累加器成了制约软件效率的“瓶颈”,它的功能较多,地位也十分重要。以至于后来发展的单片机,有的集成了多累加器结构,或者使用寄存器阵列来代替累加器,即赋予更多寄存器以累加器的功能,目的是解决累加器的“交通堵塞”问题。提高单片机的软件效率。

 

 

寄存器B

在乘除法指令中,乘法指令中的两个操作数分别取自累加器A和寄存器B,其结果存放于AB寄存器对中。除法指令中,被除数取自累加器A,除数取自寄存器B,结果商存放于累加器A,余数存放于寄存器B中。

程序状态字(Program Status Word)

程序状态字是一个8位寄存器,用于存放程序运行的状态信息,这个寄存器的一些位可由软件设置,有些位则由硬件运行时自动设置的。寄存器的各位定义如下,其中PSW.1是保留位,未使用。下表是它的功能说明,并对各个位的定义介绍如下:

 

表3 程序状态字

位序 PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0

位标志 CY AC F0 RS1 RS0 OV - P

PSW.7(CY)进位标志位,此位有两个功能:一是存放执行某写算数运算时,存放进位标志,可被硬件或软件置位或清零。二是在位操作中作累加位使用。

PSW.6(AC)辅助进位标志位,当进行加、减运算时当有低4位向高4位进位或借位时,AC置位,否则被清零。AC辅助进位位也常用于十进制调整。

PSW.5(F0)用户标志位,供用户设置的标志位。

PSW.4、PSW.3(RS1和 RS0) 寄存器组选择位。可参见本章的图2定义。

PSW.2(OV)溢出标志。带符号加减运算中,超出了累加器A所能表示的符号数有效范围(-128—+127)时,即产生溢出,OV=1。表明运算运算结果错误。如果OV=0,表明运算结果正确。

执行加法指令ADD时,当位6向位7进位,而位7不向C进位时,OV=1。或者位6不向位7进位,而位7向C进位时,同样OV=1。

除法指令,乘积超过255时,OV=1。表面乘积在AB寄存器对中。若OV=0,则说明乘积没有超过255,乘积只在累加器A中。

除法指令,OV=1,表示除数为0,运算不被执行。否则OV=0。

PSW.0(P)奇偶校验位。声明累加器A的奇偶性,每个指令周期都由硬件来置位或清零,若值为1的位数奇数,则P置位,否则清零。

 

数据指针(DPTR)

数据指针为16位寄存器,编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节DPL。

DPTR主要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址寄存器使用,此时,使用如下两条指令:

MOVX A, @DPTR

MOVX @DPTR, A

在访问程序存储器时,DPTR可用来作基址寄存器,采用基址+变址寻址方式访问程序存储器,这条指令常用于读取程序存储器内的表格数据。

MOVC A, @A+@DPTR

堆栈指针SP(Stack Pointer)

堆栈是一种数据结构,它是一个8位寄存器,它指示堆栈顶部在内部RAM中的位置。系统复位后,SP的初始值为07H,使得堆栈实际上是从08H开始的。但我们从RAM的结构分布中可知,08H—1FH隶属1—3工作寄存器区,若编程时需要用到这些数据单元,必须对堆栈指针SP进行初始化,原则上设在任何一个区域均可,但一般设在30H—1FH之间较为适宜。

数据的写入堆栈我们称为入栈(PUSH,有些文献也称作插入运算或压入),从堆栈中取出数据称为出栈(POP,也称为删除运算或弹出),堆栈的最主要特征是“后进先出”规则,也即最先入栈的数据放在堆栈的最底部,而最后入栈的数据放在栈的顶部,因此,最后入栈的数据出栈时则是最先的。这和我们往一个箱里存放书本一样,需将最先放入箱底部的书取出,必须先取走最上层的书籍。这个道理非常相似。

那么堆栈有何用途呢?堆栈的设立是为了中断操作和子程序的调用而用于保存数据的,即常说的断点保护和现场保护。微处理器无论是在转入子程序和中断服务程序的执行,执行完后,还是要回到主程序中来,在转入子程序和中断服务程序前,必须先将现场的数据进行保存起来,否则返回时,CPU并不知道原来的程序执行到哪一步,原来的中间结果如何?所以在转入执行其它子程序前,先将需要保存的数据压入堆栈中保存。以备返回时,再复原当时的数据。供主程序继续执行。

转入中断服务程序或子程序时,需要保存的数据可能有若干个,都需要一一地保留。如果微处理器进行多重子程序或中断服务程序嵌套,那么需保存的数据就更多,这要求堆栈还需要有相当的容量。否则会造成堆栈溢出,丢失应备份的数据。轻者使运算和执行结果错误,重则使整个程序紊乱。

MCS-51的堆栈是在RAM中开辟的,即堆栈要占据一定的RAM存储单元。同时MCS-51的堆栈可以由用户设置,SP的初始值不同,堆栈的位置则不一定,不同的设计人员,使用的堆栈区则不同,不同的应用要求,堆栈要求的容量也有所不同。堆栈的操作只有两种,即进栈和出栈,但不管是向堆栈写入数据还是从堆栈中读出数据,都是对栈顶单元进行的,SP就是即时指示出栈顶的位置(即地址)。在子程序调用和中断服务程序响应的开始和结束期间,CPU都是根据SP指示的地址与相应的RAM存储单元交换数据。

堆栈的操作有两种方法:其一是自动方式,即在中断服务程序响应或子程序调用时,返回地址自动进栈。当需要返回执行主程序时,返回的地址自动交给PC,以保证程序从断点处继续执行,这种方式是不需要编程人员干预的。第二种方式是人工指令方式,使用专有的堆栈操作指令进行进出栈操作,也只有两条指令:进栈为PUSH指令,在中断服务程序或子程序调用时作为现场保护。出栈操作POP指令,用于子程序完成时,为主程序恢复现场。

 

源文档 <http://www.8951.com/book/jiao1n14.htm>

 

51单片机的特殊功能寄存器(SFR) 阅读前提醒: 文中提到的8051指的是8051微控制器,即51单片机在上一篇文章中,提到8051微控制器的RAM被划分为通用寄存器、按位寻址寄存器、寄存器组、以及特殊功能寄存器。这里讲一下特殊功能寄存器(SFR)。8051的特殊功能寄存器用于控制各种外围硬件设备,包括定时器、串行端口、I/O端口。也可以用于更改和获取微处理器的运行模式。 阅读详情

相关推荐

单片机的特殊功能寄存器

当然在真正的51机中,开始指针所指的位置并非就是数据存放的位置,而是数据存放的前一个位置,比如一开始指针是指向27H单元的,那么第一个数据的位置是28H单元,而不是27H单元,为什么会这样,我们在学堆栈命令时再说明。堆栈介绍:日常生活中,我们都注意到过这样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时候正好相反,先从最上面取,这种现象我们用一句话来概括:“先进后出,后进先出”。例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。

zhangjianfzf的博客 2465

特殊功能寄存器的基本概念

特殊功能寄存器(Special Function Register, SFR)是单片机内部的重要存储单元,用于实现单片机的各种功能。SFR是一组具有特定地址的寄存器,它们中的每一位或字节都对应着单片机内某个硬件资源的状态或控制信息。通过对这些寄存器的读写操作,程序员可以直接与单片机的硬件进行交互,从而实现对单片机功能的精确控制。在8051系列单片机中,SFR被分配了特殊的地址空间,通常位于内部RAM的最高端(从地址0x80到0xFF)。每个SFR都有一个预定义的名字和地址,例如P0、P1、TMOD等。

qq_40698086的博客 1597

proteus+keil5仿真学习笔记(补充章 特殊功能寄存器下)

本章主要以实际应用方向,介绍寄存器功能。串行口:串行数据缓冲寄存器SBUF、串行口控制寄存器SCON;低功耗应用:电源控制寄存器PCON;控制器:数据指示DPTR(DPH、DPL)、堆栈指针SP、端口寄存器P0~P3。其中有些寄存器功能会涉及不同应用功能,标红标记。

muling0504的博客 2789

特殊功能寄存器SFR

特殊功能寄存器sfr       sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255。       利用它可以访问51单片机内部的所有特殊功能寄存器。(sfr 是定义8 位的特殊功能寄存器而sfr16 则是用来定义16 位特殊功能寄存器)   (1) sbit 位变量名=位地址        sbit  P1_1 = Ox91; 这样是把位的绝对地址赋给位变量.同sfr

小磊's blog 1万+

STC89C52RC的特殊功能寄存器

具体来说,可以通过设置TMOD寄存器的各个位,来选择定时器/计数器的计数模式和计数源,并选择定时器/计数器的工作模式,以满足不同的应用需求。同时,在处理定时器/计数器中断时,需要读取TF1或TF0标志位,判断中断是否发生,并及时清除标志位,以避免重复中断。注意,在开启具体中断之前,需要先开启EA全局中断使能位,否则对应中断即使被设置为开启,也不会触发中断。其中,模式0为13位定时器/计数器模式,模式1为16位定时器/计数器模式,模式2为8位自动重装载定时器模式,模式3为16位自动重装载定时器模式。

m0_61107092的博客 3830

proteus+keil5仿真学习笔记(补充章 特殊功能寄存器上)

51单片机内部共有21个SFR(特殊功能寄存器),其反映了单片机的状态,是单片机的状态及控制字寄存器。运算器以算术逻辑单元ALU为核心,加上累加器ACC、暂存寄存器TMP和程序状态字寄存器PSW等组成。ALU主要用于完成二进制数据的算术和逻辑运算,并通过对运算结果的判断影响程序状态字寄存器PSW中有关位的状态。累加器ACC是一个8位的寄存器(在指令中一般写为A),通过暂存寄存器TMP与ALU相连。

muling0504的博客 3073

8051的特殊功能寄存器

特殊功能寄存器 8051有21个特殊功能寄存器,其中大部分是8位的,还有一些是16位的。我们对51单片机的操作实质是对特殊功能寄存器的操作。SFR是我们操作的对象,对他们进行读和写就是在操作51单片机。 PSW(程序状态字寄存器):保存程序在执行过程中一些状态。 CY:进位位CY是在执行加法(减法)时,如果第7位有进位(借位),则将CY置1...

zy010101博客 1万+

学习笔记之-51单片机特殊功能寄存器

一.前言  学习51单片机的过程中,其实就是学习怎么用它的特殊功能寄存器(有些寄存器是我们看不到的),特殊功能寄存器是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据。我们写程序驱动硬件其实就是配置各种各样的寄存器,他是软硬件的最底层的一个接口。更加深入了解寄存器的工作过结构原理会在后面的内容中补充,这里只是把最常用的做一个整理,方便学习查阅。   51单片机

gjxman1314的博客 3090

51单片机之特殊功能寄存器SFR

51单片机之特殊功能寄存器全部的特殊功能寄存器:特殊寄存器1、ACC(A):累加器特殊寄存器2、B:辅助寄存器特殊寄存器3、标志寄存器PSW:PSW的内部位含义:举个例子:不做解释了PC:程序计数器SP:堆栈指针DPTR:数据指针 全部的特殊功能寄存器: 特殊寄存器1、ACC(A):累加器 ALU(算数运算逻辑单元,是运算器的重要部件)在进行运算时,数据绝大部分来源于累加器A,运算的结果通常也送回累加器A 特殊寄存器2、B:辅助寄存器 此寄存器是为乘法和除法指令而设置的 以乘法为例:一个8bit的数和

千寻瀑 9263

【硬见小百科】单片机的特殊功能寄存器

在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。 &lt;特殊功能寄存器地址映象表(一)&gt; &lt;特殊功能寄存器地址映象表(二)&gt; &lt;特殊功能寄存器地址映象表(三)&gt; 几个常用的SFR 1、ACC:累加器,常常用A表示。这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢...

weixin_44367275的博客 1961

2.4 特殊功能寄存器和位定义

接下来的几节,我们会带着大家编写第一个单片机程序。在此之前,我们先来了解一些 51 单片机特有的程序语法以及 Keil 软件的基本操作步骤,请大家一定要有耐心。 我们主要是用 C 语言来对单片机编程,而有的单片机有那么几条很特殊的独有的编程语句,51 单片机就有,先介绍 2 条。 第一条语句是:sfr  P0 = 0x80; sfr 这个关键字,是 51 单片机特有的,他的作用是

芝麻软件工作室的专栏 2545

西门子PLC 的特殊功能寄存器

西门子PLC 特殊功能寄存器

qq_38326420的博客 7万+

80MHz~100MHz频谱分析仪设计

由理论分析可知,经过乘法器后输出的信号为频率为w1+w2的高频信号和w1-w2的低频信号,除了想要采样的直流信号外,最小的信号频率为100kHz。因此,经过一系列推导可以得到该滤波器的元件C1,C2,C3,R1,R2的近似值分别为:C1=2.36nF,C2=32.1nF,C3=1.07nF,R1=1.39k,R2=2.84k。AK,此时的频率w2即为被测信号的频率,待测信号源电压幅度为,因此为了能达到直流采样的设计,我们将本振源的频率输出范围做成80~110 MHz,提高了题目的频率要求。

qq_48771816的博客 5243

C51/C52 特殊功能寄存器表

C51/C52 特殊功能寄存器表

Round_Moon 的博客 3284

Python RK3588 MPP 8路视频硬解码!全体目光向我看齐!

本文重写了官方demo、加入了Zlmediakit进行拉流并通过pybind11将代码封装成so库,现在,在python中直接通过import的方式,就能完成基础的拉流解码操作,目前支持8路拉流解码!!!

m0_46303486的博客 4880

Windows用户必看:如何在WSL中完美安装CosyVoice的ttsfrd依赖(附避坑指南)

本文为Windows用户提供了在WSL中部署CosyVoice语音合成模型并解决其关键依赖ttsfrd的完整指南。文章详细介绍了从WSL环境配置、Python环境搭建、模型下载到ttsfrd深度安装与问题排查的全流程,并针对WSL特有的文件系统、权限和GPU支持问题提供了解决方案,帮助开发者高效攻克部署难题。

dell8的博客 248
上一篇: [推荐] 程序员的十层楼:大家都来测测你的技术层级
下一篇: 周立功写给学单片机的年轻人
liufei_learning
博客等级 码龄17年 821粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值