ATmega128 堆栈指针

发布者:梦幻之光最新更新时间:2021-11-02 来源: eefocus关键字:ATmega128  堆栈指针 手机看文章 扫描二维码
随时随地手机看文章

堆栈指针主要用来保存临时数据,局部变量和中断/ 自程序的返回地址。堆栈指针总是指 向堆栈的顶部。要注意AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数 值将减小。


堆栈指针指向位于SRAM 的函数及中断堆栈。堆栈空间必须在调用函数或中断使能之前 定义。指针必须指向高于$60 的地址。用PUSH 指令推数据入栈时,堆栈指针将减一, 而当调用函数或中断时,指针将减二。使用POP 指令时,堆栈指针将加一,而用RET 或 RETI 返回时,指针将加二。


AVR堆栈指针占用了I/O空间两个8位寄存器。使用的位数由实际情况决定。注意,在AVR 结构中某些操作使用的数据空间很小,只要SPL 即可 ,此时,不会给出SPH 寄存器。


RAM 页面的Z 选择寄存器-RAMPZ

ATmega128 RAMPZ

• Bits 7..2 – Res: 保留
保留位,读操作返回值为零。在写数据时要写入0 以保证与未来产品的兼容。

• Bit 1 – RAMPZ0: 扩展RAM 页面Z 指针
RAMPZ 寄存器用于选择Z 指针访问的是哪一个64K RAM。由于ATmega128 不支持超过64K的存储器,因此RAMPZ只用来协助ELPM/SPM指令决定访问哪一个程序存储器页。不同的RAMPZ0 的作用如下:
RAMPZ0 = 0: ELPM/SPM 可以访问程序存储器地址$0000 - $7FFF ( 低64K 字节)
RAMPZ0 = 1: ELPM/SPM 可以访问程序存储器地址$8000 - $FFFF ( 高64K 字节)

LPM 不受RAMPZ 设置的影响。


关键字:ATmega128  堆栈指针 引用地址:ATmega128 堆栈指针

上一篇:ATmega128 指令执行时序
下一篇:ATmega128 通用寄存器

推荐阅读最新更新时间:2024-11-11 10:39

ATmega128 I/O存储器
ATmega128 的I/O 空间定义见P 342“ 寄存器概述” 。 ATmega128 的所有I/O 和外设都被放置在I/O 空间。所有的I/O 地址都可以通过 LD/LDS/LDD和ST/STS/STD指令来访问,在32个通用工作寄存器和I/O之间传输数据。地 址为$00 - $1F 的I/O 寄存器还可用SBI 和CBI 指令直接进行位寻址,而SBIS 和SBIC 则用来检查单个位置位与否。当使用IN 和OUT 指令时地址必须在$00 - $3F 之间。如果 要象SRAM一样通过LD和ST指令访问I/O 寄存器,相应的地址要加上$20。ATmega128是一个复杂的微处理器,其支持的外设要比预留的64 个I/O( 通过
[单片机]
Keil C51里关于堆栈指针的处理
Keil C是非常优秀的C51编译器,可能是最好的C51编译器,提供各种优化模式,对变量的优化和地址安排做得非常好。这是用C语言写代码的好处之一,如果用汇编写,得费一大番功夫给各个变量安排内存物理地址,还得时刻记住哪些地址的内存单元是已经分配了,新增加的变量就不能占用那些已经分配了的单元,以免产生内存交叠冲突和溢出。我一直非常信赖Keil C51的编译结果,在我的印象里,它对内存的分配是完美的,只要代码用它编译时没有报告任何warning和error,代码运行时不可能内存冲突或溢出的现象。 但,今天发生的事情证明我错了。 手头上有个产品的代码,代码量很大。程序跑起来的效果不大好,因此打算把代码优化一下。代码量越大,通常可优化的地方也
[单片机]
一文详解ATMEGA128熔丝位配置
AVR系列单片机在仿真调试之前,首先必须对AVR的熔丝位和锁定位进行配置。如果配置不当,则可能造成单片机不能正常工作,严重时可能导致单片机死锁。因此,对单片机熔丝位和锁定位的正确配置显得尤为重要。 熔丝位是对单片机具体功能和工作模式的限定,其正确配置与否直接影响到单片机能否正常工作;锁定位是对单片机的程序和数据进行加密,以防止单片机中的程序和数据被读出或写入。在进行配置时,一般先配置熔丝位,再配置锁定位。锁定位又分为引导程序区锁定位和程序及数据存储器锁定位两类。对引导程序区锁定位进行编程可以实现两套保护模式,即应用区保护模式和Boot Loader区保护模式;不同的编程配置可以实现不同的加密级别。对程序及数据存储器锁定位进行编
[单片机]
一文详解<font color='red'>ATMEGA128</font>熔丝位配置
ATmega128 省电模式
当SM2..0 为011 时, SLEEP 指令将使MCU 进入省电模式。这一模式与掉电模式只有 一点不同: 如果定时器/ 计数器0 为异步驱动,即寄存器ASSR 的AS0 置位,则定时器/ 计数器0 在 睡眠时继续运行。除了掉电模式的唤醒方式,定时器/ 计数器0 的溢出中断和比较匹配中 断也可以将MCU 从休眠方式唤醒,只要TIMSK 使能了这些中断,而且SREG 的全局中 断使能位I 置位。 如果异步定时器不是异步驱动的,建议使用掉电模式,而不是省电模式。因为在省电模式 下,若AS0 为0,则MCU 唤醒后异步定时器的寄存器数值是没有定义的。 这个睡眠模式停止了除clkASY 以外所有的时钟,只有异步模块可以继续工
[单片机]
中断应用设计要点
AVR的中断源比较多,尤其是ATmega128,一共有35个外部以及内部中断源。通常情况下,Flash程序存储器空间的最低位置(0x0000-0x0045)定义为复位和中断向量空间。完整的中断向量见第二章表 2-23。在中断向量表中,处于低地址的中断向量所对应的中断拥有高优先级,所以,系统复位RESET拥有最高优先级。 A.中断设计注意点: 1.具备Bootloader功能的AVR,其中断向量区可以在Flash程序存储器空间最低位置和Bootloader区的头部来回迁移,这主要用于配合Bootloader程序的应用。如果不使用Bootloader功能,一般不要中断向量区进行迁移。 2.Flash较小的AVR芯片,其一个中断向
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved