单片机原理与接口技术(第3版)-第3章1.ppt

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机原理与接口技术(第3版)-第3章1

4. 查表程序 例3-17 设有一个巡回检测报警装置,需对16路输入进行检测,每路有一个最大允许值,它为双字节。检测时需根据测量的路数,找出该路的最大允许值。再判断输入值是否大于最大允许值,如大于则报警。这里只考虑查找最大值。 分析:设x为路数,放在R2中。y为最大允许值,放在表格中。查表后,最大值放在R3、R4中。 * * ----查表程序 4. 查表程序 ORG 4000H PM1:MOV A, R2 ;其值范围为00H~0FH(如04) ADD A, R2 ;A←(R2)×2,因最大允许值占两个字节(如08) MOV R3, A ;R3←(R2)×2(如08) ADD A, #06H ;加偏移量,(如400CH-4006H=#06H) MOVC A, @A+PC ;查第1字节(如地址=400CH+8=4015H) XCH A, R3 ;存第1字节(如33),准备取第2字节 ADD A, #03H ;加偏移量(如400CH-400AH+01H=#03H) MOVC A, @A+PC ;查第2字节(如400AH+0BH=4016H) MOV R4, A ;存第2字节(如88) RET TABI: DW 2520, 3721, 4264, 7560, 3388, 3265, 7883, 9943 ;最大值表 DW 1050, 4051, 6785, 8931, 5468, 5871, 3284, 6688 * * ----查表程序 5. 子程序 同一个程序中,往往有许多地方都需要执行同样的一项任务,这时可以对这项任务进行独立的编写,形成一个子程序。在原来的主程序中需要执行该任务时,调用该子程序,执行完后又返回主程序,继续以后的操作,这就是所谓的子程序结构。在程序设计过程中,适当地使用子程序具有以下优点: 1) 不必重复编写同样的程序,提高了编码的效率。 2) 缩短了源程序和目标程序的长度,节省了程序存储器的空间。 3) 使程序模块化、通用化,便于阅读、交流和共享。 4) 便于分块调试。 * * ----子程序 5. 子程序 在子程序调用过程中须解决以下两个方面的问题: 1) 保护现场和恢复现场。 2) 调用程序与被调用程序之间的参数传递。 保护现场和恢复现场 方法就是在进入子程序时,将需要保护的数据推入堆栈,而空出这些数据所占用的工作单元,供子程序中使用。在返回调用程序之前,再将推入堆栈的数据弹出到原有的工作单元,恢复其原来的状态,使调用程序可以继续往下执行。 * * ----子程序 5. 子程序 参数传递 子程序调用时,要特别注意主程序与子程序之间的信息交换问题。在调用一个子程序时,主程序应先把有关参数(子程序入口条件)放到某些约定的位置,子程序在运行时,可以从约定的位置得到有关参数。同样子程序结束前,也应把处理结果(出口条件)送到约定位置。返回后,主程序便可从这些位置得到需要的结果,这就是参数传递。 * * ----参数传递 5. 子程序 参数传递大致可分为以下几种方法: 1) 传递数据 将数据通过工作寄存器R0~R7和累加器来传送。即主程序和子程序在交接处,通过上述寄存器和累加器存储同一参数。 2) 传送地址 数据存放在数据存储器中,参数传递时只通过R0、R1或DPTR传递数据所存放的地址。 3) 通过堆栈传递参数 在调用之前,先把要传送的参数压入堆栈,进入子程序之后,再将压入堆栈的参数弹出到工作寄存器或者其他内存单元。 * * ----参数传递 例3-18 试编写程序,计算 分析:a1、a2、...、a10存放在内部RAM的20H开始的存储区域内,计算所得结果存放在R3、R2中。要求:平方运算编写成子程序SORT,主程序通过调用SORT并求和完成运算。参数的传递用累加器。 * * 5. 子程序 ----子程序应用 ORG 8000H MAIN: MOV R0, #20H ;置数据指针 MOV R7, #10 ;置计数初值 MOV R3, #0 ;结果单元清零 MOV R2, #0 LOOP: MOV A, @R0 ;取数 ACALL SORT ;调用求平方子程序 ADD A, R2 ;累加平方和 MOV R2, A ADDC A, #0 ;加进位Cy INC R0 ;修改指针 DJNZ R7, LOOP ;未完,继续 * * 5. 子程序 ----子程序应用 SJMP EN SORT: MOV DPTR, #

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档