SFR(51子系列21个,11个可位寻址)
- 格式:doc
- 大小:43.00 KB
- 文档页数:1
单片机存储器1. MCS-51单片机的存贮器有程序存贮器ROM和数据存贮器RAM 之分。
由于外部程序存贮器和外部数据存贮器的地址可以重迭,所以我们说MCS-51单片机的寻址空间为2×64KB=128KB ,不过要注意:“片外程序存贮器和片外数据存贮器,根据实际需要也可以合并成一个统一的地址空间,此时最大寻址空间为64KB而不是128KB了。
”对外部程序存贮器的写操作是由编程器完成,而对其读操作则是由读选通控制信号/PSEN( Program Store Enable)再配以读操作指令MOVC来完成。
也就是由MOVC指令产生信号/PSEN,从而对片外程序存储器进行读操作。
对外部数据存贮器的写操作是由写选通控制信号/WR再配以指令MOVX来完成,而对其读操作则是由读选通控制信号/RD再配以MOVX 来完成。
也就是由指令MOVX指令产生/WR或/RD信号,从而对片外RAM进行写或读操作。
2. 程序存贮器ROMMCS-51单片机中设有一个片内、片外程序存贮器选择控制信号/EA(External Access)。
MCS-51单片机程序存储器示意图如果使/EA=1,则片内、片外程序存贮器ROM统一编址为64KB。
系统复位后,将先执行片内存贮器ROM中的程序。
当PC中内容超过OFFFH或1FFFH时,将自动转到执行片外程序存贮器中的程序。
片内程序存储器空间为0000H~0FFFH或0000H~1FFFH,片外程序存储器空间的地址不能与片内程序存储器空间地址相重迭。
至于具体执行哪里的程序完全取决于PC值。
如果使/EA=0,则只执行片外程序存贮器的程序,其地址空间为0000H~FFFFH 。
换言之,如果片内无程序存贮器ROM或不想访问片内程序存贮器ROM,则必须使/EA=0 。
注意:当系统复位时PC内容为0000H ,这意味着程序的执行总要从0000H单元开始,但用户程序又不能从0000H开始存放。
这是因为在程序存储器中有7个非常特殊的、固定的单元,这些单元所存放的内容是有特定要求的。
习题_C51语⾔答案⼀、填空1.KeiL C51软件中,⼯程⽂件的扩展名是___UV2_______,编译连接后⽣成可烧写的⽂件扩展名是___HEX_________。
2.C51⽀持的指针有⼀般指针和存储器指针。
3.C51中,没有专门的循环语句,我们可以⽤函数____ crol _____完成⼀个字节的循环左移,⽤__ _irol_ ___完成⼆个字节的循环左移。
4.C51的基本数据类型有位型、字符型、整型、长整型、浮点型、双精度浮点型。
5.C51的存储类型有data 、bdata 、idata 、pdata 、xdata 、code 。
6.C51的存储模式有SMALL 、COMPACT 和LARGE 。
7.C51程序与其他语⾔程序⼀样,程序结构也分为顺序结构、选择结构、循环结构三种。
8.C51中int型变量的长度为 4位,其值域为0~65535 。
9.C51中关键字sfr的作⽤定义8位特殊功能寄存器,sbit的作⽤定义可位寻址对象,⽤于位寻址,从位寻址字节中定义位变量。
10.函数定义由函数⾸部和函数体两部分组成。
11.C51中“!”运算符的作⽤是逻辑运算结果值取反。
12.若函数⽆返回值,⽤void 关键字指定。
13.若局部变量未初始化,其初值为0 。
⼆、单项选择题:1.89S51的内部程序存储器与数据存储器容量各为多少?( C )(A)64KB、 128B ( B)4KB、64KB(C)4KB、128B (D)8KB、256B2.在8x51芯⽚⾥,哪个引脚⽤于控制使⽤内部程序存储器还是外部程序存储器?( B) P17 (A)XTAL1 (B)/EA (C)/PSEN(D)ALE3.下列哪个不是KeilC的预处理命令?(C) (A)#include(B)#define(C)#exit(D)#if4.下列哪个不是KeilC的数据类型?( B) (A)void(B)string(C)char(D)float5.在KeilC的程序⾥,若要指定P0⼝的bit3,如何编写?(C )(A)P0.3 (B)Port0.3 (C)P0^3 (D)Port^36.在8x51⾥,若要扩展外部存储器时,数据总线连接哪个输⼊/输出端⼝?(A )(A)P0 (B)P1 (C)P2 (D)P37.在KeilC⾥,判读开关状态时,使⽤if_else if语句与使⽤switch语句有何差异?(B )(A)if-else if 语句较快(B)if-else if语句有优先级(C)switch语句可判读较多开关状态(D)switch语句有优先级8.在KeilC⾥,中断⼦程序与函数有何不同?(A )(A)中断⼦程序不必声明(B)函数不必声明(C)中断⼦程序必须有形式参数(D)中断⼦程序⼀定会有返回值9.利⽤下列( A )关键字可以改变⼯作寄存器组A、interruptB、sfrC、whileD、using10.C51中⼀般指针变量占⽤( C )字节存储。
一、单项选择题:(每小题2分,共10分。
在每小题备选答案中选出一个正确答案,并将正确答案的代码填在题中括号内。
选对得分,不选、选错均不得分。
)1.利用下列( D )关键字可以改变工作寄存器组A、interruptB、sfrC、whileD、using2.C51中一般指针变量占用( C )字节存储。
A、一个B、两个C、三个D、四个3.使用宏来访问绝对地址时,一般需包含的库文件是( B )A、 B、 C、 D、4.执行#define PA8255 XBYTE[0x3FFC];PA8255=0x7e;后存储单元0x3FFC的值是(A )A、Ox7eB、8255HC、未定D、7e 5.设有int i;则表达式i=1,++i,++i||++i,i的值为(C)A、1B、2C、3D、46.设有int a[ ]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是(C)A、10,11,12B、11,12,12C、10,12,12D、11,11,12 7.设有int i;则表达式i=1,++i,i||++i,i的值为(B)A、1B、2C、3D、4二、判断题:(每小题1分,共10分。
正确的在括号内打“√”,错误的打“×”。
判对得分,不判、判错均不得分。
)1.若一个函数的返回类型为void,则表示其没有返回值。
(√)2.特殊功能寄存器的名字,在C51程序中,全部大写。
(√)3.“sfr”后面的地址可以用带有运算的表达式来表示。
(×)4.#include <>与#include “”是等价的。
(√)5.sbit不可以用于定义内部RAM的可位寻址区,只能用在可位寻址的SFR上。
(×)6.Continue 和break都可用来实现循环体的中止。
(×)7.若一个函数的返回类型为void,则表示其没有返回值。
(√)8.所有定义在主函数之前的函数无需进行声明。
51单片机特殊功能寄存器(SFR)介绍51单片机特殊功能寄存器(SFR)介绍1、21 个寄存器介绍51 系列单片机内部主要有四大功能模块,分别是I/O 口模块、中断模块、定时器模块和串口通信模块(串行I/O 口),如其结构和功能如下图:图151 单片机结构和功能图51 单片机掌握的好坏,其实就是能否正确操作这四个功能模块,而其操作的实质则又是能否对每个模块所对应寄存器的正确操纵。
所以下面重点介绍一下51 系列单片机内部的特殊功能寄存器(简称SFR,以下说明以此代替)。
(关于什么叫特殊功能寄存器,这里先不作介绍,不懂的请查阅51 单片机相关资料。
)51 单片机内部共有21 个SFR,其布局如图2,从图中可以看出,每个SFR 占1 个字节,多数字节单元中的每一位又有专用的位名称。
这21 个SFR 又按是否可以位寻址分为两大部分,ACC、IE、P1 等11 个可以位寻址,SP、TMOD 等不可以位寻址。
图2 51 单片机SFR 布局图2、位寻址解释下面以P1、IE 寄存器(可位寻)和TMOD(不可位发)为例解释一下位寻址。
能位寻址是指能够对它的每一位都可以进行位操作,如图3,如P1 口接8 个灯,灯阳极接正极,阴极接单片机的P1 口的8 个脚。
现在要让接P1 口第1 个引脚的灯亮,程序中可以写P1=0xfe,也可以先定义deng1=P1,即P1 口的第1 位,至于为什么写P1,是因为KEIL 软件规定的,然后deng1=0。
也就是P1=0xfe 和deng1=0 都是可以点亮第一个灯,后者deng1=0 属于位操作,前者P1=0xfe 属于总线操作,也就是8 个引脚一起操作。
图3 8 位灯接线图下面再以IE 寄存器为例进行位操作的解释。
IE 寄存器为中断允许寄存器,如各位的作用。
8051 单片机特殊功能存储器SFR 基础详解
8051 单片机共有21 个专用寄存器,现把其中部分寄存器简单介绍如
下:
程序计数器(PCProgram Counter)。
在实训中,我们已经知道PC 是一个16 位的计数器,它的作用是控制程序的执行顺序。
其内容为将要执行指令的地址,寻址范围达64 KB。
PC 有自动加1 功能,从而实现程序的顺序执行。
PC 没有地址,是不可寻址的,因此用户无法对它进行读写,但可以通过转移、
调用、返回等指令改变其内容,以实现程序的转移。
因地址不在SFR(专用寄
存器)之内,一般不计作专用寄存器。
累加器(ACCAccumulator)。
累加器为8 位寄存器,是最常用的专用寄存
器,功能较多,地位重要。
它既可用于存放操作数,也可用来存放运算的中
间结果。
MCS-51 单片机中大部分单操作数指令的操作数就取自累加器,许
多双操作数指令中的一个操作数也取自累加器。
B 寄存器。
B 寄存器是一个8 位寄存器,主要用于乘除运算。
乘法运算
时,B 存乘数。
乘法操作后,乘积的高8 位存于B 中,除法运算时,B 存除数。
除法操作后,余数存于B 中。
此外,B 寄存器也可作为一般数据寄存器
使用。
程序状态字(PSWProgram Status Word)。
程序状态字是一个8 位寄存器,用于存放程序运行中的各种状态信息。
其中有些位的状态是根据程序执行结。
特殊功能寄存器(SFR)
Special Functional Register
51单⽚机提供128字节的特殊功能寄存器(SFR)寻址区,地址为80H~FFH。
51单⽚机中,除了程序计数器PC和4组通⽤寄存器组之外,其他所有的寄存器均为SFR,并位于⽚内特殊寄存器区。
这个区域
可位寻址、字节寻址或字寻址,⽤以控制定时器、计数器、串⼝、IO及其他部件。
特殊功能寄存器可由以下⼏种关键字说明。
1.SFR 声明可字节寻址的特殊功能寄存器,⽐如sfr PO=0x80;表⽰PO⼝地址为80h。
注意:“ sfr”后⾯必须跟⼀个特殊寄存器名;“=”后⾯的地址必须是常数,不允许带有运算符的表达式,这个常数值的范围必须在特殊功能寄存器地址范围内,位于
Ox8OH到0xFFH之间。
2.sfr16 许多新的51派⽣系列单⽚机⽤两个连续地址的SFR来指定16位值,例如8052⽤地址Oxcc和OxCD表⽰定时器/计数器2的低和⾼字节,如sfr16 T2=0XCC;表⽰T2地址的低地址T2L=0xCC,⾼地址T2H=0xCD,sfr16声明和sfr声明须遵循相同的原则、任何符号名都可⽤在sfr的声明中。
声明中名字后⾯不是赋值语句.⽽是⼀个SFR地址,其⾼字节必须位于低字节之后.这种声明适⽤于所有新的SFR,但不能⽤于定时/计数器O和计数器1。
3. sbit 声明可位寻址的特殊功能寄存器和别的可位寻址的⽬标。
“=”号后将绝对地址赋给变量名,3种变量声明形式如下:
sbit CY=PSW^7
sbit CY=0xD0^7
sbit CY=0XD7。
关于51单片机中的RAM、SFR和位地址的问题51单片机中_有_4EH这个位地址。
51单片机片内RAM的20H~2FH,这十六字节,可以按照“位”来寻址。
这里面共有128个“位地址”,分别为00H~7FH。
位地址4EH,是在“字节地址为29H的字节单元”中的第6位。
后记:做而论道搜集了51单片机中片内RAM的使用规范,整理如下。
MCS-51系列单片机片内RAM共有128字节,地址范围为00H~7FH。
在这128字节中,全部都可以按照字节地址进行操作(读、写或运算),直接或间接寻址方式皆可。
在这128字节中,按照使用特点,可以分成三类:工作寄存器区、位寻址区和通用数据区。
片内RAM的使用分类可见表1。
下面按照它们的功能特点,分别加以介绍。
1.工作寄存器区在MCS-51系列单片机的片内RAM中,有四个工作寄存器区,分别称为工作寄存器区0~工作寄存器区3。
每区有八个字节,除了可以用字节地址号码操作之外,还可以用R0、R1…R7为名称对其操作。
用名称进行操作,称为寄存器寻址,指令代码较为简短。
其中R0、R1可以作为间接寻址寄存器,以其中内容作为地址,能够对片内RAM(或片外RAM的256字节)进行间接寻址。
在任何时刻,只能使用一个工作寄存器区。
当前使用那个区,可以通过指令设置PSW中的RS1和RS0来决定。
PSW称为程序状态字,是下面要介绍的特殊功能寄存器。
通过设置RS1和RS0,可以快速切换当前工作寄存器区,适合在不同的程序段中进行保护现场。
当前没有使用的工作寄存器区,不能使用R0、R1…R7等名称,但可以按字节地址对其随意读写。
复位时RS1和RS0皆初始化为0,故此复位后将自动使用工作寄存器区0。
2.位寻址区位寻址区共有16字节,字节地址为20H~2FH,每个字节中的8个“位”,都有一个“位地址”。
共有128个位,“位地址”的范围为00H~7FH。
这个区域中的“字节地址”与“位地址”的对应关系可见表2。
MCS-51单片机21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SF R存储空间中,地址空间为80H-FFH,在这片SF R空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。
在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有R OM,用来存放程序,有R AM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。
在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SF R)。
这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):分别说明如下:1、ACC---是累加器,通常用A表示这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。
它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。
自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。
该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3、PSW-----程序状态字。
这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。
它的各位功能请看下表:下面我们逐一介绍各位的用途CY:进位标志。
8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。
这样就没事了。