- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三、相关知识 1.堆栈的概念 为了引入堆栈的概念,先来讨论货栈存放货物的情况。在货栈中堆放货物如电视机时,总是将第1台放在最下面,第2台放在第1台的上面,依此类推;当货主取货时,应先从最上面开始取,将第n台取出后,再取第n?1台,依此类推,即货栈中是按后进先出的原则存取货物,如图2-26所示。 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 * 在计算机中可引用货栈存取货物的思路,设计一种按后进先出原则组织的存储区,我们称之为堆栈区。在MCS-51单片机中,片内数据存储器可用做堆栈区。 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 图2-26 货栈存取货 * 使用堆栈前,应设置一个栈底,如50H单元,第1个数(如11H)存放在栈底的上一个单元51H单元中,第2个数(如22H)存放在第1个数的上一个单元52H单元中,依此类推。当用户取数时,先从最上面开始取数,最后存入的数先取出,即按后进先出的原则存取数据。由上述讨论可知,用户只能对栈顶单元进行存取操作。为了实现这一操作,必须提供栈顶单元的地址,为此在单片机中的堆栈指针寄存器SP专门用于存放栈顶单元的地址,SP为特殊功能寄存器,其地址为81H,如表2-4所示。 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 * 地 址 单 元 内 容 … … 54H 44H 53H 33H 52H 22H 51H 11H 50H 栈底单元 表2-4 堆栈结构 * 2.堆栈的作用 堆栈的作用是在子程序调用与中断时,用于保存断点地址及片内数据存储单元的内容。 3.使用方法 (1)建栈 建栈是将栈底单元的地址赋给SP,如MOV SP,#50H。 注意:MCS-51单片机启动或复位后,SP的初值为07H。显然07H作为栈底单元地址是不太合适的,必须根据程序所需的堆栈深度,另行指定栈底。 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 * (2)压栈 压栈是用压栈指令PUSH将内存单元中的数据保存到堆栈中去。指令格式为 PUSH direct;SP←SP+1 堆栈指针加1,指向一个空单元。(SP)←(direct)将存储单元(direct)内容压入栈顶单元中。 压栈指令PUSH用于将存储单元的内容保存到堆栈中。本指令不影响标志位。 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 * (3)出栈(弹栈) 出栈是用弹出指令POP将栈顶单元的内容弹给内存单元。弹出指令格式为 POP direct;(direct)←(SP)将栈顶单元的内容弹到直接寻址的direct单元中。SP←SP-1 堆栈指针减1,指向新的栈顶单元地址。 弹出指令POP用于将保存在栈顶单元中的内容弹回到存储单元中去,不影响标志位。 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 * 注意:由于堆栈操作只能以直接寻址的方式来操作,所以不能以A或工作寄存器Rn作为操作数,若要把A中的数送入堆栈,应用PUSH ACC指令,这里的ACC表示A的直接地址是E0H。 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 * 4.指令应用举例 MOV SP ,#50H ;将堆栈指针设置在50H处 PUSH ACC ;将ACC的内容压入堆栈51H单元 PUSH B ;将B的内容压入堆栈52H单元 … 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 * POP B ;按后进先出原则,应先将栈顶单元内容弹回B中 POP ACC ;再将下一单元内容弹回ACC中,以压入与弹出数据的一致性 上述指令常用于子程序或中断处理程序的开始与结尾处,用于保护与恢复现场。 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 * 四、任务实施 1.编写程序 一位十六进制数转换为ASCII码的程序流程图如图2-27所示。 根据前面的分析,一位十六进制数转换为ASCII码的源程序如下: 第4节 代码转换程序设计任务二 十六进制数转换为ASCII码程序设计 * 图2-27 一位十六进制数转换为ASCII的程序流程图 * ORG 0000H AJM
原创力文档


文档评论(0)