什么是堆栈,51单片机堆栈指针SP的使用举例

合集下载

堆栈的定义及应用

堆栈的定义及应用

堆栈的定义及应用堆栈(Stack)是一种数据结构,它按照后进先出(LIFO)的原则存储数据。

也就是说,最后存入堆栈的数据元素最先被取出,而最先存入的数据元素最后被取出。

堆栈中包含两个主要操作:压栈(Push)和弹栈(Pop)。

压栈是指将数据元素存入堆栈,弹栈是指从堆栈中取出数据元素。

除此之外,还有一个查看栈顶元素的操作。

堆栈的实际应用非常广泛,以下列举几个常见的应用场景:1. 函数调用与递归:在程序中,每当一个函数被调用,系统将会为这个函数分配一段内存空间,这段内存空间就被称为函数的栈帧。

当函数执行完毕后,栈帧会被销毁。

函数调用过程中,每次调用都会将返回地址和相关参数等信息压入栈中,在函数执行完毕后再将这些信息弹出。

递归函数的实现也离不开堆栈,每次递归调用都会生成一个新的栈帧,直到递归结束后才开始回溯弹栈。

2. 表达式求值:在编程语言中,堆栈可以用于实现算术表达式求值。

例如,中缀表达式需要通过堆栈进行转换成后缀表达式来简化计算过程,然后再通过堆栈进行后缀表达式的计算。

在进行表达式求值时,通过堆栈可以保存运算符和操作数的顺序,确保运算的优先级正确。

3. 括号匹配:在编程或者数学等领域,括号匹配是一个常见的问题。

我们可以使用堆栈来判断一个表达式中的括号是否匹配。

遍历表达式,每当遇到左括号时,将其压入堆栈。

当遇到右括号时,从堆栈中弹出一个左括号,若左右括号匹配,则继续遍历。

若右括号没有对应的左括号或者堆栈为空,则括号不匹配。

4. 浏览器的历史记录:在浏览器中,通过点击链接或者前进后退按钮,我们可以在不同的网页之间进行切换。

这种网页切换也可以使用堆栈来实现浏览历史记录的功能。

每当访问一个新网页时,将其URL压入堆栈顶部;当点击前进按钮时,从堆栈中弹出一个URL;当点击后退按钮时,将当前页面的URL压入堆栈,然后再弹出上一个URL。

5. 撤销与恢复:在许多软件中,都提供了撤销与恢复功能。

当用户对文档进行操作时,软件会将操作信息(如添加、删除、修改等)压入堆栈中,当用户点击撤销时,软件会从堆栈中弹出最近的操作信息并进行撤销操作;当用户点击恢复时,软件会从堆栈中弹出已经撤销的操作信息并进行恢复。

51单片机堆栈操作指令的用法

51单片机堆栈操作指令的用法

51单片机堆栈操作指令的用法51单片机是一种非常常用的单片机芯片,其指令集非常丰富,其中包含了很多堆栈操作指令。

堆栈操作指令是用来进行数据的入栈和出栈操作的指令,通过堆栈操作指令,我们可以方便地保存和恢复程序执行中的临时数据,提高代码的灵活性和效率。

本文将详细介绍51单片机堆栈操作指令的用法,帮助读者更好地理解和运用这些指令。

一、堆栈简介堆栈(Stack)是一种特殊的数据结构,具有后进先出(LIFO)的特点。

在51单片机的内部RAM中,有一段专门用来存放堆栈的空间,这段空间的大小为128字节(地址为0x07Fh至0x080h)。

在程序执行过程中,我们可以通过堆栈操作指令将数据入栈或者出栈,进栈是将数据放入堆栈,出栈是将数据从堆栈中取出。

二、堆栈操作指令51单片机的指令集中包含了以下几条堆栈操作指令:1. PUSH 指令PUSH指令用于将8位数据入栈,将要入栈的数据放入寄存器A中,通过PUSH 指令可以将A的数据压入堆栈。

PUSH指令的实际操作是将A的数据先放入栈顶指针(SP)所指向的内存单元中,然后将SP的值减1,即栈顶指针向下移动一个位置。

2. POP 指令POP指令用于将数据出栈,即从堆栈中取出一个8位数据,并放入寄存器A中。

POP指令的实际操作是将栈顶指针向上移动一个位置,然后将栈顶指针所指向的内存单元中的数据取出,并放入A中。

3. XCH指令XCH指令用于交换A寄存器的数据和栈顶指针所指向的内存单元的数据。

具体操作是将栈顶指针所指向的内存单元中的数据取出,并放入A中,然后将A中的数据放回栈顶指针所指向的内存单元中。

4. LCALL指令LCALL指令是一个特殊的调用指令,用于将下一条指令的地址入栈,并转移到指定地址处执行。

具体操作是将下一条指令的地址(即当前指令的地址加3)入栈,然后将指定地址的值赋给程序计数器(PC)。

5. RET指令RET指令用于从子程序返回,从堆栈中取出地址,并赋给程序计数器(PC),从而实现返回到调用该子程序的地方继续执行。

单片机原理及接口技术课后习题答案

单片机原理及接口技术课后习题答案

单⽚机原理及接⼝技术课后习题答案第⼆章1.89C51单⽚机内包含哪些主要逻辑功能部件?答:80C51系列单⽚机在⽚内集成了以下主要逻辑功能部件:(l)CPU(中央处理器):8位 (2)⽚内RAM:128B (3)特殊功能寄存器:21个 (4)程序存储器:4KB(5)并⾏I/O⼝:8位,4个 (6)串⾏接⼝:全双⼯,1个 (7)定时器/计数器:16位,2个(8)⽚内时钟电路:1个2.89C51的EA端有何⽤途?答:/EA端接⾼电平时,CPU只访问⽚内/doc/c312e1f309a1284ac850ad02de80d4d8d15a01a8.html 并执⾏内部程序,存储器。

/EA端接低电平时,CPU只访问外部ROM,并执⾏⽚外程序存储器中的指令。

/EA端保持⾼电平时,CPU执⾏内部存储器中的指令。

3. 89C51的存储器分哪⼏个空间?如何区别不同空间的寻址?答:ROM(⽚内ROM和⽚外ROM统⼀编址)(使⽤MOVC)(数据传送指令)(16bits地址)(64KB)⽚外RAM(MOVX)(16bits地址)(64KB)⽚内RAM(MOV)(8bits地址)(256B)4. 简述89C51⽚内RAM的空间分配。

答:⽚内RAM有256B ,低128B是真正的RAM区,⾼128B是SFR(特殊功能寄存器)区5. 简述布尔处理存储器的空间分配,⽚内RAM中包含哪些可位寻址单元。

答:⽚内RAM区从00H~FFH(256B),其中20H~2FH(字节地址)是位寻址区,对应的位地址是00H~7FH7. 89C51如何确定和改变当前⼯作寄存器组?答:PSW(程序状态字)(Program Status Word)中的RS1和RS0可以给出4种组合,⽤来从4组⼯作寄存器组中进⾏选择,PSW属于SFR(Special Function Register)(特殊功能寄存器)9. 读端⼝锁存器和“读引脚”有何不同?各使⽤哪种指令?答:读锁存器(ANL P0,A)就是相当于从存储器中拿数据,⽽读引脚是从外部拿数据(如MOV A,P1 这条指令就是读引脚的,意思就是把端⼝p1输⼊数据送给A)传送类MOV,判位转移JB、JNB、这些都属于读引脚,平时实验时经常⽤这些指令于外部通信,判断外部键盘等;字节交换XCH、XCHD算术及逻辑运算 ORL、CPL、ANL、ADD、ADDC、SUBB、INC、DEC控制转移CJNE、DJNZ都属于读锁存器。

习题和思考题答案

习题和思考题答案

习题和思考题答案习题和思考题答案第⼀章单⽚机概述1. 第⼀台电⼦数字计算机发明的年代和名称。

1946年、ENIAC。

2. 根据冯·诺依曼提出的经典结构,计算机由哪⼏部分组成?运算器、控制器、存储器、输⼊设备和输出设备组成。

3. 微型计算机机从20世纪70年代初问世以来,经历了哪四代的变化?经历了4位、8位、16位、32位四代的变化。

4. 微型计算机有哪些应⽤形式?系统机、单板机、单⽚机。

5. 什么叫单⽚机?其主要特点有哪些?单⽚机就是在⼀⽚半导体硅⽚上,集成了中央处理单元(CPU)、存储器(RAM、ROM)、并⾏I/O、串⾏I/O、定时器/计数器、中断系统、系统时钟电路及系统总线的⽤于测控领域的微型计算机,简称单⽚机。

单⽚机技术易于掌握和普及、功能齐全,应⽤⼴泛、发展迅速,前景⼴阔、嵌⼊容易,可靠性⾼。

6. 举例说明单⽚机的应⽤?略7. 当前单⽚机的主要产品有哪些?各⾃有何特点?MCS是Intel公司⽣产的单⽚机的系列符号,MCS-51系列单⽚机是Intel公司在MCS-48系列的基础上于20世纪80年代初发展起来的,是最早进⼊我国,并在我国应⽤最为⼴泛的单⽚机机型之⼀,也是单⽚机应⽤的主流品种。

其它型号的单⽚机:PIC单⽚机、TI公司单⽚机、A VR系列单⽚机。

8. 简述单⽚机应⽤系统的开发过程。

(1)根据应⽤系统的要求进⾏总体设计总体设计的⽬标是明确任务、需求分析和拟定设计⽅案,确定软硬件各⾃完成的任务等。

总体设计对应⽤系统是否能顺利完成起着重要的作⽤。

(2)硬件设计根据总体设计要求设计并制作硬件电路板(即⽬标系统),制作前可先⽤仿真软件(如Proteus软件)进⾏仿真,仿真通过后再⽤硬件实现并进⾏功能检测。

(3)软件设计软件编程并调试,⽬前⼀般⽤keil软件进⾏设计调试。

调试成功后将程序写⼊⽬标单⽚机芯⽚中。

(4)综合调试进⾏硬软件综合调试,检测应⽤系统是否达到设计的功能。

9. 说明单⽚机开发中仿真仪的作⽤。

MCS-51系列单片机的基本结构

MCS-51系列单片机的基本结构

并行接口
P0 P1 P2 P3
WR RD PSEN ALE
串行接口 TXD RXD
—6—
1.基本结构与硬件组成
051的主要硬件 资源包括以下几个部 分,内部功能模块构 成如图所示
(1) • 8位中央处理单元CPU (2) • 4K字节的程序存储器ROM (3) • 128字节的数据存储器RAM (4) • 21个特殊功能寄存器SFR (5) • 4个8位并行I/O口P0~P3
用户根据程序执行的需要通过传送指令确定。
—15—
D
寄存器组选择位RS0和RS1
用于设定当前工作寄存器的组号。8051有8个8位寄存器(R0~R7),分为4组。RS1、RS0与
R0~R7的对应关系如表所示。
RS1
RS0
R0~R7组号
R0~R7的物理地址
0
0
0
00~07H
0
1
1
08~0FH
1
0
2
10~17H
• 2个16位可编程定时/计数器T0、T1 (6)
• 5个中断源,具体包括2个外部中断源 (7) INT0和INT1,3个内部中断源
• 1个全双工的异步串行接口 (8)
• 内部时钟产生电路 (9)
—7—
2.中央处理器CPU
中央处理器CPU是单片机的核心组成部分,从功能上可 以分为控制器和运算器两个部分。控制器产生各种控制信号 以协调各部件之间的数据传送、运算等操作;运算器主要执 行算术运算、逻辑运算和位操作等。
① 算术逻辑单元ALU
ALU是一个运算器,主要对8位二 进制数进行算术与逻辑运算,包括加、 减、乘、除四则运算,与、或、非、 异或等逻辑操作。另外还具有置位、 移位、测试转移等功能。

51单片机自学笔记(基础部分)

51单片机自学笔记(基础部分)

一、51单片机的硬件结构1. 硬件结构框图说明:○1微处理器(CPU):51单片机含一个8位CPU,与通用的CPU功能基本相同,含运算器和控制器,不仅可以字节处理,还可以位处理。

例如:未处理、查表、状态检测、中断处理等。

○2数据存储器(RAM):51为128B,52为256B;片外最大可扩展到64K。

○3程序存储器(ROM/EPROM):8031没有,8051有4K的ROM,8751有4K的EPROM;片外可扩展至64K。

○4中断系统:5个中断源,2级优先权。

○5定时器/计数器:2个16位定时/计数器,四种工作方式。

○6串行口:1个全双工串行口,四种工作方式。

可进行串口通信,扩展并行I/O口,多机通信等。

○7P1、P2、P3、P0口:四个8位并行I/O口。

○8特殊功能寄存器(SFR):共21个,对片内部件进行管理、控制、监视;实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。

2. 引脚排列(1)电源及时钟引脚○1电源引脚:Vcc(40脚)解5V电源、Vss(20脚)接地。

○2时钟引脚:两个始终引脚XTAL1、XTAL2外接晶振,或接晶体与片内反相放大器构成振荡器。

XTAL1(19脚):内部反相放大器的输入端。

若接晶振则应接地;XTAL2(18脚):内部反相放大器的输出端。

若采用外部时钟振荡器,该引脚接收时钟振荡信号。

(2)控制引脚○1RST/Vpd(9脚):复位信号输入,高电平有效。

单片机运行时,此脚持续2个机器周期(24个时钟振荡周期)的高电平,就可复位。

平时应为0.5V低电平;Vpd为第二功能,备用电源输入端。

○2:ALE为地址锁存允许,正常工作时,ALE不断输出正脉冲信号。

当访问外部存储器时,ALE输出信号的负跳变沿用作低8位地址的锁存信号;PROG’为编程脉冲输入端。

○3PSEN’(Program Strobe Enable,29脚):程序存储器允许输出控制端。

低电平是外部程序存储器选通。

MCS-51单片机的存储结构

MCS-51单片机的存储结构

MCS-51单片机存储器结构MCS-51的存储器可分为四类:程序存储器一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。

那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。

程序相当于给微处理器处理问题的一系列命令。

其实程序和数据一样,都是由机器码组成的代码串。

只是程序代码则存放于程序存储器中。

MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。

对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。

强制CPU从外部程序存储器读取程序。

对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。

8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H 单元开始执行程序。

但在程序存储中有些特殊的单元,这在使用中应加以注意:其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。

另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:0003H—000AH 外部中断0中断地址区。

000BH—0012H 定时/计数器0中断地址区。

0013H—001AH 外部中断1中断地址区。

001BH—0022H 定时/计数器1中断地址区。

0023H—002AH 串行中断地址区。

可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。

第2章《单片机原理与C51基础》赵丽清(课后习题及答案)

第2章《单片机原理与C51基础》赵丽清(课后习题及答案)

思考题:【2-1】80C51单片机由哪几部分组成,试说明ROM和RAM的功能分别是什么?【2-2】在程序运行中,PC的值是。

()A)当前正在执行指令的前一条指令的地址B)当前正在执行指令的地址C)当前正在执行指令的下一条指令的首地址D)控制器中指令寄存器的地址【2-3】判断下列说法是否正确。

(1)PC可以存放一个16位二进制数,因此其寻址范围为0000H~7FFFH。

()(2)单片机系统复位时PC的内容为0000H,因此CPU从程序存储器0000H地址单元取指令,开始执行程序。

()(3)PC可以看成是程序计时器()(4)PC可以看成是程序存储器的地址指针。

()【2-4】试计算当振荡频率为12 MHz和6 MHz时,一个机器周期的长度?试辨析振荡周期、状态周期、机器周期、指令周期之间的关系。

【2-5】单片机的ROM必须具有掉电存储功能,这句话是否正确?【2-6】单片机对RAM的根本要求是快,但掉电可丢失数据,这个表述正确吗?【2-7】试说出80C51的两种时钟电路模式,如果是只有一个单片机工作常使用的是哪一种?如果是两个以上的单片机工作使用哪一种?【2-8】80C51单片机的EA信号有何功能?在使用8031时,EA信号引脚应如何处理?现在使用的80C51系列单片机内部一般均含有ROM,其EA引脚应该怎么接?【2-9】80C51系列单片机的三总线结构包括哪三种?其中作地址总线指的是?作数据总线指的是?属于控制总线的有?P0口的分时复用功能需要依靠锁存器的锁存功能,试举1种常用的低功耗锁存器并将其与单片机正确连接?【2-10】片内RAM低128单元一般划分为哪三个主要部分?对应的字节地址空间是?内部RAM中,可作为工作寄存器区的单元地址为()H~()H。

【2-11】80C51单片机任何一个时间4组通用工作寄存器中只能有一组工作,具体哪一组工作由什么来决定?如何设置才能选用0组通用寄存器?【2-12】80C51单片机具有很强的位(布尔)处理功能,内部RAM中共有多少单元可以位寻址,试写出其字节范围和位地址范围?【2-13】位地址00H与字节地址00H在内存中的位置有什么区别?片内字节地址为2AH单元最低位的位地址是();片内字节地址为88H单元的最低位的位地址为()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

什么是堆栈,51单片机堆栈指针SP的使用举例
SP:堆栈指针。

(专用于指出堆栈顶部数据的地址。

)堆栈介绍:日常这样的现象,家里洗的样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时候正好相反,先从最上面取,这种现象我们用一句话来概括:先进后出,后进先出。

请大家想想,还有什么地方有这种现象?其实比比皆是,建筑工地上堆放的砖头、材料,仓库里放的货物,都是先进后出,后进先出,这实际是一种存取物品的规则,我们称之为堆栈。

在单片机中,我们也能在RAM中构造这样一个区域,用来存放数据,这个区域存放数据的规则就是先进后出,后进先出,我们称之为堆栈。

为什么需要这样来存放数据呢?存储器本身不是能按地址来存放数据吗?对,知道了地址的确就能知道里面的内容,但如果我们需要存放的是一批数据,每一个数据都需要知道地址那不是麻烦吗?如果我们让数据一个接一个地放置,那么我们只要知道第一个数据所在地址单元就能了(看图2)如果第一个数据在27H,那么第二、三个就在28H、29H了。

所以利用堆栈这种办法来放数据能简化操作那么51中堆栈什么地方呢?单片机中能存放数据的区域有限,我们不能够专门分配一块地方做堆栈,所以就在内存(RAM)中开辟一块地方,用于堆栈,但是用内存的哪一块呢?还是不好定,因为51是一种通用的单片机,各人的实际需求各不相同,有人需要多一些堆栈,而有人则不需要那么多,所以怎么分配都不合适,怎样来解决这个问题?分不好干脆就不分了,把分的权利给用户(编程者),根据自已的需要去定吧,所以51单片机中堆栈的位置是能变化的。

而这种变化就体现在SP中值的变化,看图2,SP中的值等于27H 不就相当于是一个指针指向27H单元吗?当然在真正的51机中,开始指针所指的位置并非就是数据存放的位置,而是数据存放的前一个位置,比如一开始。

相关文档
最新文档