⑴ 51单片机堆栈是什么意思可以对哪些单元堆栈
堆栈的功能就是先进后出,这样可以非常简单的解决子程序调用和中断(其实是特殊的子程序调用)问题,主要是嵌套的返回,用堆栈能准确的找到返回点。51单片机的堆栈是向上生长的,其实可以利用片内RAM中没用到的一切空间(当然得是连续的),复位后堆栈指针指向07H,一般从30H开始使用,就是复位后将堆栈指针指向30H,一定要弄清楚中断还有子程序调用时单片机是怎么压栈,返回时是怎么出栈的,利用堆栈可以让中断返回时返回到指定的地方,这招很绝。
⑵ 单片机80196KC CPU响应中断时将要当前PC值压入堆栈为什么
压入堆栈后,等中断执行完,再从堆栈出栈,就能继续执行程序了,不然执行完中断函数后,单片机怎么知道执行没执行完的程序在哪
⑶ 51单片机中断处理程序中关中断的问题
中断保护现场,是为了你中断子程序执行完以后能够返回到你程序中中断点,即产生中断的地方,使程序能够继续向下执行!!!!
如过你说的不用保护现场的话,那么程序执行完以后就不能够回到现场,那么你的程序将不知道要跳转到那里去了,也就是飞鸟,呵呵……
你说的中断嵌套,也是一样的,两者都要保护现场,不然你也不能够回到现场,程序也会飞的!!!!
而我们保护现场的数据都是放在堆栈中的,因此,你的中断次数也不能够超过堆栈的级数,那样数据也会丢失!!!!
说白了,中断它不同于子程序,子程序是固定好了的,返回的位置也固定了;而中断我们不能够预知它在那里发生中断,因此要保护现场,使中断子程序执行完后返回到中断的地方!!!
呵呵……说的太多了!!!
我知道你说的意思了,但是你要知道,中断现场保护是在中断子程序中进行的,因此当你高一级的中断发生的时候(他们不可能共用一个中断子程序,如果是同一中断,那也不可能,因为51中断中你进入中断子程序后要将禁止该中断再次中断,好象似的,嘿嘿……你可以试试),在高一级的中断子程序中也有现场保护,你的问题就是没有把现场保护放对地方!!!!!
============================================================
它们是把现场保护在同一堆栈中,我跟你打个比方吧,假如说堆栈的地址是80H,低一级的中断要保护的是1,2,3;高一级要保护的现场是4,5,6,那么在低一级的中断发生的时候,现场保护1,2,3将压如堆栈,(顺序书上应该有,这里是个比喻),那我先压入1,堆栈地址加1,压入2,堆栈地址再加1,如果这个时候高一级的中断发生,那么现在就应该跳到高一级中断的子程序,堆栈地址就是82H了,在将4,5,6分别压入堆栈,这样堆栈的地址就是85H,当高一级的中断子程序结束后,返回现场,堆栈的数据要从85H开始弹出,这样现场返回的就是6,5,4,这个时候程序就会跳到中断之前的地方,即底一级的中断那里,将要继续将3保护到堆栈中,在执行低一级的中断子程序.(其中,你要在中断保护现场完了后将中断标志清0啊,不然它始终会中断的,不可能去执行程序去了...)
这样讲解你应该知道它们的过程了吧,呵呵!!!!!!
⑷ 单片机寄存器中的数据进入堆栈后受不受中断程序控制
如果你的中断程序不去改动,当然不受影响。不过,因为中断,堆栈会压入断点地址,这样堆栈指针就受影响了。
有改动的话当然是影响的,因为堆栈是RAM的一部分,而所有的RAM都是全局的。因此任何一部分程序的改动都是有影响的。
⑸ 关于51单片机堆栈的问题
首先,SP是堆栈指针,当压堆栈的时候,它增加一,当出栈的时候,它减一。
PUSH
ACC和POP
ACC分别是压和出的指令。
除此之外,中断和call指令,硬件自动将PC程序指针压栈,等到reti或ret指令的时候,出栈。
一般讲SP设置大一点,比如70H,以免和其他单元冲突。
⑹ 51单片机响应中断,___的地址会自动进堆栈
51单片机响应中断,_正在执行的下一行语句__的地址会自动进堆栈
⑺ 在单片机中什么是堆栈它的作用是什么
在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。在计算机领域,堆栈是一个不容忽视的概念,堆栈是一种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。
堆栈是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的。对这个存储区存入的数据,是一种特殊的数据结构。所有的数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照“先进后出”的原则存取,位于其中间的元素,必须在其栈上部(后进栈者)诸元素逐个移出后才能取出。在内存储器(随机存储器)中开辟一个区域作为堆栈,叫软件堆栈;用寄存器构成的堆栈,叫硬件堆栈。
(7)单片机中断堆栈扩展阅读:
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的变量是可以指向一个地址的,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
⑻ 简述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单片机构成,前端数据采集由超声波测距,系统由发射和接
收装置来获取数据,根据所测得的距离来判断是否调用声音报警程序,距离小于
预置点时,调用报警模块。
⑼ 单片机编程里面,堆栈是什么意思
在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM区叫堆栈。
子程序调用和中断服务时CPU自动将当前PC值压栈保存,返回时自动将PC值弹栈;
保护现场/恢复现场;
数据传输。
⑽ 单片机在响应中断时对堆栈的影响如何
响应中断时,会将当前指令地址,压入堆栈。