授课日期 班次 授课时数 2
课题,任务八 LED显示电路(二)
教学目的:掌握子程序调用和保护现场的问题熟悉两条专门的查表指令重点,子程序调用和保护现场的问题 以及查表指令难点,现场保护的问题教具,多媒体作业,4.23 4.24
自用参考书:《单片机应用技术》耿长清主编、《单片机应用技术》刘守义主编教学过程:一、复习提问
1.描述任务 LED显示电路
2.分支程序和循环程序的设计二、新授由任务八 LED显示电路的控制程序引入本次课内容
1.子程序的概念(由实际应用中遇到带有通用性的问题引出子程序的概念)
2.子程序的结构
3.如何保护现场?(根据生活中的具体实例提出现场保护的问题)
4.参数的传递方法可利用累加器或寄存器、利用存储器、利用堆栈指针
5.两条专门的查表指令用 DPTR作基地址的查表步骤、用 PC内容作基地址的查表步骤
6.程序设计举例
7.课堂小结课后小结:
4.2 任务八 LED显示电路
4.2.4 相关知识
子程序的概念通常把这些基本操作功能编制为程序段作为独立的子程序,以供不同程序或同一程序反复调用 。 在程序中需要执行这种操作的地方放置一条调用指令,当程序执行到调用指令,就转到子程序中完成规定的操作,并返回到原来的程序继 续执行下去 。
子程序结构能供调用的子程序,其结构应具备:
必须标明子程序的入口地址,又称首地址,以便程序调用
必须以返回指令 RET结束子程序 。
4.2 任务八 LED显示电路
4.2.4 相关知识
参数传递在使用调用指令不附带任何参数时,参数的互相传递要由设计者通过程序安排 。 一般可采用以下方法:
传递数据 。 将需传递的参数通过工作寄存器 Rn或累加器 A传递给子程序 。 即在主程序调用子程序前将参数差额主选定的工作寄存器组 R0~R7、
累加器 A中,供子程序读取或者将参数在调用前先压入堆栈,进入子程序后再从堆栈中读出 。
传递地址 。 将要传递的参数存放在数据存储器中,将其地址通过工作寄存器 R0,R1或数据指针 DPTR传递,供子程序读取参数 。
4.2 任务八 LED显示电路
4.2.4 相关知识
现场保护主程序的现场保护和恢复 。 子程序 ( 包括中断服务程序 ) 是个独立的程序段,在子程序执行过程中常需用到通用单元,例如:工作寄存器 R0~R7,累加器 A,数据指针 DPTR,以及有关标志,状态位等 。 而这个单元中的原内容在调用子程序结束之后 的主程序中仍有用,需进行保护,称现场保护 。 在执行完子程序并返回继续执行主程序前应恢复其原内容,称现场恢复 。 一般有两种现场保护 /恢复方式:
4.2 任务八 LED显示电路
4.2.4 相关知识
调用前保护,返回后恢复 。 这种方式是在主程序逻辑的调节器用指令前进行现场保护,在调用指令之后,即返回原断点处进行恢复现场 。 其程序结构如下所示:
主程序
PUSH PSW ; 将 PSW,A,DPTR等入栈保护
PUSH A
PUSH B
PUSH DPL
PUSH DPH
PUSH PSW,#10H ; 选用工作寄存器组 2,将 0组保护
4.2 任务八 LED显示电路
4.2.4 相关知识
LCALL addr16 ; 调用子程序 addr16
POP DPH ; 出栈
POP DPL
POP B
POP A
POP PSW
这种结构灵活,可根据实际需要实现现场保护 /恢复 。
调用后保护、返回前恢复。这种结构是在子程序的开始部分进行现场保护,而在子程序的结束部分、返回指令前恢复。其程序结构如下所示:
4.2 任务八 LED显示电路
4.2.4 相关知识;子程序
ADDR,PUSH PSW 现场保护
PUSH A
PUSH B
PUSH DPL
PUSH DPH
MOV PSW,#08H ; 选用工作寄存器组 1,0组保护;子程序主体
POP DPH 现场恢复
POP DPL
POP B
4.2 任务八 LED显示电路
4.2.4 相关知识
POP A
POP PSW
RET ; 返回这是子程序标准格式,现场保护 /恢复内容固定,但程序规范,清晰 。
上述两种方式可由设计者任选。
4.2 任务八 LED显示电路
4.2.4 相关知识
子程序特性随着汇编语言程序设计技术的发展,子程序的应用越显重要 。 因此,
对子程序的设计具有较高要求,除通常在程序设计中应遵循的原则外,还应具备以下特性:
通用性严格讲,子程序有通用和专用两种 。 前者如数制转换,浮点运算等子程序可广泛应用于同系列单片机的任何应用系统,后者仅限用于同一个应用系统中 。 特别是前者,都应注意子程序的通用性 。
为了使子程序具有通用性,在设计中要解决的一个重要问题,就是确定哪些变量作为参量以及何传递参量。
4.2 任务八 LED显示电路
4.2.4 相关知识
可浮动性可浮动性是指子程序段可安置在程序存储器的任何区域 。 为此,
在子程序中应避免选用绝对转移地址 。
可递归和可重入性子程序能自己调用自己和同时能被多个任务(或多个用户程序)
调用的特性,分别称之为子程序的可递归性和可重入性。这类子程序常在庞大而复杂的程序中应用,在单片机应用程序设计中较少用到。
4.2 任务八 LED显示电路
4.2.4 相关知识
子程序说明文件对于通用子程序,为便于各种应用程序的选用,要求在子程序编制,
调试完成后应提供一个说明文件 。 其内容应包含以下内容 。
子程序名 。 标明子程序功能的名称 。
子程序功能 。 简要说明子程序能完成的主要功能,包括重要算法,参量要求及有关存储单元配置等 。
子程序调用 。 指明本子程序还需调用哪些子程序 。
附子程序流程图及程序清单 。
由于子程序结构在程序设计中应用极为普遍,因此,一般在指令集中均设有子程序调用指令。 AT89S系列的指令集中,考虑到程序存储器空间的限制和节省,特设置了绝对调用和长调两条指令,供实际应用时选择。
4.4 任务八 LED显示电路
4.2.4 相关知识
查表程序结构查表程序是一种常用程序,它广泛使用于 LED显示控制,打印机打印控制,数据补偿,数值计算,转换等功能程序中,这类程序具有简单,执行速度快等特点 。
所谓查表法,就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出,然后把这张表存于单片机的程序存储器中,
这时自变量值为单元地址,相应的函数值为该地址单元中的内容 。 查表,就是根据变量 X在表格中查找对应的函数值 Y,使 Y=f(X)。
4.4 任务八 LED显示电路
4.2.4 相关知识
两条查表指令,
MOVC A,@A+PC
MOVC A,@A+DPTR
选用 DPTR为首地址指针时表格参量可存放在 64KB范围内的任何区段,可供无限次查表,选用 PC当前值为首地址指针时表硌参量必须设置在紧跟查表指令( MOVC) 之后,基本上只能一次性查表,编程时应根据实际情况进行选择,一般以选择
DPTR为基址指针的查表指令灵活、方便,可省去一些麻烦。
4.4 任务八 LED显示电路
4.2.4 相关知识选用 DPTR作为基地址的查表指令时,其操作可分 3步进行:
将待查表格的首地址置入 DPTR基址寄存器;
将待查的表格具体项数值置入变址寄存器 A中;
执行指令
MOVC A,@ A+DPTR
将查表结果值读入累加器 A中。
4.4 任务八 LED显示电路
4.2.4 相关知识选用 PC当前值作为基地址的查表指令时,由于 PC的当前值正是查表指令的下一条指令的第一个字节的地址值,亦即表格数据串的首地址,
当执行完查表指令,读取到表格数据后仍需从这个 PC的当前值继续往下执行,显然两者发生重叠,为解决这个矛盾,势必将表格下移若干个字节,以便设置一条跳转指令跳过表格串继续安排顺序往下执行的程序 。 把表格串下移的字节数加到变址寄存器 A中,即在查表指令前加一条指令 。
ADD A,#data
A中为经动态运算得到的待查表格数的项数。 Data为表格串下移的字节数,亦即 PC的当前值到下移后的表格串首地址的距离数。这个距离数显然不宜太大,因为它将影响表格串的长度,两者之和不能超过
565B,这种表格一般属一次性查找,因为 PC的当前值随程序的执行而改变
4.4 任务八 LED显示电路
程序设计举例
【 例 4.8 】 4位 BCD码整数转换成二进制整数入口参数,BCD码字节地址指针 R0,位数存于 R2中 。
出口参数:二进制数存于 R3R4中 。
算法,A=103a3+102 a2+10a1+a0
程序流程如 7.7所示 。
子程序清单如下:
BCDA,PUSH PSW ; 现场保护
PUSH A
PUSH B
MOV PSW,#08H
MOV R3,#00H
MOV R2,#3 ; BCD码 D的位数
MOV A,@ R0 ; a0-R4
4.4 任务八 LED显示电路
程序设计举例
MOV R4,A
BCKB,MOV A,R3 ; ( R3R4) × 10
MOV B,#10 ; R4
MUL AB
MOV R4,A
XCH A,B
MOV B,#10
XCH A,R3
MUL AB
ADD A,R3
XCH A,R4
INC R0 ;(R0)+1-R0
ADD A,@ R0 ;( R3R4)- ((R0))-RR3R4
4.4 任务八 LED显示电路
程序设计举例
XCH A,R4
ADDC A,#0
MOV R3,A
DJNZ R2,BCDB ;循环 n-1次
POP B ; 恢复现场
PIP A
POP PSW
RET ; 返回上例中的 R2内容是 BCD码的位数 n,本例中 n=4,即两个字节 4位 BCD码,在程序中作为循环控制寄存器的计数值为 n-1=4-1=3,即本例循环 3次即完成二次字节的 BCD码转换 。
本例采用乘 10运算,也可采用除 2运算进行转换。
课堂小结:
1、什么是子程序?
2、子程序的结构
3、如何保护现场和传递参数?
4、查表指令的查表步骤?
作业:
1、预习 LED接口实验实训项目,完成预习报告、编写控制程序
2,P106 4.23 4.24