《(高职)任务 14 汇编语言程序设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《(高职)任务 14 汇编语言程序设计ppt课件.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、任务 14 汇编语言程序设计 程序设计是主要程序设计是主要包括顺序结构,分支包括顺序结构,分支结构,循环结构等不结构,循环结构等不同结构的程序的特点同结构的程序的特点与设计方法,是单片与设计方法,是单片机软件系统开发的基机软件系统开发的基础。础。任务任务14 程序设计程序设计 MCS-51单片机汇编语言的伪指令单片机汇编语言的伪指令伪指令又称汇编程序控制译码指令,属说明性汇编指令。伪指令又称汇编程序控制译码指令,属说明性汇编指令。“伪伪”字体现在汇编时不产生机器指令代码,不影响程序的字体现在汇编时不产生机器指令代码,不影响程序的执行,仅产生供汇编时用的某些命令,在汇编时执行某些执行,仅产生供汇
2、编时用的某些命令,在汇编时执行某些特殊操作。特殊操作。MCS-51MCS-51单片机汇编语言程序设计中,常用的伪指令单片机汇编语言程序设计中,常用的伪指令( (七七条条) ): ORGORG定位伪指令定位伪指令 ENDEND结束汇编伪指令结束汇编伪指令 EQUEQU赋值伪指令赋值伪指令 DBDB定义字节指令定义字节指令 DWDW定义数据字指令定义数据字指令 BIT BIT位定义指令位定义指令1 1、起始地址伪指令、起始地址伪指令 ORGORG ORG addr16ORG addr16 用于规定目标程序段或数据块的起始地址,用于规定目标程序段或数据块的起始地址, 设置在设置在程序开始处。程序开始
3、处。 例:例: Org 0000hOrg 0000h ljmp main ljmp main org 0100h org 0100h main: main: . .2 2、汇编结束伪指令、汇编结束伪指令 ENDEND 告诉汇编程序,对源程序的汇编到此结束。告诉汇编程序,对源程序的汇编到此结束。 一个程序中只出现一一个程序中只出现一 次,在程序的最末尾。次,在程序的最末尾。 例:例: end end 3 3、赋值伪指令、赋值伪指令 EQUEQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。标号。 格式:格式: 标号名称标号名称 EQU EQU
4、 数值或汇编符号数值或汇编符号 “标号名称标号名称”在源程序中可以作数值使用,也可以作在源程序中可以作数值使用,也可以作数据地址、位地址使用。数据地址、位地址使用。 先定义后使用,放在程序开头。先定义后使用,放在程序开头。例:例: led_lamp equ p1.0 counter equ 100 display_addr equ 2000h . mov r0, #counter mov dptr, #display_addr mov c, led_lamp4.4.定义字节数据伪指令定义字节数据伪指令 DBDB格式:格式: 标号:标号: DB DB 字节数据表字节数据表功能:字节数据表可以是多
5、个字节数据、字符功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。依次存放在指定地址单元。例:例:ORG 2000H DB 54HTAB: DB 0B7H, 34H, 96HSTR: DB 6AB54H0B7H34H96H36H41H42H2000H2001H2002H2003H2004H2005H2006H二:单片机汇编语言程序主要的几种程序设计方法二:单片机汇编语言程序主要的几种程序设计方法 顺序程序顺序程序:顺序程序是最简单、最基本的程序结构,顺序程序是最简单、最基本的程序结构,其特
6、点是按指令的排列顺序一条条地执行,直到全部指令其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。执行完毕为止。 分支程序分支程序:分支程序是通过转移指令对相应条件的判分支程序是通过转移指令对相应条件的判断实现改变程序的执行方向的设计方法。断实现改变程序的执行方向的设计方法。 循环程序循环程序:在程序中需要反复的执行的程序段,为了在程序中需要反复的执行的程序段,为了避免在程序中多次的编写,可以通过利用条件转移或无条避免在程序中多次的编写,可以通过利用条件转移或无条件转移指令来控制程序的执行。件转移指令来控制程序的执行。流程图流程图 分结构程序通过转移指令实现,根据程序执行中的条分结
7、构程序通过转移指令实现,根据程序执行中的条件对程序进行判断,满足条件,则进行程序转移,不满足件对程序进行判断,满足条件,则进行程序转移,不满足条件就顺序执行。指令有条件就顺序执行。指令有JZ JZ ,JNZJNZ,JCJC,JNCJNC,JBJB,JNBJNB,JBCJBC,CJNECJNE,DJNZDJNZ分支结构程序分支结构程序条件成立?条件成立?程序段程序段下条下条指令指令NY程序段1条件成立?条件成立?程序段程序段2NY单分支结构单分支结构双分支结构双分支结构例例: :假设内部假设内部RAM40HRAM40H与与41H41H单元中有两个无符号数,现要单元中有两个无符号数,现要求将其中最
8、大者存入求将其中最大者存入40H40H,小者存入,小者存入41H41H,流程图如下:,流程图如下:MOV A,40HCLR CSUBB A,41HJNC WAITMOV A,40HXCH A,41HMOV 40H,AWAIT:SJMP WAIT开始(40H) A,CY清零A-(41H)0两单元内容交换结束YN循环结构程序循环结构程序 程序设计中,经常需要连续重复执行某段程序,程序设计中,经常需要连续重复执行某段程序,解决这种问题最好采用循环结构的程序来完成,这种解决这种问题最好采用循环结构的程序来完成,这种设计方法可大大地简化程序。循环一般有四个部分设计方法可大大地简化程序。循环一般有四个部分
9、(1 1)置循环初值)置循环初值(2 2)循环体)循环体(3 3)修改循环)修改循环(4 4)循环控制部分)循环控制部分置初值 循环体循环控制退出循环 循环修改NY置初值循环控制 循环体 循环修改退出循环完未完 先执行再判断先执行再判断 C语言中的语言中的for ,while语句语句 判断再执行判断再执行 do while语句语句 例例4.44.4设计一段程序,统计累加器设计一段程序,统计累加器A A的的8 8位数中位数中1 1的个数,把的个数,把结果存入结果存入30H30H单元中。单元中。(30H)=00HR2 08H(置初值) RLC ACY=0?继续 30H (30H)+1CY=0? M
10、OV 30H,#00H MOV R2, #08HLOOP:RLC A JNC NEXT INC 30HNEXT:DJNZ R2,LOOP三、延时程序三、延时程序 延时程序就是通过重复执行一些指令来达到延时的目延时程序就是通过重复执行一些指令来达到延时的目的,例如机器周期为的,例如机器周期为1 uS1 uS时,重复执行单机器周期指令时,重复执行单机器周期指令100100次可以延时次可以延时100us ,100us ,重复执行重复执行10001000次就是次就是1ms1ms。延时程。延时程序的一般格式如下所示:一般采用传输指令循环指令写成序的一般格式如下所示:一般采用传输指令循环指令写成单循环或多
11、循环的语句,实现不同的延时时间。单循环或多循环的语句,实现不同的延时时间。 DELAY: MOV R1,#50 ; 执行一次执行一次 1个机器周期个机器周期 DEL0: MOV R2 , #100 ; 执行一次执行一次 1个机器周期个机器周期 DEL1: MOV R3 , #200 ; 执行一次执行一次1个机器周期个机器周期 DJNZ, R3, $ ; 执行一次执行一次2个机器周期个机器周期 DJNZ R2, DEL1 ; 执行一次执行一次2个机器周期个机器周期 DJNZ R1 , DEL0 ; 执行一次执行一次2个机器周期个机器周期 RET ; 执行一次执行一次2个机器周期个机器周期 在程序
12、中在程序中MOVMOV指令是单机器周期指令,执行一次需要指令是单机器周期指令,执行一次需要一个机器周期,一个机器周期,DJNZDJNZ,RETRET是双机器周器指令,执行一次是双机器周器指令,执行一次需要两个机机器周期,因为该段延时程序执行完需要的需要两个机机器周期,因为该段延时程序执行完需要的总的时间为:总的时间为: T=(2*data3+3)*+3data2+3data1+3机器周期机器周期例例 已知单片机的晶振频率已知单片机的晶振频率fosc=12MHZ,fosc=12MHZ,试计算下面程序试计算下面程序需要多少时间?需要多少时间? DLY:MOV R2,#data LOOP: NOP
13、DJNZ R2,LOOP RET T= (2+1)data+1+2*1uS子程序子程序(1 1)子程序的概念)子程序的概念 在程序设计当中,经常有一些程序段实频繁在程序设计当中,经常有一些程序段实频繁使用,如数学函数的计算,延时程序,显示程序等,使用,如数学函数的计算,延时程序,显示程序等,为了避免重复,节省内存,常把这些程序作为一种独为了避免重复,节省内存,常把这些程序作为一种独立的,标准化的通用程序段,供需要时调用,这些独立的,标准化的通用程序段,供需要时调用,这些独立的程序段称为子程序。立的程序段称为子程序。子程序调用子程序调用主主程程序序子子程程序序返回返回主主程程序序(2 2)子程序
14、设计几点注意)子程序设计几点注意 子程序的第一条指令地址为子程序的入口地址,子程序的第一条指令地址为子程序的入口地址,该指令前必须标号该指令前必须标号 主程序调用子程序通过主程序调用子程序通过LCALL LCALL ,ACALLACALL指令来完成。指令来完成。子程序返回主程序通过执行子程序返回主程序通过执行RETRET指令来完成。指令来完成。 子程序可以存放在程序存储器中的任何地方。子程序可以存放在程序存储器中的任何地方。 子程序开始部分要注意保护现场,退出子程序之子程序开始部分要注意保护现场,退出子程序之前要恢复现场。前要恢复现场。(3 3)子程序参数传递)子程序参数传递 用工作寄存器或累加器传递参数。用工作寄存器或累加器传递参数。 用指针寄存器传递参数用指针寄存器传递参数 用堆栈传递参数。用堆栈传递参数。应用实例应用实例:流程图流程图程序设计程序设计 ORG 0000H LJMP START ORG 0030H START: MOV SP,#60H MOV A,#0FEH LOOP: MOV P1,A LCALL DELAY RL A SJMP LOOP DELAY: MOV R5,#50 MOV R6,#100 MOV R7,#200 DJNZ R7,$ DJNZ R6, D1 DJNZ R5, D2 RET END