历史上的今天
返回首页

历史上的今天

今天是:2025年03月10日(星期一)

正在发生

2020年03月10日 | 7课:单片机的特殊功能寄存器

2020-03-10 来源:eefocus

通过前面的学习,我们已知单片机的内部有ROM、有RAM、有并行I/O口,那么,除了这些东西之外,单片机内部究竟还有些什么,这些个零碎的东西怎么连在一起的,让我们来对单片机内部的寄存器作一个完整的功能分析吧!


下图中我们能看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。


对上面的图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到对应I/O口的锁存器就能了,那么对于定时/计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。事实上,我们已接触过P1这个特殊功能寄存器了,还有哪些呢?看下表1

符号

地址

功能介绍

B

F0H

B寄存器

ACC

E0H

累加器

PSW

D0H

程序状态字

IP

B8H

中断优先级控制寄存器

P3

B0H

P3口锁存器

IE

A8H

中断允许控制寄存器

P2

A0H

P2口锁存器

SBUF

99H

串行口锁存器

SCON

98H

串行口控制寄存器

P1

90H

P1口锁存器

TH1

8DH

定时器/计数器1(高8位)

TH0

8CH

定时器/计数器1(低8位)

TL1

8BH

定时器/计数器0(高8位)

TL0

8AH

定时器/计数器0(低8位)

TMOD

89A

定时器/计数器方式控制寄存器

TCON

88H

定时器/计数器控制寄存器

DPH

83H

数据地址指针(高8位)

DPL

82H

数据地址指针(低8位)

SP

81H

堆栈指针

P0

80H

P0口锁存器

PCON

87H

电源控制寄存器

表1 
 

<特殊功能寄存器地址映象表(一)>

 

<特殊功能寄存器地址映象表(二)>

 

<特殊功能寄存器地址映象表(三)>

下面,我们介绍一下几个常用的SFR,看图2。

1、ACC:累加器,常常用A表示。这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后我们将学到指令,能发现,所有的运算类指令都离不开它。

2、B:一个寄存器。在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。

3、PSW:程序状态字。这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们能了解CPU的当前状态,并作出对应的处理。它的各位功能请看表2

D7

D6

D5

D4

D3

D2

D1

D0

CY

AC

F0

RS1

RS0

OV


P

表2

PSW也称为标志寄存器,了解这个对于了解单片机原理非常的重要,存放各有关标志。其结构和定义如下:

 

下面我们逐一介绍sfr各位的用途

(1)CY:进位标志。用于表示Acc.7有否向更高位进位。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。

例:78H+97H(01111000+10010111)

(2)AC:辅助进位标志也叫半进位标志。  用于表示Acc.3有否向Acc.4进位

例:57H+3AH(01010111+00111010)

(3)F0:用户标志位,由我们(编程人员)决定什么时候用,什么时候不用。

(4)RS1、RS0:工作寄存器组选择位。这个我们已知了。
              RS1、RS0 = 00 —— 0区(00H~07H)

              RS1、RS0 = 01 —— 1区(08H~0FH)

              RS1、RS0 = 10 —— 2区(10H~17H)

              RS1、RS0 = 11 —— 3区(18H~1FH) 

(5)0V:溢出标志位。 表示Acc在有符号数算术运算中的溢出,什么是溢出我们稍后再谈吧。

(6)P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,不然为0。

例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。

4、DPTR(DPH、DPL):数据指针,能用它来访问外部数据存储器中的任一单元,如果不用,也能作为通用寄存器来用,由我们自已决定如何使用。16位,由两个8位寄存器DPH、DPL组成。主要用于存放一个16位地址,作为访问外部存储器(外RAM和ROM)的地址指针。

5、P0、P1、P2、P3:这个我们已经知道,是四个并行输入/输出口的寄存器。它里面的内容对应着管脚的输出。

6、SP:堆栈指针。(专用于指出堆栈顶部数据的地址。)
 

堆栈介绍:日常生活中,我们都注意到过这样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时候正好相反,先从最上面取,这种现象我们用一句话来概括:“先进后出,后进先出”。请大家想想,还有什么地方有这种现象?其实比比皆是,建筑工地上堆放的砖头、材料,仓库里放的货物,都是“先进后出,后进先出”,这实际是一种存取物品的规则,我们称之为“堆栈”。


在单片机中,我们也能在RAM中构造这样一个区域,用来存放数据,这个区域存放数据的规则就是“先进后出,后进先出”,我们称之为“堆栈”。为什么需要这样来存放数据呢?存储器本身不是能按地址来存放数据吗?对,知道了地址的确就能知道里面的内容,但如果我们需要存放的是一批数据,每一个数据都需要知道地址那不是麻烦吗?如果我们让数据一个接一个地放置,那么我们只要知道第一个数据所在地址单元就能了(看图2)如果第一个数据在27H,那么第二、三个就在28H、29H了。所以利用堆栈这种办法来放数据能简化操作


那么51中堆栈什么地方呢?单片机中能存放数据的区域有限,我们不能够专门分配一块地方做堆栈,所以就在内存(RAM)中开辟一块地方,用于堆栈,但是用内存的哪一块呢?还是不好定,因为51是一种通用的单片机,各人的实际需求各不相同,有人需要多一些堆栈,而有人则不需要那么多,所以怎么分配都不合适,怎样来解决这个问题?分不好干脆就不分了,把分的权利给用户(编程者),根据自已的需要去定吧,所以51单片机中堆栈的位置是能变化的。而这种变化就体现在SP中值的变化,看图2,SP中的值等于27H不就相当于是一个指针指向27H单元吗?当然在真正的51机中,开始指针所指的位置并非就是数据存放的位置,而是数据存放的前一个位置,比如一开始指针是指向27H单元的,那么第一个数据的位置是28H单元,而不是27H单元,为什么会这样,我们在学堆栈命令时再说明。其它的SFR,我们在用到时再介绍。

推荐阅读

史海拾趣

CETC公司的发展小趣事

CETC自成立以来,一直致力于电子科技领域的研发创新。在某次关键技术的攻关中,CETC的科研团队经过数月的艰苦努力,成功突破了某型雷达的核心技术,使我国在该领域达到了国际先进水平。这一成果的取得不仅提升了CETC的技术实力,也为公司在国内外市场赢得了良好的声誉,为公司的后续发展奠定了坚实基础。

Gazelle Microcircuits Inc公司的发展小趣事
+12V电压是电脑主板中非常重要的电压之一,它主要用于给硬盘驱动器、光驱、风扇等大功率设备供电。这些设备通常需要较高的电压来驱动其内部的电机或机械结构。
Eastman Kodak Company公司的发展小趣事

经过破产保护和重组的洗礼后,伊士曼柯达公司更加注重创新和可持续发展。公司加强了与新兴科技公司的合作,积极探索新的业务模式和市场机会。同时,柯达还致力于研发更加环保、高效的影像产品和技术,以满足客户对高品质影像的需求。未来,伊士曼柯达公司将继续秉承创新、品质、服务的理念,不断推动影像行业的发展和进步。

DAESAN公司的发展小趣事

在电子行业的激烈竞争中,DAESAN公司也曾遭遇过困境。一次严重的金融危机让公司的资金链几乎断裂,许多项目被迫中断。然而,DAESAN公司并没有放弃,他们积极寻求外部支持,同时加强内部管理,降低成本,提高效率。在困境中,公司不断总结经验教训,优化经营策略。最终,他们成功度过了危机,实现了逆境中的成长。

Alps Alpine Co Ltd公司的发展小趣事

DAESAN公司以其独特的设备回收与再利用技术,在电子行业中崭露头角。起初,公司只是一个小型的设备拆卸公司,但在一次偶然的机会中,他们发现许多被废弃的电子设备中,仍然含有大量可再利用的零部件和材料。于是,DAESAN公司开始专注于电子设备的回收和再利用,通过精细的拆卸和修复技术,将废旧设备转化为新的生产资源。这一举措不仅为公司带来了可观的利润,也为环保事业做出了贡献。

CUI公司的发展小趣事

在电子行业的初期,CUI技术的应用受限于其导电性能和稳定性。然而,随着科研人员的不断努力,新型的CUI材料逐渐问世,它们不仅导电性能优良,而且能够抵御各种环境因素的影响。与此同时,市场对于小型化、高集成度的电子产品需求日益增长,CUI技术因其能够在狭小空间内实现高效电路连接而备受青睐。

问答坊 | AI 解惑

TINA ti 仿真

我用TINA_TI直流/交流仿真时出现“TINA7仿真出现“Circuit must contain at least one  IC”的对话框怎么办?为什么会这样…

查看全部问答>

关于WINCE中断

请教一下高手,CPU接到中断后在OEMInterruptHandler处理后,返回了中断号,然后会调用哪个函数呀?谢谢!…

查看全部问答>

LM3S811DDLLXXRR笔记之七:比较器

这个比较器可以代替,模拟比较器。哪天再深入测下。现在先介绍下函数先:   比较器API提供一组函数来处理模拟比较器。比较器可以将一个测试电压和单个外部参考电压、一个公共的单端外部参考电压或一个公共的内部参考电压相比较。比较器可以 ...…

查看全部问答>

Application profile是ZIGBEE联盟定义的应用规范, 那Device profile是什么?急!!!

也就是所谓的ZDP。。。跟前面一个什么区别?急!!!!…

查看全部问答>

博世安防技术现身知名的莫斯科大剧院

博世安防技术现身知名的莫斯科大剧院 慧聪安防网讯 当著名的莫斯科大剧院于2005年至2011年期间进行整修时,博世被指派开发和 安装最先进的安防系统,包括防火、广播、疏散和视频监控技术。新的系统不仅要提供全面的、可 共同操作的网络,而且还 ...…

查看全部问答>

【视频分享】WEBENCH 系统电源架构

来自TI硅谷实验室的Jeff为您演示 WEBENCH 系统电源架构。这是一个用于热插拔集成和完整的系统级电源设计的工具。 $(\'swf_zkk\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'all ...…

查看全部问答>

富士通FRAM心得提交——MB85RC64

本帖最后由 ltbytyn 于 2013-12-27 14:22 编辑 本文中将使用MB85RC64来代指MB85RC64PNF_G_JNERE1。    前段时间申请到了富士通的MB85RC64(FRAM,铁电随机存取存储器)。看资料MB85RC64与传统的24C64(E2PROM)完全兼容(存储空间、封 ...…

查看全部问答>

BQ24195 OTG PIN 怎么控制

充电时是什么电平,放电时是什么电平,边充边放是什么电平。有谁有BQ24195中文规格书。发我邮箱一下,谢谢!…

查看全部问答>

麦克风前置放大输入与输出电压信号相位反相对声音的影响

做了一个简单的麦克风前置放大,用的是分立元件三极管,第一级共射放大,第二级共集,咪头拾取到的输入信号与经三极管放大后的输出信号电压相位是相反的,相差180度,这样出来的声音和原始声音会不会差别很大。 …

查看全部问答>

TI CC2650 套件注意事项汇总

最近在用TI的CC2650做一款低功耗蓝牙设备,板子入手两天,发现了一些使用中常遇到的问题,为避免大家走弯路,整理上来,以供参考。 1:开发环境我用的IAR 7.4,SDK版本tirtos_simplelink_2_11_01_09,ble_cc26xx_2_00_00_42893。 建议在完全理解开 ...…

查看全部问答>