第5章程序设计_第1页
第5章程序设计_第2页
第5章程序设计_第3页
第5章程序设计_第4页
第5章程序设计_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理及应用程序设计 MCS-51MCS-51单片机汇编语言单片机汇编语言 程序设计程序设计 概述概述 MCS-51单片机的编程语言可以是汇编语言也可以单片机的编程语言可以是汇编语言也可以 是高级语言(如是高级语言(如C语言),高级语言编程快捷,但程语言),高级语言编程快捷,但程 序长,占用存储空间大,执行慢;汇编语言产生的目序长,占用存储空间大,执行慢;汇编语言产生的目 标程序简短,占用存储空间小,执行快,能充分发挥标程序简短,占用存储空间小,执行快,能充分发挥 计算机的硬件功能。无论是高级语言还是汇编语言,计算机的硬件功能。无论是高级语言还是汇编语言, 源程序都要转换成目标程序(机器语

2、言)单片机才能源程序都要转换成目标程序(机器语言)单片机才能 执行。执行。 单片机原理及应用程序设计 支持写入单片机或仿真调试的目标程序有两种文件支持写入单片机或仿真调试的目标程序有两种文件 格式:格式: BIN文件和文件和 HEX文件文件; BIN文件是由编译器生成的二进制文件,是程序文件是由编译器生成的二进制文件,是程序 的机器码的机器码; HEX文件是由文件是由INTER公司定义的一种格式,这种公司定义的一种格式,这种 格式包括地址、数据和校验码,并用格式包括地址、数据和校验码,并用ASCII码来码来 存储,可供显示和打印。存储,可供显示和打印。HEX文件需通过符号文件需通过符号 转换程

3、序转换程序OHS51进行转换。进行转换。 两种语言的操作过程见图两种语言的操作过程见图3-1。 单片机原理及应用程序设计 连接连接/定位器定位器 L51 汇编语言汇编语言 源程序源程序 汇编器汇编器A51 符号转换程序符号转换程序 OHS51 绝对地址绝对地址 目标程序目标程序 .BIN C语言程序语言程序 浮浮 动动 地地 址址 目目 标标 程程 序序 编译器编译器C51 HEX 图图 1 两种语言源程序转换成目标程序两种语言源程序转换成目标程序 单片机原理及应用程序设计 目前很多公司将编辑器、汇编器、编译器、连目前很多公司将编辑器、汇编器、编译器、连 接接/定位器、符号转换程序做成集成软件

4、包,用户进定位器、符号转换程序做成集成软件包,用户进 入该集成环境,编辑好程序后,只需点击相应菜单入该集成环境,编辑好程序后,只需点击相应菜单 就可以完成上述的各步,如就可以完成上述的各步,如WAVE、KEIL , WAVE集成软件的使用见附录集成软件的使用见附录。 汇编:将汇编语言汇编:将汇编语言源程序源程序转换成机器语言转换成机器语言目标目标 程序的过程称为汇编。程序的过程称为汇编。 汇编程序:能将汇编语言汇编程序:能将汇编语言源程序源程序转换成机器语转换成机器语 言言目标目标程序的系统软件称为汇编程序。程序的系统软件称为汇编程序。 单片机原理及应用程序设计 汇编的方法:汇编的方法有两种汇

5、编的方法:汇编的方法有两种 1.手工汇编:手工汇编: 人工查指令表,查出程序中每条指令对应的机器代码。人工查指令表,查出程序中每条指令对应的机器代码。 早期的计算机使用。早期的计算机使用。 2. .机器汇编:机器汇编: 用计算机中的汇编程序对用户源程序进行汇编。用计算机中的汇编程序对用户源程序进行汇编。 用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约 定。这些由伪指令指定。定。这些由伪指令指定。 单片机原理及应用程序设计 1)确定程序中每条汇编语言指令的指令机器码确定程序中每条汇编语言指令的指令机器码 2)确定每条指令在存储器中的存放地

6、址确定每条指令在存储器中的存放地址 3)提供错误信息提供错误信息 4)提供目标执行文件提供目标执行文件(*.OBJ/*.HEX)和列表文件和列表文件(*.LST) 地址地址 机器码机器码源程序源程序 ORG 2000H 2000H 78 30 MAIN: MOV R0,#30H 2002H E6 MOV A,R0 汇编的主要任务:汇编的主要任务: 单片机原理及应用程序设计 1. 机器指令:指令系统中的全部指令。每条机器机器指令:指令系统中的全部指令。每条机器 指令都有对应的机器代码,可以被指令都有对应的机器代码,可以被CPU执行。执行。 2. 伪指令:伪指令: 汇编控制指令,没有指令代码,只汇

7、编控制指令,没有指令代码,只 用于汇编过程,为汇编程序提供汇编信息。用于汇编过程,为汇编程序提供汇编信息。 一一. 汇编语言指令类型汇编语言指令类型 3 3. 宏指令宏指令 宏汇编功能:将需要反复多次执行的程序段定义宏汇编功能:将需要反复多次执行的程序段定义 成一个宏指令名(宏定义)。编程时,可在程序中成一个宏指令名(宏定义)。编程时,可在程序中 使用宏指令名来替代被定义的程序段(宏调用)。使用宏指令名来替代被定义的程序段(宏调用)。 单片机原理及应用程序设计 宏定义过程宏定义过程: 宏调用过程:宏调用过程: 宏指令名宏指令名 实际参数实际参数 宏指令名宏指令名 实际参数实际参数 宏指令名宏指

8、令名 MACRO 形式参数形式参数 ;被定义的程序;被定义的程序 段段 ENDM 单片机原理及应用程序设计 二伪指令二伪指令 1.起始指令起始指令 ORG nn 功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。指示此语句后指示此语句后 面的程序或数据块以面的程序或数据块以nn为起始地址,连续存放在程序为起始地址,连续存放在程序 存储器中。存储器中。 指令地址指令地址 机器码机器码源程序源程序 ORG 2000H 2000H 78 30 MAIN: MOV R0,#30H 2002H E6 MOV A,R0 ORG 3000H 3000H 23 TAB: DB 23H,100

9、,A 3001H 64 3002H 41 单片机原理及应用程序设计 2.字节定义字节定义 标号:标号: DB(字节常数,或字符或表达式)(字节常数,或字符或表达式) 功能:功能:指示在程序存储器中以标号指示在程序存储器中以标号 为起始地址的单元里存放的数为为起始地址的单元里存放的数为 字节数据(八位二进制数)。字节数据(八位二进制数)。 例如例如 LN:DB 32,C,25H,-1 ;LNLN+2 地址单元依次存放地址单元依次存放 20H , 43H , 25H ,FFH 地址地址 数据数据 LN 20 LN+143 LN+225 LN+3FF 3. 字定义字定义 标号:标号:DW (字常数或

10、表达式)(字常数或表达式) 作用:作用: 指示在程序存储器中以标号为指示在程序存储器中以标号为 起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据 (即(即16位的二进制数),例如:位的二进制数),例如: GH :DW 1234H,5678H,08 GH12 34 GH+256 78 GH+400 08 单片机原理及应用程序设计 5. 等值指令等值指令 标号标号 EQU(数值表达式)(数值表达式) 表示表示EQU两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。 例如:例如: X1 EQU 2000H X2 EQU 0FH MAIN:MOV DPTR,#

11、X1 ; DPTR=2000H ADD A,#X2 ; A=A+0FH 4保留字节保留字节 标号:标号:DS (数值表达式)(数值表达式) 作用:作用: 指示在程序存储器中保留以标号为起始地指示在程序存储器中保留以标号为起始地 址的若干字节单元,其单元个数由数值表达式指定。址的若干字节单元,其单元个数由数值表达式指定。 例如例如 L1:DS 32 ; 从从L1地址开始保留地址开始保留32个存储单元。个存储单元。 单片机原理及应用程序设计 6. 位定义位定义 标号标号 BIT 位地址位地址 作用:作用: 同同EQU指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。 例如例如 AIC B

12、IT P1.1。 7.汇编结束汇编结束 END 作用:作用: 指示源程序段结束。指示源程序段结束。 END指令放在程序的最后。指令放在程序的最后。 单片机原理及应用程序设计 汇编语言程序设计步骤汇编语言程序设计步骤 一一. .确定方案和计算方法确定方案和计算方法 二二. .了解应用系统的硬件配置、性能指标了解应用系统的硬件配置、性能指标 三三. .建立系统数学模型,确定控制算法和操作步骤建立系统数学模型,确定控制算法和操作步骤 四四. .合理分配存储器单元和了解合理分配存储器单元和了解I/O接口地址接口地址 五五. 编制源程序编制源程序 1.按功能设计程序,明确各程序之间的相互关系按功能设计程

13、序,明确各程序之间的相互关系 2. 用流程图表示程序结构和功能用流程图表示程序结构和功能 3.程序中用注释说明指令在程序中的作用,方便阅读、程序中用注释说明指令在程序中的作用,方便阅读、 调试和修改调试和修改 4.常用程序结构常用程序结构 顺序程序、分支程序、循环程序、子程序顺序程序、分支程序、循环程序、子程序 单片机原理及应用程序设计 顺序程序设计顺序程序设计 程序走向只有一条路径程序走向只有一条路径 例例5-1 编程将外部数据存储器的编程将外部数据存储器的 000EH和和000FH单元的内容相单元的内容相 换。换。 000EH 000FH 000EH 000FH 000EH 000FH 0

14、00EH 000FH 分析分析: 外部数据存储器的数据操外部数据存储器的数据操 作只能用作只能用MOVX指令,且只能指令,且只能 和和A之间传送,因此必须用一个之间传送,因此必须用一个 中间环节作暂存,设用中间环节作暂存,设用20H单单 元。用元。用R0、R1指示两单元的低指示两单元的低 八位地址,高八位地址由八位地址,高八位地址由P2指指 示。编程过程如下:示。编程过程如下: 000EH 000FH 000EH 000FH 000EH 000FH 单片机原理及应用程序设计 ORG 0000H MOV P2, #0H ;送地址高八位至送地址高八位至P2口口 MOV R0, #0EH ;R0=

15、0EH MOV R1, #0FH ;R1=OFH MOVX A, R0 ;A=(000EH) MOV 20H, A ;(20H)=(000EH) MOVX A, R1 ;A=(000FH) XCH A, 20H ; A=(000EH),(20H)=(000FH) MOVX R1, A MOV A, 20H MOVX R0, A ;交换后的数送各单元交换后的数送各单元 SJMP $ END 单片机原理及应用程序设计 ORG 0000H MOV DPTR, #000EH ;R0= 0EH MOVX A, DPTR ;A=(000EH) MOV 20H, A ;(20H)=(000EH) MOV D

16、PTR, #000FH MOVX A, DPTR ;A=(000FH) XCH A, 20H ; A=(000EH),(20H)=(000FH) MOVX DPTR, A MOV A, 20H MOV DPTR,#000EH MOVX DPTR, A ;交换后的数送各单元交换后的数送各单元 SJMP $ END 单片机原理及应用程序设计 【例例2】 试编写计算试编写计算Y=MNQ的的 程序程序 解解:设设M、N、Q三个数分别存放在内三个数分别存放在内 部部RAM的的40H、41H和和42H单元中,单元中, 根据题意要求,先作根据题意要求,先作M十十N运算,运算, 再作减再作减Q的运算,结果的运

17、算,结果Y存入存入43H 单元中,程序流程图如图所示,单元中,程序流程图如图所示, 单片机原理及应用程序设计 程序设计如下:程序设计如下: ORG 2000H MOV A,40H ;A=M ADD A,41H ;A=M+N CLR C ; C =0 SUBBA,42H ;A=MNQ MOV 43H,A ;存结果;存结果 END 单片机原理及应用程序设计 例例3 分解压缩式分解压缩式BCD码码,使其成为非压缩式使其成为非压缩式BCD码。码。 ORG 0000H MOV R0,#40H;设指针;设指针 MOV A,R0 ;取一个字节;取一个字节 MOV R2,A;暂存;暂存 ANL A,#0FH

18、;清;清0高半字节高半字节 INC R0 MOV R0,A ;保存数据个位;保存数据个位 片内片内RAM 42H 41H 40H 65 MOV A,R2 SWAP A ;十位换到低半字节;十位换到低半字节 ANL A,#0FH INC R0 MOV R0,A ;保存数据十位;保存数据十位 END 0505 0606 单片机原理及应用程序设计 地址数据 TAB0 TAB+1 1 TAB+2 4 TAB+3 9 TAB+4 16H TAB+5 25H 例例5 设变量放在片内设变量放在片内RAM的的20H单元单元,其值为其值为00H05H之间之间, 要求编要求编 查表程序查表程序,查出变量的平方值查

19、出变量的平方值, 并放入片内并放入片内RAM的的21H单元。单元。 ORG 0000H MOV DPTR,#TAB MOV A,20H MOVC A,A+DPTR ;查表查表 MOV 21H,A SJMP $ TAB2: DB 00H,01H,04H,09H,16H,25H END 分析分析 :在程序存储器安排一张平方表,首地址为:在程序存储器安排一张平方表,首地址为TAB,以,以DPTR指指 向表首址,向表首址,A存放变量值,利用查表指令存放变量值,利用查表指令MOVC A,A+DPTR, 即可求得。即可求得。 表中数据用表中数据用BCD码存放合乎人们的习惯码存放合乎人们的习惯. 如果平方值

20、为两个字节,程序应如何编。如果平方值为两个字节,程序应如何编。 DPTRA 单片机原理及应用程序设计 ORG 0000H ORG 0000H MOV A,R2 JNB ACC.7,N ;为正数?;为正数? CPL A ;负数变补;负数变补 INC A MOV R2,A N: SJMP $ ;结束;结束 分支程序的设计分支程序的设计 由条件转移指令构成程序判断框部分由条件转移指令构成程序判断框部分,形成分支结构形成分支结构 单分支程序单分支程序 一个判断决策框,两种分支结构图。一个判断决策框,两种分支结构图。 条件满足条件满足? N 影响条件影响条件 Y 处理段处理段 条件满足条件满足? N 影

21、响条件影响条件 Y 处理处理1处理处理2 例例1 1 求求8 8位有符号数的绝对值。位有符号数的绝对值。 方法:正数不变,负数变补方法:正数不变,负数变补 单片机原理及应用程序设计 双分支程序双分支程序 【例例2】 符号函数符号函数Y= 设设X存放在内部存放在内部RAM 35H单元单元,结果存放在结果存放在36H单元单元 ORG 2000H START:MOV A,35H ;AX JZ LP2 ;X=0转移转移 JNB ACC.7,LPl ;X0转移转移 MOV A,# 0FFH ;X0则则Y=1 LP2: MOV 36H,A ;36Y END 1(X0) 0(X=0) -1(X0) 单片机原

22、理及应用程序设计 习题:习题: 设变量设变量 x x 以补码的形式存放在片内以补码的形式存放在片内RAMRAM的的30H30H单单 元,变量元,变量 y y 与与 x x 的关系是:当的关系是:当 x x 大于大于0 0时,时,y =xy =x;当;当 x x =0=0时,时,y =20Hy =20H;当;当 x x 小于小于0 0时,时,y =x+5y =x+5。编制程序,根据。编制程序,根据 x x 的大小求的大小求y y并送回原单元。并送回原单元。 STARTSTART:MOV AMOV A,30H 30H JZ NEXT JZ NEXT ANL A ANL A,#80H #80H ;判

23、断符号位;判断符号位 JZ LP JZ LP MOV A MOV A,#05H #05H ADD A ADD A,30H 30H MOV 30H MOV 30H,A A SJMP LP SJMP LP NEXT NEXT:MOV 30HMOV 30H,#20H#20H LP LP:SJMP $ SJMP $ 单片机原理及应用程序设计 多分支散转程序的设计多分支散转程序的设计 有一类分支程序有一类分支程序,它根据不同的输入条件或它根据不同的输入条件或 不同的运算结果不同的运算结果,转向不同的处理程序转向不同的处理程序,称之为散称之为散 转程序。这类程序通常利用转程序。这类程序通常利用JMP A+

24、DPTR间间 接转移指令实现转移。有如下两种设计方法:接转移指令实现转移。有如下两种设计方法: 1. 查转移地址表查转移地址表: 将将转移地址转移地址列成表格,将表格的内容作转移列成表格,将表格的内容作转移 的目标地址。的目标地址。 2. 查转移指令表查转移指令表: 将转移到不同程序的将转移到不同程序的转移指令转移指令列成表格,列成表格, 判断条件后查表,转到表中指令执行判断条件后查表,转到表中指令执行,下面用两下面用两 个例子说明。个例子说明。 单片机原理及应用程序设计 1. 利用转移地址表实现转移利用转移地址表实现转移 例例3 根据根据R3的内容转向对应的程序,的内容转向对应的程序,R3的

25、内容为的内容为0n,处处 理程序的入口符号地址分别为理程序的入口符号地址分别为PR0PRn (n128)。 分析:将分析:将PR0PRn入口地址列在表格中,每一项占两个入口地址列在表格中,每一项占两个 单元,单元,PRn在表中的偏移量为在表中的偏移量为2n,因此将,因此将R3的内容乘的内容乘2 即得即得PRn在表中的偏移地址,从偏移地址在表中的偏移地址,从偏移地址2n和和2n+1两个两个 单元分别取出单元分别取出PRn的高八位地址和低八位地址送的高八位地址和低八位地址送DPTR 寄存器,用寄存器,用JMP A+DPTR指令(指令(A先清零)即转移到先清零)即转移到 PRn入口执行。入口执行。

26、这里设这里设PR0-PRn地址地址 PR0 EQU 0110H ;用伪指令定义用伪指令定义PRn的具体地址的具体地址 PR1 EQU 0220H PR2 EQU 0330H 单片机原理及应用程序设计ORG 0000H MOV A,R3 ;R3A ADD A,ACC ;A*2 MOV DPTR,#TAB PUSH ACC MOVC A,A+DPTR ;取地址表中高字节取地址表中高字节 MOV B,A ;暂存于暂存于B INC DPL POP ACC MOVC A,A+DPTR ;取地址表中低字节取地址表中低字节 MOV DPL,A MOV DPH,B ;DPTR为表中地址为表中地址 CLR A

27、;A=0 JMP A+DPTR ;转移转移 TAB:DW PR0,PR1,PR2,.,PRn ;转移地址表转移地址表 END 01 10 02 20 . TAB TAB+2 DPH DPL 例如例如 R3=1的操作的操作 0220 单片机原理及应用程序设计 2. 利用转移指令表实现转移利用转移指令表实现转移 例例4 设有五个按键设有五个按键 0、1、2、3、4其编码分别为其编码分别为3AH、47H、 65H、70H、8BH,要求根据按下的键转向不同的处理程序,分,要求根据按下的键转向不同的处理程序,分 别为别为PR0 、PR1 、PR2、PR3、PR4,设按键的编码已在,设按键的编码已在B寄存

28、寄存 器中,编出程序。器中,编出程序。 分析分析: 将键码排成表,将键码表中的值和将键码排成表,将键码表中的值和B中的键编码比对,记中的键编码比对,记 下在键码表中和下在键码表中和B中的键编码相等的序号,另安排一个转移表中的键编码相等的序号,另安排一个转移表,安安 排排AJMP指令指令(机器码机器码),因每条,因每条AJMP指令占二字节,将刚才记指令占二字节,将刚才记 下的序号乘下的序号乘2即为转移表的偏移地址,利用即为转移表的偏移地址,利用JMP A+DPTR执行执行 表内的表内的AJMP指令,从而实现多分支转移,指令,从而实现多分支转移, 设设JPT的地址为的地址为001AH、PR0入口地

29、址为入口地址为0110H 单片机原理及应用程序设计 AJMP PR0的机器码为的机器码为2110H, PR1入口地址为入口地址为 0220H AJMP PR1的机器码为的机器码为4120H,转移指令表转移指令表JPT 的内容如下所示。设的内容如下所示。设B=65H,键值为键值为2: 20 41JPT+4 20 02JPT+2 10 21JPT AJMP PR0 AJMP PR1 AJMP PR2 TAB3AH TAB+147H TAB+265H TAB+370H 转移指令表转移指令表JPT 键码表键码表TAB 65H A 2 B 2A A=1 A=2 A=065H 65H 单片机原理及应用程序

30、设计 ORG 0000H MOV DPTR,#TAB ;置键码表首址置键码表首址 MOV A,#0 ;表的起始位的偏移量为表的起始位的偏移量为0 NEXT: PUSH ACC MOVC A,A+DPTR ;A=键码表的编码键码表的编码 CJNE A,B,AGAN ;将将B中值和键码表的值比较中值和键码表的值比较 POP ACC RL A ;如相等如相等,序号乘序号乘2得分支表内偏移量得分支表内偏移量 MOV DPTR,#JPT ;置分支表首址置分支表首址 JMP A+DPTR AGAN: POP ACC ;不相等比较下一个不相等比较下一个 INC A ;序号加序号加1 CJNE A,#5,NE

31、XT SJMP $ ;键码查完还没有键码查完还没有B中按键编码程序结束中按键编码程序结束 单片机原理及应用程序设计 JPT: AJMP PR0 ;分支转移表分支转移表 AJMP PR1 AJMP PR2 AJMP PR3 AJMP PR4 TAB: DB 3AH,47H,65H,70H,8BH ;键码表键码表 END 单片机原理及应用程序设计 当程序中的某些指令需要反复执行多次时,采用当程序中的某些指令需要反复执行多次时,采用 循环程序的方式,这样会使程序缩短,节省存储单元循环程序的方式,这样会使程序缩短,节省存储单元 (并不节省执行时间)。(并不节省执行时间)。 循环次数的控制,有两种控制方

32、式循环次数的控制,有两种控制方式: 第一种方法第一种方法 先判断再处理即先判断满不满足循环条件,如不满足,先判断再处理即先判断满不满足循环条件,如不满足, 就不循环,多以循环条件控制。就不循环,多以循环条件控制。 第二种方法第二种方法 先处理再判断,即循环执行一遍后,下一轮还需不需先处理再判断,即循环执行一遍后,下一轮还需不需 要进行,多以计循环次数控制。循环可以有单重循环要进行,多以计循环次数控制。循环可以有单重循环 和多重循环,在多重循环中,内外循环不能交叉,也和多重循环,在多重循环中,内外循环不能交叉,也 不允许外循环跳入内循环。下面通过几个实例说明循不允许外循环跳入内循环。下面通过几个

33、实例说明循 环程序的设计方法。环程序的设计方法。 循循 环环 程程 序序 设设 计计 单片机原理及应用程序设计 例例 5 设计一个延时设计一个延时10ms的延时子程序,已知单片的延时子程序,已知单片 机使用的晶振为机使用的晶振为6MHz。 分析分析 延时时间与两个因素有关延时时间与两个因素有关:晶振频率和循环晶振频率和循环 次数。由于晶振采用次数。由于晶振采用6MHz,一个机器周期是,一个机器周期是2s, 用单循环可以实现用单循环可以实现1ms延时,外循环延时,外循环10次即可达次即可达 10ms延时。延时。 内循环如何实现内循环如何实现1ms延时呢,程序中可先以延时呢,程序中可先以 未知数未

34、知数MT代替,从附录中查每条指令机器周期代替,从附录中查每条指令机器周期 计算程序的执行时间。计算程序的执行时间。 单片机原理及应用程序设计 ORG 0020H MOV R0,#0AH ;外循环;外循环10次次 DL2: MOV R1,#MT ;内循环;内循环MT次次 DL1: NOP NOP ;空操作指令;空操作指令 DJNZ R1,DL1 DJNZ R0,DL2 RET 1 1 1 1 2 2 2 内循环内循环DL1到指令到指令DJNZ R1,DL1的计算:的计算: (1+1+2)2SMT=1000S MT=125=7DH 将将7DH代入上面程序的代入上面程序的MT,计算总的延时时间:,计

35、算总的延时时间: 1+1+(1+1+2)125+2 10+22S =10066S=10.066mS 若需要延时更长时间,可以采用多重循环。若需要延时更长时间,可以采用多重循环。 机器周期数机器周期数 内内 外外 单片机原理及应用程序设计 练习:练习:分析下面延时程序的执行时间分析下面延时程序的执行时间 DELAY: MOV R1,#01H;1 DL2:MOV R2,#18H;1 DL1:NOP ;1 NOP ;1 DJNZ R2,DL1;2 DJNZ R1,DL2;2 RET ;2 解:程序执行的时间为: 1+1+(1+1+2)*24+2*10+2=993个机器周期 采用12MHZ晶振,则执行

36、时间为993us,存在7us的误差。 单片机原理及应用程序设计 例例6 传送数据块程序传送数据块程序 设在以设在以M为起始单元的为起始单元的 内部内部RAM 中存放着中存放着100 个单字节数,编程把这个单字节数,编程把这 100个数传送到以个数传送到以N为起为起 始地址的外部始地址的外部RAM 中。中。 单片机原理及应用程序设计 ORG 2000H START:MOV R0,# M MOV R1,# N MOV R2,#64H LP: MOV A,R0 ;A= (R0) MOVX R1,A ;(R1)=A INC R0 INC R1 DJNZ R2,LP ;(R2)不等于不等于10则转移则转

37、移 END 单片机原理及应用程序设计 MCS-51单片机有着优异的位逻辑功能单片机有着优异的位逻辑功能, 可以方便的实现各种复杂的逻辑运算。这种可以方便的实现各种复杂的逻辑运算。这种 用软件替代硬件的方法用软件替代硬件的方法,可以大大简化甚至完可以大大简化甚至完 全不用硬件全不用硬件,但比硬件要多花运算时间。但比硬件要多花运算时间。 例例7 编写一程序编写一程序,以实现图中的逻辑运算电路以实现图中的逻辑运算电路. 6 位操作程序设计位操作程序设计 单片机原理及应用程序设计 P1.3 1 1 X0X1X2 MOV C,X0 ANL C,/X1 MOV 01H,C ;X0X1 ANL C,/X2

38、ORL C,00H MOV 00H,C MOV C,X2 ANL C,01H ANL C,X3 ;X0X1X2X3 ORL C,/00H MOV 00H,C MOV C,X7 ANL C,/X6 ANL C,/X5 ANL C,/X4 ; X4 X5 X6 X7 ORL C,00H ; 最终结果最终结果 YC SJMP $ 单片机原理及应用程序设计 7 子程序的设计及调用子程序的设计及调用 一、子程序的概念一、子程序的概念 把能完成某种基本操作并具有相同操作的程序段单独把能完成某种基本操作并具有相同操作的程序段单独 编成子程序。编成子程序。如:函数、如:函数、 运算、代码转换、延时等运算、代码

39、转换、延时等 利用调用子程序指令(利用调用子程序指令(ACALL或或LCALL)和从子程序返)和从子程序返 回指令回指令RET 使用子程序的优点使用子程序的优点 不必重复书写同样的程序,提高编程效率不必重复书写同样的程序,提高编程效率 程序的逻辑结构简单,便于阅读程序的逻辑结构简单,便于阅读 缩短了源程序和目标程序的长度,节省了存储器空间缩短了源程序和目标程序的长度,节省了存储器空间 使程序模块化、通用化、便于交流共享资源使程序模块化、通用化、便于交流共享资源 便于按某种功能调试便于按某种功能调试 单片机原理及应用程序设计 二、调用子程序的要点二、调用子程序的要点 子程序开头的标号段必须有一个

40、标志,该子程序开头的标号段必须有一个标志,该标志标志既是子程序既是子程序 的的名字名字又是其又是其入口地址入口地址,以便主程序调用。,以便主程序调用。 在主程序中利用指令在主程序中利用指令ACALL或或LCALL可转入子程序。可转入子程序。 该指令具有保护该指令具有保护断点断点的功能的功能 例如:调用延时子程序例如:调用延时子程序 LCALL(ACALL) DELY 子程序结尾必须使用一条从子程序返回指令子程序结尾必须使用一条从子程序返回指令RET, 它具有恢复断点的功能它具有恢复断点的功能 LCALL addr16LCALL addr16 ; PC addr16 ; PC addr16 转向

41、子程序转向子程序 ;(PC(PC) (PCPC)+3+3 ;SP (SP)+1SP (SP)+1,(SP),(SP) PC7 PC70 0 ;SP (SP)+1,(SP) SP (SP)+1,(SP) PC15PC158 8 ;在调用子程序之前,保护;在调用子程序之前,保护断点地址断点地址 RETRET ; PC15PC158 (SP) ,8 (SP) ,(SPSP) (SPSP) -1-1 ; PC7PC70 (SP) ,0 (SP) ,(SPSP) (SPSP) -1-1 主程序主程序 CALL断点断点 子程序子程序 RET 1、子程序的结构、子程序的结构 单片机原理及应用程序设计 2、参

42、数传递、参数传递 子程序入口条件:子程序入口条件: 在调用一个子程序时,主程序应先把有关参数放到在调用一个子程序时,主程序应先把有关参数放到 某些约定的位置,子程序运行时,可以从约定的位置得某些约定的位置,子程序运行时,可以从约定的位置得 到有关参数。到有关参数。 子程序出口条件:子程序出口条件: 子程序结束前,也应把处理结果送到约定位置子程序结束前,也应把处理结果送到约定位置 参数传递的方法:参数传递的方法: 子程序无须传递参数子程序无须传递参数 这类子程序中所需要的参数是子程序赋予,这类子程序中所需要的参数是子程序赋予, 不需要主程序给出不需要主程序给出 单片机原理及应用程序设计 主程序:

43、主程序: . . . LCALL DELY . . . 子程序:子程序: 不需主程序提供入口参数,从子程序开始到子程序返回,大约不需主程序提供入口参数,从子程序开始到子程序返回,大约 为为20ms 例例 调用延时子程序调用延时子程序DELY DELY: MOV R7, #100 DLY0: MOV R6, #98 NOP DLY1: DJNZ R6, DLY1 DJNZ R7, DLY0 RET 子程序开始的标号子程序开始的标号 子程序返回指令子程序返回指令 调用子程序调用子程序 982=196s 1s 1s 设:主频为设:主频为12MHZ 2s (196+2+2) 100 +3 =20003

44、s = 20.003ms 2s 1s +3 单片机原理及应用程序设计 用用累加器累加器和和工作寄存器工作寄存器传递参数传递参数 入口参数:入口参数:放在累加器放在累加器A和工作寄存器中和工作寄存器中R0 R7中中 出口参数:出口参数:放在累加器 放在累加器A和工作寄存器中和工作寄存器中R0 R7中中 例例 双字节求补子程序双字节求补子程序CPLD 解:解:采用采用“变反加变反加1”的方法,十六位数变反加的方法,十六位数变反加1, 不仅低字节要加不仅低字节要加1,高字节要加低字节的进位。,高字节要加低字节的进位。 故采用故采用ADD指令,不采用指令,不采用INC指令。指令。 INC指令不影响指令

45、不影响CY位位 单片机原理及应用程序设计 入口参数:(入口参数:(R7R6)=16位数位数 出口参数:(出口参数:(R7R6)=求补后的求补后的16位数位数 CPLD: MOV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A ADDC A,#0 MOV R7,A RET Cy + Cy R7R6 R7R6 单片机原理及应用程序设计 R0 R0 R0 通过操作数通过操作数地址地址传递参数传递参数 入口参数:(入口参数:(R0)=求补数低字节指针求补数低字节指针,(R7)=n-1 出口参数:(出口参数:(R0)=求补后高字节指针求补后高字节指针 例例 n字节

46、求补子程序字节求补子程序CPLN CPLN: MOV A,R0 CPL A ADD A,#1 MOV R0,A MOV A,R0 CPL A ADDC A,#0 MOV R0,A RET NEXT: INC R0 DJNZ R7, NEXT 内部内部 RAM 字节字节1 字节字节2 字节字节3 字节字节n R0 R0 地址 单片机原理及应用程序设计 通过通过堆栈堆栈传递参数传递参数 例例 在在HEX单元存放两个十六进制数,将它们分别单元存放两个十六进制数,将它们分别 转换成转换成ASCII码并存入码并存入ASC和和ASC+1单元单元 解:解: 由于要进行两次转换,故可调用查表子程序完成由于要进

47、行两次转换,故可调用查表子程序完成 MAIN: . . . PUSH HEX LCALL HASC POP ASC MOV A, HEX SWAP A PUSH ACC LCALL HASC POP ASC+1 . . . ;转子转子 ;压入压入 被转换数被转换数 ;ASCLASC ;取被转换数取被转换数 ;处理高四位处理高四位 ;压入压入 ;转子程序转子程序 ;ASCASC+1 主程序主程序 *PCH *PCL HEX SP SP+1 SP+2 SP+3 栈底栈底 *PC 断点地址断点地址 单片机原理及应用程序设计 MOVC A,A+PC HASC: DEC SP DEC SP POP AC

48、C ANL A,#0FH ADD A,#5 PUSH ACC INC SP INC SP RET ASCTAB: DB 0 1 2 7 DB 8 9 A F ;弹出弹出 ;修改修改SP指向指向HEX ;屏蔽高四位屏蔽高四位 ;变址调整变址调整 ;查表查表 ;结果入栈结果入栈 ;修改修改SP指向断点位置指向断点位置 ; ; ; 子程序子程序 *PCH *PCL HEX SP SP+1 SP+2 SP+3 栈底栈底 A HEX Result Result SP+1 SP+2 SP+3 PC 单片机原理及应用程序设计 HEX SP SP SP SP . . . PUSH HEX LCALL HASC

49、 POP ASC MOV A, HEX SWAP A PUSH ACC LCALL HASC POP ASC+1 . . . MOVC A,A+PC HASC: DEC SP DEC SP POP ACC ANL A,#0FH ADD A,#5 PUSH ACC INC SP INC SP RET ASCTAB: DB 0 1 2 7 DB 8 9 A F 60H 61H 62H 63H 64H HEX *PCL *PCH PC 断点断点 SP 0000 HEXL ASC A ASC SP SP SP SP 主程序主程序 子程序子程序 单片机原理及应用程序设计 3、现场保护、现场保护 如果子程

50、序使用的寄存器与主程序使用的寄存器如果子程序使用的寄存器与主程序使用的寄存器 有冲突,在转入子程序前,特别是进行中断服务有冲突,在转入子程序前,特别是进行中断服务 子程序时,要进行现场保护。子程序时,要进行现场保护。 主程序使用的内部主程序使用的内部 RAM 内容,各工作寄存器内容,内容,各工作寄存器内容, 累加器累加器 A 和和 DPTR 以及以及 PSW 等寄存器内容。等寄存器内容。 将要保护的单元压入堆栈。将要保护的单元压入堆栈。 中断保护时中断保护时:还可以用还可以用 RS1 RS0 来选择其他通用寄存器组,来选择其他通用寄存器组, 以便保护主程序现场。以便保护主程序现场。 R0 R7

51、 单片机原理及应用程序设计 例如:子程序的现场保护例如:子程序的现场保护 BCDCB: PUSH ACC PUSH PSW PUSH DPL PUSH DPH . . . POP DPH POP DPL POP PSW POP ACC RET 推入与弹出应按照推入与弹出应按照“先进后出先进后出”,或,或“后进先出后进先出”的顺的顺 序序 ; ; 保护现场保护现场 ; ; 程序功能程序功能 ; ; 恢复现场恢复现场 ; ; ; 单片机原理及应用程序设计 三、子程序的调用及嵌套三、子程序的调用及嵌套 1、子程序的调用、子程序的调用 将内部将内部RAM41H43H中内容左移中内容左移4位,移出部分送

52、位,移出部分送 40H单元单元 由于多字节移位是程序设计中经常用到的,有一定的由于多字节移位是程序设计中经常用到的,有一定的 普遍性。为了程序设计的灵活性,我们编一个普遍性。为了程序设计的灵活性,我们编一个“n字字 节节 左移一位左移一位”子程序,反复调用子程序,反复调用4次即为次即为n字节左移字节左移4位。位。 (R0)指向内部)指向内部RAM的操作数地址,高字节在先的操作数地址,高字节在先 (R4)= 字节长度字节长度 (R0)指向内部)指向内部RAM的结果地址,低字节在先的结果地址,低字节在先 单片机原理及应用程序设计 RLC4: MOV R7, #4 MOV A, R0 ANL A,

53、#0FH MOV R0, A RET 主程序:主程序: ;为进入子程序设置入口条件为进入子程序设置入口条件 ;R7为左移位数计数器为左移位数计数器 ; ;转子程序转子程序 ;未完,继续未完,继续 ; ;存结果高四位存结果高四位 ;屏蔽高四位结果屏蔽高四位结果 单片机原理及应用程序设计 子程序:子程序: RLC1: CLR C MOV A, R0 RLC A MOV R0, A RET R0 CYCYA A 40H41H42H43H A37A30A27A20A17A10A07A00 A37 A3000A37A36 A36 0 R0 A26 A37A16 A27A06 A27 单片机原理及应用程序

54、设计 例:例: 用程序实现用程序实现c=ac=a2 2+b+b2 2,设,设a,ba,b均小于均小于1010。a a存存 放在放在31H31H单元,单元,b b存放在存放在32H32H单元,把单元,把c c存入存入34H34H和和 33H33H单元。(和要求为单元。(和要求为BCDBCD码)。码)。 解:因该算式两次用到平方值,所以在程解:因该算式两次用到平方值,所以在程 序中采用把求平方编为子程序的方法。求平方序中采用把求平方编为子程序的方法。求平方 采用查表法采用查表法, ,主程序和子程序编写如下:主程序和子程序编写如下: 单片机原理及应用程序设计 主程序:主程序: ORG 0000H M

55、OV SP,#3FH MOV A,31H ;取;取a LCALL SQR ;求求a方方 MOV R1,A MOV A,32H ;取;取b LCALL SQR ; 求求b方方 ADD A,R1 ; 求和求和 DA A ;调整;调整 MOV 33H,A MOV A,#0 ADDC A,0 MOV 34H,A SJMP $ 子程序:子程序: ORG 0030H SQR:INC A MOVC A,A+PC RET TAB: DB 00H,01H,04H DB 09H 16H,25H, DB 36H,49H64H,81H END 单片机原理及应用程序设计 2、子程序的嵌套、子程序的嵌套 子程序中可调用其他子程序子程序中可调用其他子程序 数据处理程序如下数据处理程序如下 . . . MAIN: MOV SP, #5F ACALL RLC4 . . . ;定义堆栈指针定义堆栈指针 ;处理过程处理过程 ;调用子程序调用子程序 ; 单片机原理及应用程序设计 多重嵌套的过程多重嵌套的过程 SP SP *PC0L *PC0H *PC1L *PC1H 5FH 60H 61H 62H 63H 64H 65H *PC2H *PC2L 断点入栈断点入栈 断点入栈断点入栈 SP SP 断点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论