老古开发网首页
导航:老古开发网首页文章索引文章分类单片机→[A51 4.1.3 堆栈段(Stack Segment)]
| -文章搜索 - 最新文章 - |

A51 4.1.3 堆栈段(Stack Segment)

发布时间:2006年7月23日 点击次数:890
来源:   作者:
 
 x51架构使用一个硬件堆栈为CALL指令存储返回地址,也用于PUSH和POP指令的临时存储。使用这些指令的8051应用程序必须把堆栈指针设置到一个不允许其它变量使用的存储区域。

    对于传统的8051,必须定义一个堆栈段,堆栈空间必须按下面的方法保留。这种定义也适用于扩展的8051和251,而一般情况下,这些控制指令也可以在其它区域设置堆栈。

STACK SEGMENT IDATA  
  RSEG STACK ; 选择堆栈段
  DS 10h ; 保留16个字节的空间

然后,你必须在程序的开始初始化堆栈指针。

CSEG AT 0 ; 复位向量
  JMP STARTUP ; 跳转到启动代码
STARTUP:     ; 在复位时执行的代码
  MOV SP, #STACK - 1 ; 装入堆栈指针

    对于Philips 80C51MX或者Intel/Atmel WM 251,可以定义一个堆栈段,而且必须按下面的方法保留堆栈空间。

STACK SEGMENT EDATA  
  RSEG STACK ; 选择堆栈段
  DS 100h ; 保留256个字节的空间

然后,你必须在程序的开始初始化堆栈指针。

CSEG AT 0 ; 复位向量
  JMP STARTUP ; 跳转到启动代码
STARTUP:     ; 在复位时执行的代码
;为Philips 80C51MX设置堆栈
  ORL MXCON, #0x02 ; 使能扩展的堆栈
  MOV SPE, #HIGH (STACK - 1) ; 装入堆栈高字节
  MOV SP, #LOW (STACK - 1) ; 装入堆栈低字节
       
为Intel/Atmel WM 251设置堆栈
  MOV DR60, #STACK - 1 ; 装入堆栈指针

如果你要使汇编接口到C,你可能不需要设置堆栈。这在C启动代码中已经为你做好了。


欢迎进入老古论坛进行讨论
[单片机] 相关文章:
调液晶模块T6963驱动范例
简介:
对比度可以调节说明LCD的驱动电压是好的. 给个实践OK的驱动范例给你, For the sake of "A month " :( /* ============================================================================ 测试软件 FOR T6963 &nbs......

单片机C环境下位操作的实现方法
两种“软件陷阱技术”的比较
A51 4.1.2 普通段(Generic Segment)
用4BIT OTP单片机实现USB/PS2 MOUSE的设计
基于GSM的GPS车辆定位监控系统
振荡器和专用寄存器功能
AT89C2051内部结构与功能
通过串口给ADC0809各种状态。
C语言宏定义技巧(常用宏定义)
 
下一个:[单片机]A51 4.1.4 绝对段(Absolute Segments)
简介:
绝对段位于一个固定的存储地址中。使用伪指令CSEG,DSEG,XSEGISEG和BSEG可以创建绝对段。使用这些伪指令,我们可以把代码和数据定位在存储空间中的一个固定地址。当我们需要访问一个固定的存储器地址,或者当我们想把程序代码或常数放在一个固定的内存地址时,我们必须使用绝对段。参见伪指令CSEG,DSEG,ISEG,XSEG,ISEG获取更多有关定义绝对段的信息。 复位后,8051微处理器开始从CODE地址0执行程序。Intel/Atmel WM 25的起始执行地址为FF0000。有些类型的程序代码必须被置于该地址。我们可以使用绝对段强制......
 

上一个:[单片机]基于SN8P1706芯片的电磁炉(源程序)(sonix)

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒