单片机的堆栈
单片机知识介绍

单片机知识介绍单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机了解计算机原理与结构的最佳选择。
可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成(如图1所示)。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器,如图2所示)。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
在计算机出现以前,有不少能工巧匠做出了不少精巧的机械。
进入电器时代后,人们借助电气技术实现了自动控制机械,自动生产线甚至自动工厂,并且大大地发展了控制理论。
然而,在一些大中型系统中自动化结果均不理想。
只有在计算机出现后,人们才见到了希望的曙光。
如今借助计算机逐渐实现了人类的梦想。
但是,计算机出现后的相当长的时间里,计算机作为科学武器,在科学的神圣殿堂里默默地工作,而工业现场的测控领域并没有得到真正的应用。
只有在单片机(Microcontroller)出现后,计算机才真正地从科学的神圣殿堂走入寻常百姓家,成为广大工程技术人员现代化技术革新,技术革命的有利武器。
单片机期末考试试题

单片机期末考试试题一、选择题(每题 3 分,共 30 分)1、单片机能够直接识别和执行的语言是()A 高级语言B 汇编语言C C 语言D 机器语言2、单片机的复位引脚是()A VCCB GNDC RSTD ALE3、当单片机的 PSW 寄存器中的 RS1 和 RS0 分别为 0 和 1 时,工作寄存器组选择的是()A 0 组B 1 组C 2 组D 3 组4、单片机的中断源中,优先级最高的是()A 外部中断 0B 外部中断 1C 定时器/计数器 0 中断D 串行口中断5、要使单片机的定时器/计数器 0 工作在方式 1,需要设置 TMOD 寄存器的值为()A 0x01B 0x02C 0x05D 0x106、在单片机的串行通信中,方式 1 的波特率取决于()A 定时器 1 的溢出率B 系统时钟频率C 晶振频率D 电源频率7、单片机的 P0 口在作为输出口使用时,必须外接()A 上拉电阻B 下拉电阻C 电容D 电感8、以下指令中,属于位操作指令的是()A MOVB ADDC CLRD SUBB9、单片机在扩展外部存储器时,数据总线连接的是()A P0 口B P1 口C P2 口D P3 口10、要使单片机进入掉电模式,需要设置()A PCON 寄存器B SCON 寄存器C TCON 寄存器D IE 寄存器二、填空题(每题 3 分,共 30 分)1、单片机是将_____、_____、_____和_____等集成在一块芯片上的微型计算机。
2、51 单片机的内部数据存储器的地址范围是_____,可分为_____、_____和_____。
3、单片机的指令周期是指执行一条指令所需要的_____。
4、 51 单片机有_____个中断源,其中_____个外部中断源。
5、当单片机执行 MOV A,30H 指令时,将立即数 30H 送到_____中。
6、单片机的定时器/计数器有_____种工作方式。
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、当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。
51单片机基础知识复习练习题(含答案)

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.单片机复位后,SP、PC和I/O口的内容分别为07H\000H\FFH 。
2.单片机有四个工作寄存器区,由PSW状态字中的RS1和RS0两位的状态来决定。
单片机复位后,若执行SETB RS0指令,此时只能使用 1 区的工作寄存器,地址范围是08H---0FH 。
3.51单片机驱动能力最强的并行端口为P0端口。
4.51单片机PC的长度为16位,SP的长度为___8____位,DPTR的长度为_16__位。
5.访问51单片机程序存储器地址空间、片内数据存储器地址、片外数据存储器地址的指令分别为__movc_____,MOV和_movx______。
6.若A中的内容为63H,那么P标志位的值为1 。
7.当扩展外部存储器或I/O口时,P2口用作高八位地址总线。
8.51单片机内部RAM区有 4 个工作寄存器区。
9.51单片机内部RAM区有128 个位地址。
10.外部中断1()的中断入口地址为0013 ;定时器1的中断入口地址为001B 。
11.51单片机有 4 个并行I/O口,P0~P3是准双向口,所以由输出转输入时必须先写入 1 。
12.51单片机的堆栈建立在内部RAM 内开辟的区域。
二、选择题1.访问片外部数据存储器时,不起作用的信号是(C)。
A./RD B./WE C./PSEN D.ALE2.51单片机P0口用作输出时,应外接(A )。
A.上拉电阻B.二极管C.三极管D.下拉电阻3.进位标志CY在( C )中。
A.累加器B.算逻运算部件ALU C.程序状态字寄存器PSW D.DPTR4.堆栈数据的进出原则是(D )。
A.先进先出B.进入不出C.后进后出D.先进后出5.51单片机系统中,若晶振频率为6MHz,一个机器周期等于(D )μs。
A.1.5 B.3 C.1 D.26.在家用电器中使用单片机应属于微计算机的( B )。
A.辅助设计应用B.测量、控制应用C.数值计算应用D.数据处理应用7.PC的值是(C )。
单片机原理与应用试题(含答案)

单片机原理与应用试题(含答案)一、单选题(共64题,每题1分,共64分)1.MCS-51单片机有( )个中断优先级别。
A、1B、2C、3D、4正确答案:B2.MCS-51单片机有中断源( )。
A、5个B、2个C、3个D、6个正确答案:A3.当外部中断1发出中断请求后,中断响应的条件是( )。
A、EX1=1B、IE=0x84C、ET1=1D、IE=0x81正确答案:B4.MCS-51单片机的4个并行I/O端口作为通用I/O端口使用,在输出数据时,必须外接上拉电阻的是( )。
A、P0口B、P1口C、P2口D、P3口正确答案:A5.MCS-51单片机指令系统中,求反指令是( )。
A、CPL AB、RLC AC、CLR AD、RRC A正确答案:A6."对两个数组a和b进行初始化Char a[ ]=" ABCDEF" Char b[ ]={ ´A´,´B´,´C´,´D´,´E´,´F´};则以下说法正确的是( )。
"A、a与b 数组完全相同B、a与b 数组长度相同C、a与b 数组中都存放字符串D、a比b 数组长度长正确答案:D7.定时/计数器0中断入口地址为( )。
A、0003HB、000BHC、0013HD、001BH正确答案:B8.定时器/计数器T0的中断服务程序入口地址是( )。
A、0003HB、000BHC、0023HD、001BH正确答案:B9.MCS-51单片机响应中断的过程是( )。
A、断点PC自动压栈,对应中断矢量地址装入PCB、关中断,程序转到中断服务程序C、断点压栈,PC指向中断服务程序地址D、断点PC自动压栈,对应中断矢量地址装入PC,程序转到该矢量地址,再转至中断服务程序首地址正确答案:D10.在MCS-51单片机系统中,若晶振频率为12MHz,一个机器周期等于( )μs。
单片机基础_80C51

5. 串行I/O口 目前高档 8 位单片机均设置了全双工串行 I/O 口,用以 实现与某些终端设备进行串行通信,或者和一些特殊功能 的器件相连接的能力,甚至用多个单片机相连构成多机系 统。随着应用的拓宽,有些型号的单片机内部还包含有二 个串行I/O口。 6. 定时器/计数器
3. 控制线:共4根。
· RST(VPD:备用电源引入端,当电源发生故障,电源降到下限值时, 备用电源经此端向内部 RAM提供电压,以保护内部RAM中的数据不 丢失)——复位输入信号,高电平有效。在振荡器工作时,在RST上 作用两个机器周期以上的高电平,将器件复位。 ·/EA(Vpp:编程电压,具体电压值视芯片而定)——片外程序存储 器访问允许信号,低电平有效。/EA=1,选择片内程序存储器(80C51 为4KB,80C52为8KB) ;/EA=0,则程序存储器全部在片外而不管片 内是否有程序存储器。 使用80C31时,必须接地,使用8751编程时,施加 21V的编程电 压。 · ALE(PROG:编程脉冲)——地址锁存允许信号,输出。 在访问片外存储器或 I/O 时,用于锁存低八位地址,以实现低八 位地址与数据的隔离。即使不访问外部存储器,ALE端仍以固定的频 率输出脉冲信号(此频率是振荡器频率的1/6)。在访问外部数据存储器 时,出现一个ALE脉冲。
在单片机中,常把寄存器(如工作寄存器、特殊功能 寄存器、堆栈等)在逻辑上划分在片内 RAM 空间中,所 以可将单片机内部 RAM 看成是寄存器堆,有利于提高运 行速度。
当内部 RAM 容量不够时,还可通过串行总线或并行 总线外扩数据存储器。
4. 并行I/O口
单片机往往提供了许多功能强、使用灵活的并行输入 /输出引脚,用于检测与控制。有些I/O引脚还具有多种功 能,比如可以作为数据总线的数据线、地址总线的地址线、 控制总线的控制线等。单片机 I/O 引脚的驱动能力也逐渐 增大,甚至可以直接驱动外扩的LED显示器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
堆栈是一种数据结构。
一直以为堆栈是一个寄存器,惭愧!教科书定义:所谓堆栈,就是只允许在其一端进行数据插入和数据删除的线性表。
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的用法了。
写过中断服务函数的人都知道,中断服务函数一般都是这种形式的
void isr(void) interrupt x (using x) //using x是可选的
{
}
教单片机的老师当时说你搞不清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终止。