51单片机入栈

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-01
51单片机进栈和出栈地址修改的方向

51单片机是8位机,每次压栈只有一个字节,不存在高位或低位问题。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单片机构成,前端数据采集由超声波测距,系统由发射和接
收装置来获取数据,根据所测得的距离来判断是否调用声音报警程序,距离小于
预置点时,调用报警模块。

首先个人感觉象R寄存器入堆栈真没有什么意思,如果你是感觉寄存器不够的话呢可以用指令来切换R寄存器,因为单片机有4组一般来说正常选择的是第0组
你要非坚持要让R0的数据入栈如果不需要保持A寄存器的话可以在入栈前先执行句:MOV A,R0然后在执行PUSH A
不知道可以吗

在MCS-51里,PUSH 和POP 只能对direct使用。
又因为R0到R7分布在内存00H到07H内,因此如果你需要把R0入栈的话,要这样:PUSH 00H。出栈就是POP 00H。

其实堆栈的作用一般用来保护数据,如果像你所说的行不通的话,你也可以定义一个中间寄存器,把R0的值赋给它保存起来,用完R0后再赋回来就行了。

入栈是要做两件事,哪事先做,哪事后做,又有什么关系呢?
设sp=30h,第一个入栈的是放在30h处,sp+1处等着下一个。
还有,单片机本指令还没有运行,pc已经指到下一条指令了。

  • 51单片机入栈
    答:首先个人感觉象R寄存器入堆栈真没有什么意思,如果你是感觉寄存器不够的话呢可以用指令来切换R寄存器,因为单片机有4组一般来说正常选择的是第0组 你要非坚持要让R0的数据入栈如果不需要保持A寄存器的话可以在入栈前先执行句:MOV A,R0然后在执行PUSH A 不知道可以吗 ...
  • 简述51单片机堆栈进栈和出栈操作规则?
    答:1.堆栈用于响应中断或调用子程序时保护断点地址,也可通过栈操作指令(push 和pop保护和恢复现场)其中入栈时先SP+1再将内容压入当前SP所指示的堆栈单元 中,出栈则先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中,再将 SP减1.2.中断允许寄存器的功能是控制CPU对中断的开放和屏蔽以及每个...
  • 请问51单片机地址进堆栈先压高位还是低位?
    答:51单片机是8位机,每次压栈只有一个字节,不存在高位或低位问题。51的堆栈是向上生长的,也就是说,每压入一个数据,堆栈指针加一(实际上是指针先加一,然后写入数据)。
  • 51系列单片机的堆栈与通用微机中的堆栈有何
    答:在51系列单片机中,堆栈是向上生长的,所以数据入栈的时候,堆栈指针先加1,再压栈。出栈的时候先弹出数据,堆栈指针再减1。但在AVR单片机中,堆栈是向下生长的,数据入栈时指针将减1,数据出栈时指针将加1。参见百科:/view/2081454.htm
  • 51单片机进栈和出栈地址修改的方向
    答:51单片机是8位机,每次压栈只有一个字节,不存在高位或低位问题。51的堆栈是向上生长的,也就是说,每压入一个数据,堆栈指针加一(实际上是指针先加一,然后写入数据)。
  • 8051单片机堆栈
    答:51单片机的堆栈是向上生长的,就是堆栈不为空时,栈底地址小于栈顶地址,当将数据入栈时,栈顶地址增加。还有一个技巧是,堆栈是数据存储器的一部分,也就是说堆栈除了利用push和pop访问,也可以通过普通的选址方法访问,例如mov。有时我们想访问堆栈数据,但不想改动变动栈顶,这时可以通过mov来访问...
  • 51单片机地址进堆栈先压高位还是低位?
    答:先压低字节。以LCALL指令为例,其内部执行序列为:(PC) ← (PC) + 3 (SP) ← (SP) + 1 ((SP)) ← (PC7-0)(SP) ← (SP) + 1 ((SP)) ← (PC15-8)(PC) ← addr15-0
  • 51系列单片机进行堆栈操作以字为基本单位么
    答:51单片机的堆栈操作都是以字节为单位的,包括PUSH,POP命令。不论是你自己主动压栈,还是函数调用时的压栈,都是字节为单位的。如果需要压的是16位内容,例如PC值,那就分两次压。
  • mcs51单片机中堆栈的作用有
    答:1、保存程序计数器的值:当程序发生中断时,PC的值会被保存到堆栈中,以便在中断处理完成后,程序能够从正确的位置继续执行。2、实现子程序的调用和返回:当执行子程序调用指令时,PC的值会被推入堆栈,同时子程序的入口地址也会被推入堆栈。在子程序执行完成后,从堆栈中弹出PC和返回地址,程序计数器...
  • mcs-51单片机中堆栈的作用有
    答:1、临时存储数据:堆栈可以用于临时存储数据,例如在函数调用或中断处理时,将寄存器的值压入堆栈中进行保护,以便在函数返回或中断返回时能够恢复寄存器的值。2、函数调用和返回:在MCS51单片机中,函数调用和返回通过堆栈实现。在函数调用时,将返回地址压入堆栈,然后跳转到函数的入口地址。在函数返回时,...