|
|
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启动代码中已经为你做好了。
|
|