版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2.1 累加器和工作寄存器组2.1.1 寄存器 8051使用最频繁的一个8位寄存器:用于所有的算术和逻辑运算指令,访问外部数据存储器或访问程序存储器中的查表指令。一、寄存器A(累加器ACC,Accumulator) 专为乘法和除法操作设置的8位寄存器,常与累加器A配对使用,称为AB寄存器对。二、寄存器B三、工作寄存器R0R7也是使用较多的8个8位寄存器。常用来存放数据、地址、运算的中间结果等,由于它们的功能及使用不做预先规定,因此也称为通用寄存器。 MOV A ,#23H;被加数23H送入A,相当变量赋初值 MOV R2,#47H;加数47H送入R2,相当变量赋初值 ADD A ,R2; A=
2、 6AH,两变量相加,和存入A例2-1 加法计算说明:1、MOV 目的操作数 , 源操作数 ;传送指令,将源操作数复制到目的操作数指令执行后,目的操作数具有和源操作数同样的内容,其原来的数据被覆盖。 2、ADD A , 源操作数 ;加法指令完成1字节的源操作数和累加器A中数据相加并把结果存放到累加器A的功能。源操作数在指令执行前后不发生变化,而累加器A在指令执行前存放的是一个加数,指令执行后存放的是和。 操作数的寻址方式:1、立即寻址:前缀“#”,8位立即数记作 #data,是数值只能作为源操作数。2、寄存器寻址:操作数由寄存器单元提供,其内容可以改变,既可作源操作数也可以做目的操作数。A和R
3、0R7均是寄存器寻址。MOV A ,#25H ;被乘数25H送入A,相当变量赋初值MOV B ,#65H ;乘数65H送入B,相当变量赋初值MUL AB ;AB=0E99H, B=0EH, A = 99H例2-2 乘法计算说明:1、MUL AB ;乘法指令乘法时AB中放两个8位无符号乘数,执行后积的低8位存A,积的高8位存B。 2、DIV AB ;除法指令除法时A中放一个8位被除数,B中放一个8位除数,均为无符号数;执行后商送入A而余数送入B 操作数的寻址方式:操作数AB寄存器对是寄存器寻址。2.1.2 工作寄存器和工作寄存器组 1、工作寄存器:指令当中R0R7这8个工作寄存器是8051的当前
4、工作寄存器,8051共有32个工作寄存器。(在片内RAM中占用了32个单元(地址00H1FH),称此区域为工作寄存器区) 2、工作寄存器组:每8个工作寄存器为1组,称之为工作寄存器组(Register Banks)。工作寄存器区分4组,组号依次为0、1、2、3。 3、当前工作寄存器组:每组都有工作寄存器R0R7,在任意时刻只能使用其中的一组,这组正被使用的寄存器组就称为当前工作寄存器组。 4、切换:用户可以通过指令改变程序状态字寄存器PSW中RS1(D4位)和RS0(D3位)的状态组合来切换工作寄存器组,使不同的程序段使用不同的寄存器组。这个功能为用户程序保护寄存器内容提供极大的方便,能实现快
5、速现场保护功能, 对于提高程序的效率和响应中断的速度是很有利的。2.2 程序状态字寄存器(Program Status Word) 和其它的微处理器一样,8051的CPU也包含表明运算结果状态的标志寄存器,这个标志寄存器在8051中被称为程序状态字寄存器PSW,它是一个逐位定义的8位寄存器。一、进位标志位CY(PSW.7):在执行加(减)法运算过程中指示最高位D7有无进(借)位。二、辅助进位标志位AC(PSW.6):指示加法运算过程中D3位到D4位有无进位。用于BCD码校正指令。三、溢出标志位OV(PSW.2):进位标志位CY用于在无符号数算术运算中检查运算结果是否超出8位无符号数表示的数的范
6、围(0255);溢出标志位只用于符号数算术运算中检查结果是否超出了8位带符号数表示的数的范围(128127)。当运算结果超出了计算机最大所能表示的符号数范围时,便产生溢出。此时的溢出标志位OV1。此外,在乘法运算中,OV=1表示乘积超过255,需要从寄存器B取出积的高字节;在除法运算中,OV=1表示除数为0。四、奇偶标志位P(PSW.0):指示指令执行后累加器A中1的个数的奇偶性。AC=1,因为D3位向D4位产生进位2.2 程序状态字寄存器(Program Status Word)例2-3 分析下列加法指令对标志位的影响MOV A , #38H ADD A , #2FH OV=CS CP=0
7、因为符号位的进位CS及最高数值位的进位CP的取值均为0。CY=0,因为D7位没有产生进位P=1, 因为累加器A(保存的是和)中有奇数个1(5个1)。2.3 数据地址指针(Data Pointer)2.3.1 概述16位的数据地址指针寄存器,指示数据地址的寄存器,简称数据指针。一般作为间址寄存器访问片外数据存储器用。数据地址指针还可以与累加器A结合,访问程序存储器表格中的固定数据,作基址寄存器使用。数据地址指针由两个8位寄存器拼装而成,分别是高字节的DPH(Data Pointer High)和低字节的DPL(Data Pointer Low)。2.3.2 操作1、赋值MOV DPTR,1000
8、H ;给数据地址指针DPTR送入16位立即数1000H(按16位寄存器操作),这是8051唯一的16位传送指令,其立即数在指令系统中以#data16描述。 或 MOV DPH,10H;给DPH送入高字节8位立即数10H(按8位寄存器操作)MOV DPL,00H;给DPL送入低字节8位立即数00H(按8位寄存器操作)2.3.2 操作2、自增INC DPTR,1000H ;DPTR = DPTR + 1 注意: 8051中的数据地址指针寄存器DPTR只有加1命令,没有减1命令。数据指针自增操作的优点: 由于在数据存储器中,数据一般是连续排放的,称数据块,相当高级语言中的数组。访问时先给出数据块首地
9、址(地址指针赋值操作),即第一个数据的地址,相当高级语言定义的数组名。然后通过数据指针的递增修改(地址指针自增操作),逐一访问数据块中的每一数据,相当高级语言指针变量的加1的操作。这种访问模式比逐一给出每个数据的存储器的直接地址的访问模式节约存储空间,并且执行速度快。2.3 数据地址指针(Data Pointer)2.4 单片机存储器组织物理上有4个存储空间片内ROM片外ROM片内RAM片外RAM逻辑上(用户使用的角度)有3个存储空间片内外连续统一的ROM片内RAM片外RAM存储器哈佛配置ROM、RAM片内集成、片外扩展2.4.1 程序存储器一、片内外连续统一ROM程序存储器存放二进制的程序和
10、常数,由PC(程序计数器、指令指针)寻址。统一:16位地址的ROM空间(0000H0FFFFH)片内ROM0000H0FFFH0000H0FFFH1000HFFFFH片外ROM4KB个单元最多64KB个单元EA引脚:External Access Enable外部访问允许EA = 0访问的是片外ROM 0000H0FFFHEA = 1访问的是片内ROM 0000H0FFFH2.4.1 程序存储器一、片内外连续统一ROM程序存储器存放二进制的程序和常数,由PC(程序计数器、指令指针)寻址。连续:16位地址的ROM空间(0000H0FFFFH)系统占用区0003 H 0023H : 为ROM的系统
11、占用区 不得被挪作它用0000 H:放第一条指令(转移指令) 第二条指令放到0030H单元以后 (跳过系统保留区)2.4.1 程序存储器二、程序存储器操作(一)在程序存储器内定义数据表1、字节定义伪指令DB(Define Byte)功能:从指定的地址单元开始,定义若干个字节存储单元的内容。 标号: DB 8位二进制数据表2、字定义伪指令DW(Define Word)功能:从指定的地址单元开始,定义若干个字(16位)存储单元的内容。 标号: DW 16位二进制数据表3、数据表首地址和项数数据表首地址是数据表存放在ROM的起始地址,常用ORG伪指令定义,以标号形式给出。项数是此数据在数据表中的位置
12、(以0起始计数) 2.4.1 程序存储器二、程序存储器操作( 二)查表指令MOVC A,A+DPTR ;远程查表指令MOVC A,A+PC ;近程查表指令功能:访问程序存储器(读操作),撷取表中常数(Move Code byte) 说明:由于数据存储在程序存储器ROM中,它用指令MOVC表明是对程序存储器的访问,数据的传送是单向的。两条指令都是以基址寄存器DPTR或者PC的16位地址量为基准,加上变址寄存器A的内容为偏移量,形成的16位地址,就是存储在程序存储器中操作数(表格常数)的地址,从此地址取出操作数存入累加器A,这种寻址方式称为变址寻址。使用中注意累加器A中的偏移量是8位无符号数(02
13、55)。 基址寄存器PC的表格只能放在该条查表指令后面的 256 个单元之中,表格的大小受到限制,而且表格只能被一段程序所利用。 基址寄存器DPTR的表格位置可以在 64 KB程序存储器中任意安排的 256 个单元之中,并且一个表格可以为多个程序块所共用。 2.4.2 数据存储器一、片内数据存储器 是8位地址的存储空间。保存数据、运算结果,做数据缓冲区等,用途广泛;使用频繁。按照侧重的功能有4个功能分区:寄存器区、位寻址区、用户RAM区和SFR区。 51子系列52子系列片内RAM:低128B 00H7FHSFR区: 80H0FFH片内RAM:全部256B 00H0FFHSFR区: 80H0FF
14、H片内RAMSFR区地址地址工作寄存器区位寻址区用户RAM区00H1FH20H2FH30H7FH80HFFH注意:SFR区通常在片内RAM介绍,不计入片内RAM容量。80HFFH52子系列256B51子系列128BSFR区2.4.2 数据存储器一、片内数据存储器1、工作寄存器区(00H1FH) 有4组8个工作寄存器,占32个单元。当前工作寄存器组的选择由PSW的RS1和RS0的位状态组合决定(缺省状态是0组,即RS1RS0=00)。此区域通常使用寄存器寻址方式:例如MOV A,R0,此外还有其他两种寻址方式进行相同的操作。 直接寻址 MOV A ,00H 将片内RAM的00H单元数据传送到累加
15、器A中。操作数00H的寻址方式称为直接寻址。直接寻址方式中的直接地址以RAM单元地址的形式给出,其范围00H0FFH,通常直接地址记为direct。 寄存器间接寻址 MOV R0 , #00H ;间址寄存器赋初值 MOV A , R0 是将工作寄存器R0中的内容作为地址,而将该地址中的数据传送到累加器A中。执行完这条指令,累加器A中的值与工作寄存器R0中的值不同,而与以R0内容为地址的片内RAM中的值相同,操作数R0称为寄存器间接寻址;R0称作间址寄存器,也可以使用R1作为间址寄存器。通常记作Ri。 2.4.2 数据存储器一、片内数据存储器2、位寻址区(20H2FH)占16个字节单元(字节地址
16、20H2FH),共16B8b128b。位地址(存储单元按位编址): 00H7FH双重功能区,既可以字节操作(直接寻址、寄存器间接寻址)也可以位操作(位寻址)位寻址 MOV C ,20H 位累加器C是寄存器寻址,借用PSW中的进位位CY,位累加器在位操作中使用频繁。此指令将片内RAM的位地址为20H单元数据传送到位累加器C中。操作数20H的寻址方式称为位寻址。位寻址方式是在指令中直接给出位存储单元的地址即位地址。寻址方式类似于字节操作的直接寻址,注意的是直接寻址中的地址是字节地址,而位寻址中的地址是位存储单元的位地址,一个是字节操作一个是位操作。在解释指令系统时,位地址以bit表示。2.4.2
17、数据存储器一、片内数据存储器3、用户RAM区( 51子系列30H7FH,52子系列30H0FFH )用户真正使用的数据区,堆栈开辟于此区域。可用直接寻址、寄存器间接寻址进行操作 例2-8 片内数据存储器操作。将40H单元起始的十个单元清零。MOV 40H,#00HMOV 41H,#00HMOV 42H,#00HMOV 43H,#00HMOV 44H,#00HMOV 45H,#00HMOV 46H,#00HMOV 47H,#00HMOV 48H,#00HMOV 49H,#00H或 MOV A,#00H MOV R0,#40H ;建立地址指针 MOV R2,#0AH ;设计数循环初值LOOP: M
18、OV R0,A INC R0 ;调整指针 DJNZ R2,LOOP ;循环计数器减1非零继 ;续循环,为0退出循环2.4.2 数据存储器一、片内数据存储器4、特殊功能寄存器区( 80H0FFH)有21个SFR,实现单片机的操作管理;留有大量空间可以扩充功能。双重功能,其中SFR字节地址以0H和8H结尾的可以位操作;共有11个SFR可以位操作。 访问特殊功能寄存器只能采用直接寻址方式,即在指令中给出特殊功能寄存器的直接地址direct。直接地址除以单元地址形式给出外,还可以以特殊功能寄存器名称的形式出现。注意ACC是累加器A的特殊功能寄存器的名称,二者都指累加器,但是寻址方式不一样,ACC是直接
19、寻址,A是寄存器寻址。使用名称书写指令简单,便于记忆。 MOV R0,A;A是寄存器寻址 MOV R0,ACC;ACC是直接寻址下列指令是等价的: MOV R0,ACC MOV R0,0E0H ;ACC是直接寻址,实际上就是单元地址E0H2.4.2 数据存储器二、片外数据存储器8051可以通过并行总线扩展片外数据存储器,最大可扩展至64KB。片外64KB数据存储器和IO口统一编址,地址范围0000H0FFFFH。规定片外数据存储器只能由寄存器间接寻址的方法访问,所用的间址寄存器可为DPTR、RiMOVX A,DPTR ;读片外RAM指令MOVX DPTR,A ;写片外RAM指令片外RAM的操作
20、说明: 访问片外存储器指令助记符“MOVX”,X表示eXternal,即片外的意思。访问片外RAM DPTR所指向的存储单元,访问是双向的(可以读、写),但是只限于指定存储单元和累加器A进行数据的传送。在访问存储单元前应该先对DPTR赋值,即赋予片外RAM要访问的存储单元的16位地址量。用DPTR做指针寻址时,由于DPTR为16位寄存器,因此最大寻址范围64KB。2.5 堆栈及堆栈指针2.5.1 概念 堆栈(stack)是一端固定,另一端活动的数据存储区,常用作暂存程序的上下文。 具有先进后出的特性。51单片机的堆栈指针SP(Stack Pointer):8位寄存器,指示栈顶单元的地址。堆栈类型:向上生长型2.5.2 堆栈操作初始化:系统缺省SP07H,需要重新定义使其开辟在用户RAM区。MOV SP,#60H ;在用户RAM区开辟堆栈, ; 栈底60H单元片内RAM地址地址7FH80HFFHFFHSFR区0 0 0 0 0 1 1 1SP(81H)30H07H60H栈 底0 1 1 0 0 0 0 02.5.2 堆栈操作(1)进栈指令PUSH direct功能:将直接地址direct的内容压入堆栈。说明:堆栈指针SP先加1指示新的栈顶单元,然后将直接地址为direct的片内RAM存储单元的内容存入新的栈
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论