单片机讲义第10讲.pptVIP

  • 6
  • 0
  • 约5.33千字
  • 约 18页
  • 2017-08-17 发布于河南
  • 举报
单片机原理与应用 第 十 讲   主要内容 1. 4.3.4 子程序设计 2. 4.4 实用程序举例 4.3.4 子程序设计 子程序是指能完成明确任务、具有独立功能且能被其它程序反复调用的程序段。下面先看一个例题。 [例4.14] 设内部RAM 20H、21H单元中有两个数a和b,编程求c=a2+b2并把c送入内部RAM 22H单元。 说明: a=9; b=9; 且为整数 该程序由两部分组成:主程序和子程序。主程序通过累加器A传送入口参数a和b,子程序用于求平方并将结果通过累加器A传送给主程序。 MOV A,20H ;a→A ACALL SQR ;求a2 MOV R0,A ;a2→R0 MOV A,21H ;b→A ACALL SQR ;求b2 ADD A,R0 ;a2+b2→A MOV 22H,A ;存入22H单元 继续执行 主程序 SQR: ADD A,#01H ;地址调整 MOVC A,@A+PC ;查平方表 RET ;返回 机器码 22H TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 从上例中,可以得出以下几点: (1) 汇编语言子程序编写格式很简单,只需第一条指令要有标号,最后一条指令是RET,其它可根据程序功能编写即可。 (2) 调用子程序是通过指令ACALL(当然也可以使用指令LCALL)实现的。 (3) 调用子程序时,计算机只自动保护和恢复断点地址,其它寄存器和直接地址单元的内容则需编程人员根据程序具体情况通过一些指令进行保护和处理。 (4) 调用子程序时常常需要参数传递,即子程序从调用程序中获取数据进行处理,并将处理完的数据结果送回主程序,参数传递不能为立即数,应该采用存储单元地址或寄存器。如上例中在调用子程序SQR时,累加器A起着参数传递的作用。 子程序有关要求 功能: 完成某种特定功能,可被主程序反复调用 子程序名 入口参数 出口参数 占用资源( 寄存器,内存, PSW ,DPTR 等) 保护现场与恢复现场 ACLAL LCALL 调用,仅保护返回断点。 在调用子程序中,由于程序转入子程序的执行可能破坏主程序或调用程序的有关状态寄存器 (PSW) 、工作寄存器、累加器、内存单元等,因此,必要时将这些单元内容保护起来,即保护现场。 通常将要保护的内容压入堆栈。 子程序执行完后,通过 POP 指令来恢复保护的内容。 7. 主子之间参数传递方式( 寄存器,内存,堆栈)不同方式传递的 特点 8. 一个好的子程序最好只有一个入口,一个出口 9. 子程序不要长时间占有CPU 控制权,遇到故障或检查不到信号时应及时从子程序中跳出。 4.4 实用程序举例 4.4.1 延时 在程序设计过程中,有时需要程序“等待”一会儿再去处理某些事情,称之为延时。其作用是快速的CPU和慢速的外设相配合。 例: 1.AD转换时,启动AD后不能立即读取数据,要等AD转换结束;像AD0809转换器需要等待约 100 微妙。 2. 在打印机中或LCD显示器中,CPU 给打印机中或LCD 写入一个数据后,要等待外设不忙时,才能送下个数据; 计算机延时实际就是让计算机反复执行一些空操作,这样就能起到拖延时间的作用。需要执行空操作次数的多少,取决于延时时间的长短。 [例4.15] 编写延时 100US 子程序。 ORG 0100H 主程序

文档评论(0)

1亿VIP精品文档

相关文档