(玩电子) 电子技术学习与研究
当前位置单片机教程网 >> 基础教程 >> 浏览文章

7课:单片机的特殊功能寄存器

作者:佚名   来源:本站原创   点击数:x  更新时间2007年08月16日   字体

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

  下图中我们能看出在51单片机内部有一个CPU用来运算控制有四个并行I/O口分别是P0P1P2P3有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

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

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

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

D7

D6

D5

D4

D3

D2

D1

D0

CY

AC

F0

RS1

RS0

OV

P

      表2

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

 

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

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

例78H+97H01111000+10010111

2AC辅助进位标志步半进位标志  用于表示Acc.3有否向Acc.4进位

例57H+3AH01010111+00111010

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

4RS1RS0工作寄存器组选择位这个我们已知了
              RS1RS0 = 00 —— 0区00H07H

              RS1RS0 = 01 —— 1区08H0FH

              RS1RS0 = 10 —— 2区10H17H

              RS1RS0 = 11 —— 3区18H1FH 

50V溢出标志位 表示Acc在有符号数算术运算中的溢出什么是溢出我们稍后再谈吧

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

例某运算结果是78H01111000显然1的个数为偶数所以P=0

4DPTRDPHDPL数据指针能用它来访问外部数据存储器中的我单元如果不用也能作为通用寄存器来用由我们自已决定如问用16位由两个8位寄存器DPHDPL组成主要用于存放一个16位地址作为访问外部存储器外RAM和ROM的地分针

5P0P1P2P3这个我们已经知道是四个并行输入/输出口的寄存器它里面的内容对应着管脚的输出

6SP堆栈指针专用于指出堆栈顶部数据的地址

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

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

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

作者点评这一课可能比较难懂了创家的评论很多都这样说其实并不需要把上面的这些东西都死记硬背在脑子里面这是很难的我们只需要理解他的工作原理一次看不懂就要多看几次等到要写程序的时候我们再把这些表格拿出来查阅所以建议你把本页保存为书签.笔者在开始学习单片机的时候也是这样做的.

发表评论告诉好友收藏此文关闭窗口

文章评论

Ƶ