㈠ 单片机堆栈是怎么运算
51单片机堆栈是在片内RAM区实现的能先进后出的一个存储区域,由SP寄存器实现数据的入栈和出栈,当有数据入栈时,比如PUSH
ACC,此时SP先加一,然后把ACC中的内容存到SP所指向的内存单元中。出栈时,比如POP
ACC,此时先把SP所指向的内存单元(栈顶单元)内容送到ACC中,然后SP减一
㈡ 51单片机堆栈是什么意思可以对哪些单元堆栈
堆栈的功能就是先进后出,这样可以非常简单的解决子程序调用和中断(其实是特殊的子程序调用)问题,主要是嵌套的返回,用堆栈能准确的找到返回点。51单片机的堆栈是向上生长的,其实可以利用片内RAM中没用到的一切空间(当然得是连续的),复位后堆栈指针指向07H,一般从30H开始使用,就是复位后将堆栈指针指向30H,一定要弄清楚中断还有子程序调用时单片机是怎么压栈,返回时是怎么出栈的,利用堆栈可以让中断返回时返回到指定的地方,这招很绝。
㈢ 单片机堆栈问题
堆栈的压栈动作地址是递减的;出栈动作地址是增加的。sp是栈顶指针,经过压栈动作后的值要比70H小。具体的数值得看单片机的位数——32 bit/16 bit/8 bit
㈣ 单片机的堆栈是怎样工作的
单片机中的堆栈是1个连续的存储区,采取后入先出的方式存取数据。1般PUSH操作是向堆栈中存入数据,POP操作从堆栈取得数据。PUSH的操作顺序和POP的操作顺序正好相反,例如有A.B.C.D4个变量的值,依照PUSH
A,PUSH
B,PUSH
C和PUSH
D存入堆栈,则需要用POP
D,
POP
C,
POP
B,POP
A的顺序提取。如果ABCD的类型字长1致,则堆栈还可用来交换变量的值,例如PUSH
A,PUSH
B,然后用POP
A,
POP
B来实现A和B两个变量值的互换。但这样的操作不是所有单片机都支持。
㈤ 简述51单片机堆栈进栈和出栈操作规则
1.堆栈用于响应中断或调用子程序时保护断点地址,也可通过栈操作指令(push
和pop保护和恢复现场)其中入栈时先SP+1再将内容压入当前SP所指示的堆栈单元
中,出栈则先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中,再将
SP减1.
2.中断允许寄存器的功能是控制CPU对中断的开放和屏蔽以及每个中断源是否允许
中断结构包括EA(CPU中断总允许位),ES(串行口中断允许位)ET1(定时器1中
断允许位)EX1(外部中断1中断允许位)ET0(定时器0中断允许位)EX0(外部中
断0中断允许位)
3.T机=12/fosc=12/(6*E6)=2us
X=2*E13-T/T机=8192-200/2=8092=1F9CH=1111
1100
1110
0B
因为TL1的高3位未用,
修正后X=1111
1100
0001
1100B=FC1CH
4.LJMP为长转移指令,可转向64KB程序存储器的任一单元;SJMP为相对转移指令
,偏移范围-128~+127共259字节;AJMP为绝对转移指令,转移目的在指令后一个
存储单位所在2K区间内。
5.按键抖动:在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按
键一次按下或释放被错误认为是多次操作。
6.汽车的温控系统,测控系统,防盗报警等多项系统中应用单片机。汽车电子中
涉及A/D和D/A转换的模块基本都会有单片机的存在。以下以汽车倒车雷达为例,
雷达控制部分由89C51单片机构成,前端数据采集由超声波测距,系统由发射和接
收装置来获取数据,根据所测得的距离来判断是否调用声音报警程序,距离小于
预置点时,调用报警模块。
㈥ 单片机中那部分是堆栈结构
答:
堆栈是在单片机片内的数据存储器里开辟的一段存储空间,要明白哪部分是堆栈结构,就要搞清楚单片机的数据存储器。
51单片机片内有256字节的数据存储器空间。00H-20H是工作寄存器空间,20H-30H是位寻址区,30H-80H是数据存储区,这段空间可以设置堆栈,80H-FFH是特殊功能存储器空间。所以属于堆栈的空间为30H-80H。但在实际中这段空间还要存放数据,所以,要合理安排。
堆栈使用是要先设置初始地址,用SP
设置,PUSH指令用来把数据推入堆栈,POP从堆栈取出数据。采用“后进先出”原则,每压进一个数据,SP指针加一。
㈦ 单片机数据堆栈的特点是什么
单片机数据堆栈的特点是先入后出,后入先出。可以理解为一个饼干筒,先存入的数据在下层,后存入的数据在上层,要取数据,得从上层开始先取。
堆栈指针在寄存器SP中,默认情况下为SP=07H,可以通过MOV指令改变堆栈指针的地址。
㈧ 在单片机中什么是堆栈它的作用是什么
在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。在计算机领域,堆栈是一个不容忽视的概念,堆栈是一种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。
堆栈是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的。对这个存储区存入的数据,是一种特殊的数据结构。所有的数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照“先进后出”的原则存取,位于其中间的元素,必须在其栈上部(后进栈者)诸元素逐个移出后才能取出。在内存储器(随机存储器)中开辟一个区域作为堆栈,叫软件堆栈;用寄存器构成的堆栈,叫硬件堆栈。
(8)单片机堆栈扩展阅读:
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的变量是可以指向一个地址的,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
㈨ 单片机编程里面,堆栈怎么理解
堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一部份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且堆栈有特殊的数据传输指令,即‘PUSH’和‘POP’,有一个特殊的专为其服务的单元,即堆栈指针SP,每当执一次PUSH指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原来值的基础上)自动减1。由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP的值,就可以把堆栈设置在规定的内存单元中,如在程序开始时,用一条MOV SP,#5FH指令,就时把堆栈设置在从内存单元60H开始的单元中。一般程序的开头总有这么一条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元开始往后,而08H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数据的混乱。不同作者编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。当设置好堆栈区后,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情况下编程者不会把它当成普通内存用了。
参考资料来源:吴鉴鹰吧
贡献文档:网络文库《吴鉴鹰单片机项目实战精讲》
单片机开发板学习参考:吴鉴鹰单片机开发板(视频教程详细,资源丰富,适合学习)
㈩ 8051单片机堆栈设置在什么地方,如何实现
8051单片机在复位后,堆栈的底部就在07H,压栈时,将向08H方向增长。
如果需要改变默认值,可以在初始化阶段使用如下指令:
MOV
SP,
#6FH
即可将堆栈的底部设置在6FH。