单片机的堆栈
- 格式:doc
- 大小:677.00 KB
- 文档页数:7
《单片机原理及应用》试卷6及参考答案(本试题分笔试题和操作题两部分。
共100分,考试时间120分钟。
)第一部分笔试题(本部分共有4大题,总分60分,考试时间60分钟,闭卷)一、填空题(每空1分,共20分)1、8031单片机一般使用的时钟晶振频是()、()。
2、假定(SP)=40H,(39H)=30H,(40H)=60H。
执行下列指令:POP DPH ,POP DPL后,DPTR的内容为(),SP的内容是()。
3、单片机的堆栈栈顶由()来指示,复位时起位置在()单元。
4、当P1口做输入口输入数据时,必须先向该端口的锁存器写入(),否则输入数据可能出错。
5、单片机内部数据传送指令()用于单片机内部RAM单元及寄存器之间,单片机与外部数据传送指令()用于单片机内部与外部RAM或I/O接口之间,()指令用于单片机内部与外部ROM之间的查表6、单片机内外中断源按优先级别分为高级中断和低级中断,级别的高低是由()寄存器的置位状态决定的。
同一级别中断源的优先顺序是由()决定的。
7、LED数码显示按显示过程分为()显示和()显示2种。
前者,对每位显示来说是连续显示的,可通过单片机串行口实现;当多位显示时需较多外部驱动芯片,功耗较大。
后者,对每位显示来说是断续显示需占用单片机的()接口资源。
8、在调用子程序时,为保证程序调用和返回不致混乱,常采用保护现场的措施。
通常在进入子程序后要用()指令保护现场DPH、DPL、ACC等。
在退出子程序之前要用POP指令依次恢复现场,用()指令返回。
9、用仿真开发系统调试程序时,汇编成功只说明源程序的()没有问题,而程序()还要靠运行调试纠错才能成功。
10、单片机串行通信时,若要发送数据,就必须将要发送的数据送至()单元,若要接收数据也要到该单元取数。
二、判断题(每题1分,共10分)1、PC是()。
A、一根硬件信号B、一个可由用户直接读写的RAM单元C、一个不可寻址的特殊功能寄存器 D.一个能自动加1计数的ROM2、51单片机执行MOVC指令时,相关的信号状态是()。
51单片机基础知识复习题(含答案)1.8051单片机的片内有(一)个16位的特殊功能寄存器。
2.MCS-51单片机的堆栈区应建立在(片内数据存储区底128字节单元)。
3.MCS-51单片机定时器工作方式1是指的(D)工作方式。
A.8位 3B.8位自动重装2C.13位0D.16位14.当需要从MCS-51单片机程序存储器取数据时,采用的指令为(B)。
A.MOV A, @R1)片内B.MOVC A, @A + DPTR或MOVC A,@A+PC (C.MOVX A, @ R0D.MOVX A, @ DPTR)片外5.8751单片机程序存储器的容量最大可扩展为(64K)。
B.64K6.如果某MCS-51单片机系统的定时/计数器0的中断服务程序放在程序存储区的3000H地址开始的一段空间内,此时跳转到定时/计数器0的中断服务程序的指令LJMP 3000H应放在( 000BH)开始的中断地址区A、0003H(外部中断0服务入口)B、0013H(外部中断1服务入口)C、0023H(串行口中断服务程序入口)D、000BH(定时/计数器0中断服务程序的开始地址区)E、001BH为定时/计数器1中断服务开始地址区F、0000H (系统复位后的入口)7.MCS-51系列单片机外扩存储器芯片时,4个I/O口中用作数据总线的是:(B)B、P0口(SDA /SCL 连接到总线的器件输出级必须是漏极开路或者是集电极开路,才能执行线与的功能)8.AJMP跳转空间最大可达到(2字节)A、2KB9.8051单片机中,唯一一个能出现在符号指令的16位寄存器是(B)A、P S WB、D P T R C 、P C D、B10.当需要从MCS-51单片机程序存储器取数据时,采用的指令为(B )A、MOV A,@R1片内B、MOVC A,@A+DPTR/@A+PCC、MOVX A, @R0片外D、MOVX A,@ DPTR11.8051单片机内有2个(16 )位的定时器。
第二章习题参考答案一、填空题:1、当MCS-51引脚ALE有效时,表示从P0口稳定地送出了低8位地址。
2、MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。
3、当使用8751且EA=1,程序存储器地址小于1000H 时,访问的是片内ROM。
4、MCS-51系统中,当PSEN信号有效时,表示CPU要从外部程序存储器读取信息。
5、MCS-51有4组工作寄存器,它们的地址范围是 00H~1FH 。
6、MCS-51片内20H~2FH范围内的数据存储器,既可以字节寻址又可以位寻址。
7、PSW中RS1 RS0=10时,R2的地址为 12H 。
8、PSW中RS1 RS0=11时,R2的地址为 1AH 。
9、单片机系统复位后,(PSW)=00H,因此片内RAM寄存区的当前寄存器是第 0 组,8个寄存器的单元地址为 00H ~ 07H 。
10、PC复位后为 0000H 。
11、一个机器周期= 12 个振荡周期= 6 个时钟周期。
12、PC的内容为将要执行的的指令地址。
13、在MCS-51单片机中,如果采用6MHz晶振,1个机器周期为 2us 。
14、内部RAM中,位地址为30H的位,该位所在字节的字节地址为 26H 。
15、若A中的内容为63H,那么,P标志位的值为 0 。
16、8051单片机复位后,R4所对应的存储单元的地址为 04H ,因上电时PSW=00H 。
这时当前的工作寄存器区是第 0 工作寄存器区。
17、使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。
18、片内RAM低128个单元划分为哪3个主要部分:工作寄存器区、位寻址区和用户RAM区。
19、通过堆栈操作实现子程序调用,首先就要把 PC 的内容入栈,以进行断点保护。
调用返回时,再进行出栈保护,把保护的断点送回到 PC 。
20、MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS -51的PC是16位的,因此其寻址的范围为 64 KB。
简答题1.什么是指令系统?指令系统:计算机所能执行的全部指令的集合,它描述了计算机内全部的控制信息和“逻辑判断”能力。
不同计算机的指令系统包含的指令种类和数目也不同。
一般均包含算术运算型、逻辑运算型、数据传送型、判定和控制型、输入和输出型等指令。
2.什么是指令指令是指示计算机执行某种操作的命令,它由一串二进制数码组成。
3.什么是汇编语言?答:汇编:汇编语言源程序在交付计算机执行之前,需要先翻译成目标程序,这个翻译过程叫汇编。
4.什么是寻址方式答:寻址方式:寻址方式就是寻找指令中操作数或操作数所在地址的方式。
也就是如何找到存放操作数的地址,把操作数提取出来的方法。
5.什么是堆栈答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以"后进先出"的结构方式处理的。
实质上,堆栈就是一个按照"后进先出"原则组织的一段内存区域。
6.什么是指令周期指令周期:指执行一条指令所占用的全部时间。
通常一个指令周期含1~4个机器周期。
7.串行数据传送的主要优点和用途是什么?答:串行数据传送的主要优点是硬件接口简单,接口端口少(2个)。
主要用于多个单片机系统之间的数据通信。
8.MC S一51指令集中有无“程序结束”指令?怎样实现“程序结束”功能?答:没有这样的指令。
但实现“程序结束”至少可以借助4种办法:①用原地踏步指令SJMP $ 死循环。
②在最后一条指令后面设断点,用断点执行方式运行程序。
③用单步方式执行程序。
④在末条指令之后附加一条LJMP监控显示器程序首地址或LJMP 0000H,返回监控状态。
9.中断服务子程序与普通子程序有哪些异同之处?2.中断服子程序与普通子程序的执行和返回有什么异同之处?答:中断服务子程序与普通子程序都是一种能完成某一特定任务的程序段。
其资源要为所有调用程序共享。
因此,子程序在结构上应具有独立性和通用性。
子程序的第一条指令的地址称为子程序的入口地址。
第一章习题参考答案1-1:何谓单片机?与通用微机相比,两者在结构上有何异同?答:将构成计算机的基本单元电路如微处理器(CPU)、存储器、I/O接口电路和相应实时控制器件等电路集成在一块芯片上,称其为单片微型计算机,简称单片机。
单片机与通用微机相比在结构上的异同:(1)两者都有CPU,但通用微机的CPU主要面向数据处理,其发展主要围绕数据处理功能、计算速度和精度的进一步提高。
例如,现今微机的CPU都支持浮点运算,采用流水线作业,并行处理、多级高速缓冲(Cache)技术等。
CPU的主频达到数百兆赫兹(MHz),字长普遍达到32位。
单片机主要面向控制,控制中的数据类型及数据处理相对简单,所以单片机的数据处理功能比通用微机相对要弱一些,计算速度和精度也相对要低一些。
例如,现在的单片机产品的CPU大多不支持浮点运算,CPU还采用串行工作方式,其振荡频率大多在百兆赫兹范围内;在一些简单应用系统中采用4位字长的CPU,在中、小规模应用场合广泛采用8位字长单片机,在一些复杂的中、大规模的应用系统中才采用16位字长单片机,32位单片机产品目前应用得还不多。
(2) 两者都有存储器,但通用微机中存储器组织结构主要针对增大存储容量和CPU对数据的存取速度。
现今微机的内存容量达到了数百兆字节(MB),存储体系采用多体、并读技术和段、页等多种管理模式。
单片机中存储器的组织结构比较简单,存储器芯片直接挂接在单片机的总线上,CPU对存储器的读写按直接物理地址来寻址存储器单元,存储器的寻址空间一般都为64 KB。
(3) 两者都有I/O接口,但通用微机中I/O接口主要考虑标准外设(如CRT、标准键盘、鼠标、打印机、硬盘、光盘等)。
用户通过标准总线连接外设,能达到即插即用。
单片机应用系统的外设都是非标准的,且千差万别,种类很多。
单片机的I/O接口实际上是向用户提供的与外设连接的物理界面。
用户对外设的连接要设计具体的接口电路,需有熟练的接口电路设计技术。
一、填空题:1、当MCS-51引脚ALE有效时,表示从P0口稳定地送出了低8位地址。
2、MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。
3、当使用8751且EA=1,程序存储器地址小于 1000H 时,访问的是片内ROM。
4、MCS-51系统中,当PSEN信号有效时,表示CPU要从外部程序存储器读取信息。
5、MCS-51有4组工作寄存器,它们的地址范围是 00H~1FH 。
6、MCS-51片内20H~2FH范围内的数据存储器,既可以字节寻址又可以位寻址。
7、PSW中RS1 RS0=10时,R2的地址为 12H 。
8、PSW中RS1 RS0=11时,R2的地址为 1AH 。
9、单片机系统复位后,(PSW)=00H,因此片内RAM寄存区的当前寄存器是第 0 组,8个寄存器的单元地址为 00H ~ 07H 。
10、PC复位后为 0000H 。
11、一个机器周期= 12 个振荡周期= 6 个时钟周期。
12、PC的内容为将要执行的的指令地址。
13、在MCS-51单片机中,如果采用6MHz晶振,1个机器周期为 2us 。
14、内部RAM中,位地址为30H的位,该位所在字节的字节地址为 26H 。
15、若A中的内容为63H,那么,P标志位的值为 0 。
16、8051单片机复位后,R4所对应的存储单元的地址为 04H ,因上电时PSW=00H 。
这时当前的工作寄存器区是第 0 工作寄存器区。
17、使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。
18、片内RAM低128个单元划分为哪3个主要部分:工作寄存器区、位寻址区和用户RAM区。
19、通过堆栈操作实现子程序调用,首先就要把 PC 的内容入栈,以进行断点保护。
调用返回时,再进行出栈保护,把保护的断点送回到 PC 。
20、MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为 64 KB。
《单片机应用技术》填空题题库x《单片机应用技术》习题库答案一、填空题第一、二章1.计算机中最常用的字符信息编码是(ASCII码)。
2.MCS-51系列单片机为( 8 )位单片机。
3.计算机三总线分别为:(数据)总线;(地址)总线;(控制)总线。
4.单片机与普通计算机的不同之处在于其将CPU 、存储器和I/O 三部分集成于一块芯片上。
5.能在紫外线照射下擦除和重写的存储器是(EPROM )型存储器,能够直接在线路中快速写入和读出的存储器是(EEPROM)型存储器。
6.8031、8051的主要区别是8051有 4 k内部ROM。
7.MCS-51单片机片内共有128 字节单元的RAM。
8.8031内部有RAM( 128 )字节、8751内部有ROM( 4K )。
9.MCS-51系列单片机8031、8051、89S52在内部存储器的设置上主要区别是:8031内部(无)程序存储器,8051内部( 4K )程序存储器,89C52内部( 8K )程序存储器。
10.8031构成的单片机应用系统必须扩展程序存储器。
11.M CS-51单片机片内RAM区中有128 个可寻址位。
12.8051单片机片内RAM区80H-0FFH属于特殊功能寄存器(SFR)区。
13.M CS-51单片机存储器结构的主要特点是程序存储器与数据存储器的寻址空间是分开的。
14.M CS-51单片机的存储器配置在物理结构上有4 个存储空间。
15.M CS-51单片机的存储器在逻辑上分为 3 个存储器地址空间16.当MCS-51单片机的EA引脚保持低电平时,CPU只访问片外的程序存贮器17.当EA接地时,MCS-51单片机将从外部程序存储器的地址0000H开始执行程序。
18.在只使用外部程序存储器时,51系列单片机的EA 管脚必须接地。
第1页共9页19.在只使用内部程序存储器时,51系列单片机的EA 管脚必须接高电平。
20.当使用8031单片机时,需要扩展外部程序存储器,此时/EA 应接低电平。
单片机原理复习题一、判断题()1.(–86)原=11010110,(–86)反=10101001,(–86)补=10101010。
()2.十进制数89化成二进制数为10001001。
()3.0的补码是0。
()4.-128的补码是10000000。
()5.11111111是-1的补码。
()6.-2的补码可以记为FEH。
()7.MCS-51单片机是16位单片机。
()8.8051的累加器ACC是一个8位的寄存器,简称为A,用来存一个操作数或中间结果。
()9.8051的程序状态字寄存器PSW是一个8位的专用寄存器,用于存程序运行中的各种状态信息。
()10.MCS-51的数据存贮器在物理上和逻辑上都分为两个地址空间:一个是片内的128字节的RAM 和SFR,另一个是片外最大可扩充到64K字节的RAM。
()11.单片机的复位有上电自动复位和按钮手动复位两种,当单片机运行出错或进入死循环时,可按复位键重新启动。
()12. 访问128个位地址用位寻址方式,访问低128字节单元用直接或间接寻址方式。
()13. 堆栈指针SP的内容可指向片内00H~7FH的任何RAM单元,系统复位后,SP初始化为00H。
()14. 8051复位后,其PC指针初始化为0000H,使单片机从该地址单元开始执行程序。
()15.8051指令:MOVX A,@DPTR ;表示将DPTR指示的地址单元中的内容传送至A中。
()16.MCS-51指令中,MOVX为片外RAM传送指令。
()17.MCS-51指令中,MOVC为ROM查表指令。
()18.将37H单元的内容传送至A的指令是:MOV A,#37H。
()19.MCS-51指令中,16位立即数传送指令是:MOV DPTR,#data16。
()20.指令MUL AB执行前(A)=F0H,(B)=05H,执行后(A)=F5H,(B)=00H。
()21.已知:DPTR=11FFH 执行INC DPTR后,结果:DPTR=1200H。
1.2 单片机内部主要部件单片机内部电路比较复杂,MCS-51系列的8051型号单片机的内部电路根据功能可以分为CPU、RAM、ROM/EPROM、并行口、串行口、定时/计数器、中断系统及特殊功能寄存器(SFR)等8个主要部件,如图1-2-1所示。
这些部件通过片内的单一总线相连,采用CPU加外围芯片的结构模式,各个功能单元都采用特殊功能寄存器集中控制的方式。
其他公司的51系列单片机与8051结构类似,只是根据用户需要增加了特殊的部件,如A/D转换器等。
在设计程序过程中,寄存器的使用非常频繁。
本节内容在了解单片机内部的组成机构基础上,重点介绍单片机内部常用的寄存器的作用。
图1-2-1 MCS-51架构1.2.1中央处理器(CPU)中央处理器是单片机的核心,主要功能是产生各种控制信号,根据程序中每一条指令的具体功能,控制寄存器和输入/输出端口的数据传送,进行数据的算术运算、逻辑运算以及位操作等处理。
MCS-51系列单片机的CPU字长是8位,能处理8位二进制数或代码,也可处理一位二进制数据。
单片机的CPU从功能上一般可以分为运算器和控制器两部分。
一、控制器控制器由程序计数器PC、指令寄存器、指令译码器、定时控制与条件转移逻辑电路等组成。
其功能是对来自存储器中的指令进行译码,通过定时电路,在规定的时刻发出各种操作所需的全部内部和外部的控制信号,使各部分协调工作,完成指令所规定的功能。
各部分功能部件简述如下。
1.程序计数器PC(Program Counter)程序计数器是一个16位的专用寄存器,用来存放下一条指令的地址,具有自动加1的功能。
当CPU要取指令时,PC的内容送地址总线上,从存储器中去取出一个指令码后,PC 内容自动加1,指向下一个指令码,以保证程序按顺序执行。
PC是用来指示程序的执行位置,在顺序执行程序时,单片机每执行一条指令,PC就自动加1,以指示出下一条要取的指令的存储单元的16位地址。
也就是说,CPU总是把PC 的内容作为地址,根据该地址从存储器中取出指令码或包含在指令中的操作数。
22-3 51单片机的EA, AL,PSEN信号个自动功能是什么?EA:为片外程序存储器选用端,该引脚有效(低电平)时,只选用片外程序存储器,否则单片机上电或复位后选用片内程序存储器。
ALE:地址索存有效信号输出在访问片外程序存储器期间,ALE以每机器周期两次进行信号输出,其下降沿用于控制锁存P0输出的低8位地址;在不访问片外程序存储器期间,ALE端仍以上述频率(振荡频率f osc的1/6)出现,可作为对外输出的时钟脉冲或用于定时目的.端,PSEN:片外程序存储器读选通信号输出端,低电平有效。
2-4 51系列单片机有哪些信号需要芯片引脚的第二功能方式提供?●p1.0 :定时计数器2的计数脉冲输入端T2 P1.1 :定时计数器2的外部控制端T2EXP3.0 :PxD 串行口输入端P3.1 :TxD串行口输出端P3.2 :INT0 外部中断0请求输入端,低电平有效P3.3 :INT1 外部中断1请求输入端,低电平有效P3.4 :T0 定时/计数器0技术脉冲输入端P3.5 :T1 定时/计数器1技术脉冲输入端P3.6 :WR 外部数据存数器写选通信信号输出端,低电平有效P3.7 :RD 外部数据存数器读选通信信号输出端,低电平有效2-551系列单片机的程序状态字PSW中存放什么信息?其中的OV标志位在什么情况下被置位?置位是表示什么意思?●PSW是一个8位标志寄存器,它保存指令执行结果的特征信息,以供程序查询和判别。
●1)做加法时,最高位,次高位之一有进位则OV被置位2)做减法时,最高位,次高位之一借位则OV被置位3)执行乘法指令MUL AB,积大于255,OV=14)执行处罚指令DIV AB,如果B中所放除数为0 ,OV=1●0V=1,置位反映运算结果超出了累加器的数值范围2-9片内RAM低128单元划分为哪几个区域?应用中怎么样合理有效的使用?●工作寄存器区,位寻址区,数据缓冲区①工作寄存器区用于临时寄存8位信息,分成4组,每组有8个寄存器,每次只用1组,其他各组不工作②位寻址区(20H~2FH),这16个单元的每一位都赋予了一个位地址,位地址范围为00H~7FH,位寻址区的每一位都可能当作软件触发器,由程序直接进行位处理。
第一章习题参考答案1-1:何谓单片机?与通用微机相比,两者在结构上有何异同?答:将构成计算机的基本单元电路如微处理器(CPU)、存储器、I/O接口电路和相应实时控制器件等电路集成在一块芯片上,称其为单片微型计算机,简称单片机。
单片机与通用微机相比在结构上的异同:(1)两者都有CPU,但通用微机的CPU主要面向数据处理,其发展主要围绕数据处理功能、计算速度和精度的进一步提高。
例如,现今微机的CPU都支持浮点运算,采用流水线作业,并行处理、多级高速缓冲(Cache)技术等。
CPU的主频达到数百兆赫兹(MHz),字长普遍达到32位。
单片机主要面向控制,控制中的数据类型及数据处理相对简单,所以单片机的数据处理功能比通用微机相对要弱一些,计算速度和精度也相对要低一些。
例如,现在的单片机产品的CPU大多不支持浮点运算,CPU还采用串行工作方式,其振荡频率大多在百兆赫兹范围内;在一些简单应用系统中采用4位字长的CPU,在中、小规模应用场合广泛采用8位字长单片机,在一些复杂的中、大规模的应用系统中才采用16位字长单片机,32位单片机产品目前应用得还不多。
(2) 两者都有存储器,但通用微机中存储器组织结构主要针对增大存储容量和CPU对数据的存取速度。
现今微机的内存容量达到了数百兆字节(MB),存储体系采用多体、并读技术和段、页等多种管理模式。
单片机中存储器的组织结构比较简单,存储器芯片直接挂接在单片机的总线上,CPU对存储器的读写按直接物理地址来寻址存储器单元,存储器的寻址空间一般都为64 KB。
(3) 两者都有I/O接口,但通用微机中I/O接口主要考虑标准外设(如CRT、标准键盘、鼠标、打印机、硬盘、光盘等)。
用户通过标准总线连接外设,能达到即插即用。
单片机应用系统的外设都是非标准的,且千差万别,种类很多。
单片机的I/O接口实际上是向用户提供的与外设连接的物理界面。
用户对外设的连接要设计具体的接口电路,需有熟练的接口电路设计技术。
51单片机堆栈深入剖析用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。
Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。
应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。
本文介绍的是Cx51程序设计时堆栈的计算方法。
1.堆栈的溢出问题。
MCS51系列单片机将堆栈设置在片内RAM中,由于片内RAM资源有限,堆栈区的范围也是有限的。
堆栈区留得太大,会减少其他数据的存放空间,留得太少则很容易溢出。
所谓堆栈溢出,是指在堆栈区已经满了的时候还要进行新的压栈操作,这时只好将压栈的内容存放到非堆栈区的特殊功能寄存器(SFR)中或者堆栈外的数据区中。
特殊功能寄存器的内容影响系统的状态,数据区的内容又很容易被程序修改,这样一来,之后进行出栈操作(如子程序返回)时内容已变样,程序也就乱套了。
因此,堆栈区必须留够,宁可大一些。
要在Cx51程序设计中防止堆栈的溢出,要解决两个问题:第一,精确计算系统分配给用户的堆栈大小,假设是M;第二,精确计算用户需要堆栈的大小,假设是N。
要求M≥N,下面分别分析这两个问题。
2.计算系统分配给用户的堆栈大小Cx51程序设计中,因为动态局部变量是长驻内存中的,实际上相当于局部静态变量,即使在函数调用结束时也不释放空间(这一点不同于标准C语言)。
Cx51编译器按照用户的设置,将所有的变量存放在片内和片外的RAM中。
片内变量分配好空间后,将剩下的空间全部作为堆栈空间,这个空间是最大可能的堆栈空间。
当然,因为Cx51是一种可以访问寄存器的C语言(特殊功能寄存器),因此可在程序中访问SP,将堆栈空间设置得小一点。
不过,一般没有人这么做。
本文只是讨论放在片内RAM的变量。
我们把变量分为两种情况:①用作函数的参数和函数返回值的局部变量。
这种变量尽量在寄存器组中存放。
为了讨论方便,假设统一用寄存器组0,具体的地址为0x00~0x07。
编程模型Keil中的执行情况编程模型寄存器组8位数据寄存器组16位地址寄存器组程序计数器PC堆栈指针SP状态标记寄存器组指令集汇编指令集C51指令集编程模型16位地址寄存器组片内ROM 8位数据寄存器组片内RAM地址内容(指令)0x0FFF xx0x0FFE xx (xx)0x0101xx0x0100xx (xx)0x0002xx0x0001xx0x0000 xx 地址内容(数据)0x7F xx0xFE xx (xx)0x61xx0x60xx (xx)0x02xx0x01xx0x00 xx只考虑片内时SP、PCSP PCSP:堆栈指针,51单片机堆栈是向上生长型,即栈底是低位地址。
SP 指向栈顶。
存放有顺序要求的数据。
用途:(1)用来存放压入堆栈的数据。
(2)存放函数调用是断口地址。
(3)中断断口地址及保存数据。
51单片机复位后的SP默认地址:07H,为了避免和位寻址区重合,一般设置50H或者60H。
PC:程序计数器,51单片机内不可访问,独立结构的16位地址寄存器。
(1)自动+1,CPU从ROM中每读一个字节,自动执行PC+1→PC。
(2)执行转移指令,PC会根据指令要求修改下一次读ROM的地址(3)执行子程序调用或中断时,CPU自动将下一条执行的PC值压入堆栈,将子程序或中断入口地址装入PC,返回时,恢复原有压入堆栈的PC值,继续执行原程序。
举一个例子(汇编程序)ORG0000H;规定下一条指令的起始地址为0000HJMP START;跳转指令,程序跳转到START处执行ORG0400H;规定下一条指令DELY 的起始地址为0400HDELY: ;子函数DELYNOP;NOP指令,空操作,什么都不做,消耗该指令周期的时间RET;返回指令,弹出堆栈中断口地址,DELY调用返回指令ORG0100H;规定下一条指令START 的起始地址为0100HSTART: ;函数STARTMOV SP,#60H ;设置堆栈指针的值,即设置单片机栈底的地址为60HMOV DPTR,#1234H;将立即数1234H赋值给DPTR,其中低8位给DPTR的DPL(34H),;高8位给DPTR的DPH(12H)PUSH DPH;将DPH中数据12H压入堆栈PUSH DPL;将DPL中数据34H压入堆栈CALL DELY;调用子函数DELYPOP DPH;弹出堆栈中栈顶数据到DPH中POP DPL;弹出堆栈中栈顶数据到DPL中LJMP$;原地等待END;结束标志KEIL中的执行情况PC=0x0000 ;即0000HSP=0x07 ;即07H黄色箭头表示PC指针指向PC=0x0100 ;即0100H SP=0x07 ;即07HPC指针指向下一条指令PC=0x0103 ;即0103H SP=0x60 ;即60HPC指针指向下一条指令PC=0x0106 ;即0106H SP=0x60 ;即60HPC指针指向下一条指令PC=0x0108 ;即0108HSP=0x61 ;即61H,且地址为61H中的数据为12H PC指针指向下一条指令PC=0x010A ;即010AHSP=0x62 ;即62H,且地址为61H中的数据为12H,62H中的数据为34HPC指针指向下一条指令PC=0x0400 ;即0400HSP=0x64 ;即62H,且地址为61H中的数据为12H,62H中的数据为34H,63H中的数据为0CH,64H中的数据为01H。
单片机堆栈操作指令的用法介绍
堆栈操作指令有两条:
PUSH direct
POP direct
第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中。
推入指令的执行过程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中。
例:MOV SP,#5FH
MOV A,#100
MOV B,#20
PUSH ACC
PUSH B
则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后,内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20。
POP指令的在单片机中执行是这样的,首先将SP中的值作为地址,并将此地址中的数送到POP指令后面的那个direct中,然后SP减1。
接上例:
POP B
POP ACC
则执行过程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以执行完本条指令后B中的值是20,然后将SP减1,因此本条指令执行完后,SP的值变为60H,然后执行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以执行完本条指令后,ACC中的值是100。
这有什么意义呢?ACC中的值本来就是100,B中的值本来就是20,是的,在本例中,的。
什么是单片机堆栈?单片机堆栈原理
单片机堆栈是什么?
在片内RAM 中,常常要指定一个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM 区叫堆栈。
单片机堆栈有什么用?
1)子程序调用和中断服务时CPU 自动将当前PC
值压栈保存,返回时自动将PC 值弹栈。
2)保护现场/恢复现场
3)数据传输
单片机堆栈原理:
堆栈区由特殊功能寄存器堆栈指针SP 管理堆栈区可以安排在RAM 区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM 区,通常放在RAM
区的靠后的位置。
堆栈区由特殊功能寄存器堆栈指针SP 管理堆栈区可以安排在RAM 区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM 区,通常放在RAM
区的靠后的位置。
堆栈区由特殊功能寄存器堆栈指针SP 管理堆栈区可以安排在RAM 区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM 区,通常放在RAM
区的靠后的位置。
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
单片机5级堆栈介绍在嵌入式系统中,单片机(Microcontroller)的5级堆栈通常是指五个不同的堆栈级别,用于存储和管理程序执行时的数据。
这些堆栈级别在单片机的架构中起到重要的作用。
以下是这五个堆栈级别的简要介绍:1. 硬件堆栈(Hardware Stack):-硬件堆栈是由单片机硬件实现的,用于存储程序执行时的返回地址和一些特定的状态信息。
当函数调用时,返回地址被压入硬件堆栈。
硬件堆栈通常由硬件自动管理。
2. 中断堆栈(Interrupt Stack):-中断堆栈用于存储中断处理程序的状态信息。
当中断发生时,当前程序的状态被保存到中断堆栈,然后中断服务程序执行。
中断服务程序执行完毕后,从中断堆栈中恢复之前的状态,继续执行主程序。
3. 系统堆栈(System Stack):-系统堆栈用于存储系统级别的函数调用和返回地址。
在一些体系结构中,系统堆栈可能用于处理一些系统级别的任务,如操作系统调度等。
4. 用户堆栈(User Stack):-用户堆栈是用于存储用户程序的局部变量、函数参数等信息的地方。
当函数被调用时,相关的数据被压入用户堆栈。
这个堆栈由编写程序的开发者负责管理。
5. 应用堆栈(Application Stack):-应用堆栈是为特定应用程序或任务保留的堆栈空间。
它可以用于存储应用程序特定的数据、状态信息等。
这个堆栈通常由应用程序的开发者定义和管理。
这五个堆栈级别共同构成了单片机在执行程序时的堆栈体系,确保了程序的正确执行和上下文的正确保存和还原。
堆栈的使用使得单片机能够有效地管理程序执行中的数据和状态。
不同的单片机架构可能有不同的堆栈实现方式和级别。
单片机填空题一、系统结构1、80C51系列单片机字长是8_位,4个并行I/O口,2个16位的定时/计数器。
2、 80C51单片机的存储器在物理上设计成程序存储器和数据存储器两个独立的空间。
3、80C51单片机内有4k B程序存储器和128 B数据存储器。
4.PSW中的工作寄存器指针是RS1和RS0,它们把R0~R7分成4组。
对选定的某组工作寄存器R0~R7,只有R1、R0既能作为地址指针又能存放数据。
4B.对选定的工作寄存器R0~R7,只有R1和R0既能作为地址指针又能存放数据。
5、单片机的内部RAM区中,可以位寻址的字节地址范围是____20H~2FH___,特殊功能寄存器中,可位寻址的地址是___是能被 8整除的地址____。
6、MCS-51片内20H~2FH范围内的数据存储器,既可以字节寻址又可以位寻址。
7、MCS-51单片机片内RAM中20H~2FH为位寻址区单元,其中21H单元各位的地址号范围是08H-0FH。
8.MCS—5l单片机的堆栈区只可设置在片内数据存储区(器)9.MCS—51单片机的P0—P4口均是并行I/O口,其中的P0口和P2口除了可以进行数据的输入、输出外,通常还用来构建系统的数据总线和地址总线;在P0—P4口中,P0 为真正的双向口,P1—P3为准双向口。
10、作为普通输入输出口使用时,P0~P3口都是准双向I/O口,当作为输入使用前必须向每个引脚的锁存器写 1 。
单片机复位后P0~P3口的值均为 0FFH。
二、系统复位等1、单片机的复位操作是____高电平______(高电平/低电平),单片机复位后,中断允许寄存器IE的值是___00H_____。
2、通常、单片机上电复位时PC= 0000H,SP= 07H;而工作寄存器则缺省采用第00组。
3、80C51单片机系统上电及复位的程序入口地址为0000H。
4、单片机程序的入口地址是____0000H__________,外部中断1的入口地址是______0013H_________。
堆栈是一种数据结构。
一直以为堆栈是一个寄存器,惭愧!教科书定义:所谓堆栈,就是只允许在其一端进行数据插入和数据删除的线性表。
51单片机的单片机的堆栈是在内部RAM中开辟的。
这句话表明了堆栈的位置。
那么堆栈到底有什么作用?
堆栈主要是为子程序调用和中断操作而设立的,因此对应有两项功能:保护断点和保护现场。
单片机的程序归根结底是个死循环,反复在执行Main函数(主程序),你可以只写一个函数Main,那么你这个函数随着功能的增多而变得异常大,而且非常不具备可读,这个时候就需要子函数(子程序)了。
主函数在调用完子函数后会返回到主函数中,这样就可以调用其它函数并且继续这个死循环。
在计算机去执行子函数或者中断服务函数,如何确保程序能够正确地返回到主函数中并且继续正确执行后面的内容?因为在执行子函数或者中断服务函数时,很有可能会破坏寄存器单元的内容,但这些寄存器单元在子函数必须要用到?这个问题看起来比较难解决了。
这个时候就要用到断点保护和现场保护了。
保护断点:在调用子程序和堆栈时,将返回地址(执行完子程序或者中断后要执行的下一个指令的的地址(PC 寄存器值)) 送入堆栈,程序返回时,这个值自动弹回PC。
这种方式是自动使用堆栈的,程序中一般无需理会。
在这个过程中,地址送入堆栈时,堆栈指针SP+2,因为51的寻址范围是64KB,再查看RAM中堆栈单元就可以发现这个时候已经变成了PC的值,在返回的时候SP-2,但是堆栈中的内容在下一次堆栈操作之前不会发生变化。
来看下面的仿真图:
程序初始化将SP设置为0x07,这个时候RAM中全部被清零。
单步运行。
这个时候SP的值已经变为0x30,但是内容依旧没有改变。
运行到断点。
运行到断点PC的值没什么变化,在执行完Lcall之后,发现RAM中30单元起了变化,0013,PC也+2,而0013就是sjmp st1的地址。
以上是用Protues仿真的结果。
在用KEIL做软仿的时候发现SP会变化,但是对应的内容却没有变化,这个是不是KEIL的一个BUG呢?
保护断点是比较简单的,编程者一般不用理会。
现场保护就和编程扯上关系了。
现场保护:在转中断服务程序或者子程序之前,要把单片机中个有关单元的内容保存起来,这就是所谓的现场保护。
有保护当然就有恢复。
现场恢复:返回主程序之后恢复寄存器的内容到调用之前的状态。
这里就首先要牵涉一个using的用法了。
写过中断服务函数的人都知道,中断服务函数一般都是这种形式的
教单片机的老师当时说你搞不清using 的含义,写中断服务程序不用用它就万事大吉了。
这个说法不能说是没有道理的。
很长一段时间我写中断服务程序也是不管这个,直到有一次中断RAM溢出,才感到这个using用好了还是有点用处的。
“8051是一个基于累加器的单片机,具有8个通用寄存器,每个寄存器都是一个单字节的寄存器。
这8个寄存器通用寄存器可以认为是一组寄存器或者一个通用寄存器组。
8051提供四组可用的寄存器组。
当使用中断时,多组寄存器切换将带来许多方便。
典型8051 C程序不需要选择或者切换寄存器组,默认使用寄存器组0。
寄存器组1·2·3在中断服务程序中使用。
”引自北航版《单片机的C语言应用程序设计》
来看具体的程序。
使用using 1
从上面的代码可以看出,中断对目标代码的影响如下:
1.当调用中断时,SFR中的ACC,B,DPH,DPL,和PSW入栈;
2.如果不使用寄存器组切换,就是不用using,默认的寄存器组(寄存器组0)需要入栈;
3.退出函数前,所有寄存器内容出栈;
4.函数由8051的指令RETI终止。