第3章程序设计课件

上传人:无*** 文档编号:241639167 上传时间:2024-07-12 格式:PPTX 页数:36 大小:2.85MB
返回 下载 相关 举报
第3章程序设计课件_第1页
第1页 / 共36页
第3章程序设计课件_第2页
第2页 / 共36页
第3章程序设计课件_第3页
第3页 / 共36页
点击查看更多>>
资源描述
(第(第5版)版)第三章第三章 汇编语言程序设计汇编语言程序设计李群芳主编李群芳主编第第3章章汇编语言程序设计汇编语言程序设计3.1概述概述无论哪种嵌入式系统,都有两种编程语言无论哪种嵌入式系统,都有两种编程语言无论哪种嵌入式系统,都有两种编程语言无论哪种嵌入式系统,都有两种编程语言-汇汇汇汇编语言和高级语言(主要是编语言和高级语言(主要是编语言和高级语言(主要是编语言和高级语言(主要是 C C语言)。语言)。语言)。语言)。汇编语言产生的目标程序简短,占用存储空间小,汇编语言产生的目标程序简短,占用存储空间小,汇编语言产生的目标程序简短,占用存储空间小,汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。执行快,能充分发挥计算机的硬件功能。执行快,能充分发挥计算机的硬件功能。执行快,能充分发挥计算机的硬件功能。高级语言编程快捷,但程序长,占用存储空间大,高级语言编程快捷,但程序长,占用存储空间大,高级语言编程快捷,但程序长,占用存储空间大,高级语言编程快捷,但程序长,占用存储空间大,执行的实时较差;为发挥各自的优势,在复杂的执行的实时较差;为发挥各自的优势,在复杂的执行的实时较差;为发挥各自的优势,在复杂的执行的实时较差;为发挥各自的优势,在复杂的嵌入式系统中,往往实时控制部分采用汇编语言,而嵌入式系统中,往往实时控制部分采用汇编语言,而嵌入式系统中,往往实时控制部分采用汇编语言,而嵌入式系统中,往往实时控制部分采用汇编语言,而数据的运算和处理部分采用数据的运算和处理部分采用数据的运算和处理部分采用数据的运算和处理部分采用C C语言。语言。语言。语言。因此对于嵌入因此对于嵌入因此对于嵌入因此对于嵌入式系统的工程师而言,两种语言都必须掌握。式系统的工程师而言,两种语言都必须掌握。式系统的工程师而言,两种语言都必须掌握。式系统的工程师而言,两种语言都必须掌握。无论是高级语言还是汇编语言,源程序都要转无论是高级语言还是汇编语言,源程序都要转无论是高级语言还是汇编语言,源程序都要转无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)计算机才能执行。换成目标程序(机器语言)计算机才能执行。换成目标程序(机器语言)计算机才能执行。换成目标程序(机器语言)计算机才能执行。支支支支持持持持写写写写入入入入 8XX518XX51单单单单片片片片机机机机或或或或仿仿仿仿真真真真调调调调试试试试的的的的目目目目标标标标程程程程序序序序有两种文件格式:有两种文件格式:有两种文件格式:有两种文件格式:.BIN.BIN文件和文件和文件和文件和 HEXHEX文件,文件,文件,文件,.BIN.BIN文文文文件件件件是是是是由由由由编编编编译译译译器器器器生生生生成成成成的的的的二二二二进进进进制制制制文文文文件件件件,是是是是程程程程序序序序的的的的机器码。机器码。机器码。机器码。HEXHEX文文文文件件件件是是是是由由由由INTERINTER公公公公司司司司定定定定义义义义的的的的一一一一种种种种格格格格式式式式,这这这这种种种种格格格格式式式式包包包包括括括括地地地地址址址址、数数数数据据据据和和和和校校校校验验验验码码码码,并并并并用用用用ASCIIASCII码码码码来来来来存存存存储储储储。.BIN.BIN文文文文件件件件需需需需通通通通过过过过符符符符号号号号转转转转换换换换程程程程序序序序OHS51OHS51进进进进行行行行转转转转换换换换,成成成成为为为为HEXHEX文件后,才能显示并可供打印出来,文件后,才能显示并可供打印出来,文件后,才能显示并可供打印出来,文件后,才能显示并可供打印出来,两种语言的操作过程见图两种语言的操作过程见图两种语言的操作过程见图两种语言的操作过程见图 3-13-1。连接连接/定位器定位器L51汇编语言汇编语言源程序源程序汇编器汇编器A51符号转换程序符号转换程序OHS51绝对地址绝对地址目标程序目标程序.BINC语言程序语言程序浮浮动动地地址址目目标标程程序序编译器编译器C51 HEX图图 3-1 两种语言源程序转换成目标程序两种语言源程序转换成目标程序 汇汇编编:将将汇汇编编语语言言源源程程序序转转换换成成机机器器语语言言目目标标程程序序的的过程称为汇编。过程称为汇编。(翻译)翻译)汇编程序:能将汇编语言汇编程序:能将汇编语言源程序源程序转换成机器语言转换成机器语言目标目标 程序的系统软件称为汇编程序。程序的系统软件称为汇编程序。(翻译官)翻译官)汇编语言源程序:用户用汇编语言助记符编的应用程汇编语言源程序:用户用汇编语言助记符编的应用程 序。序。目标程序:计算机能识别的机器码程序目标程序:计算机能识别的机器码程序汇编(编译)的方法有两种:汇编(编译)的方法有两种:汇编(编译)的方法有两种:汇编(编译)的方法有两种:1.1.手工汇编:手工汇编:手工汇编:手工汇编:人工查指令表,查出程序中每条指令对应的机器人工查指令表,查出程序中每条指令对应的机器人工查指令表,查出程序中每条指令对应的机器人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。代码。早期的计算机使用。代码。早期的计算机使用。代码。早期的计算机使用。目前很多公司将编辑器、汇编器、编译器、连接目前很多公司将编辑器、汇编器、编译器、连接目前很多公司将编辑器、汇编器、编译器、连接目前很多公司将编辑器、汇编器、编译器、连接/定定定定位器、符号转换程序做成集成软件包,用户进入该集成位器、符号转换程序做成集成软件包,用户进入该集成位器、符号转换程序做成集成软件包,用户进入该集成位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以完成上环境,编辑好程序后,只需点击相应菜单就可以完成上环境,编辑好程序后,只需点击相应菜单就可以完成上环境,编辑好程序后,只需点击相应菜单就可以完成上述的各步,并且还有仿真调试功能,如述的各步,并且还有仿真调试功能,如述的各步,并且还有仿真调试功能,如述的各步,并且还有仿真调试功能,如WaveWave、KeilKeil、ProteusProteus等。集成软件的使用方法见教材第等。集成软件的使用方法见教材第等。集成软件的使用方法见教材第等。集成软件的使用方法见教材第 1313章。章。章。章。2.2.机器汇编:机器汇编:机器汇编:机器汇编:用计算机中的汇编程序对用户源程序进行汇编。用计算机中的汇编程序对用户源程序进行汇编。用计算机中的汇编程序对用户源程序进行汇编。用计算机中的汇编程序对用户源程序进行汇编。用机器汇编要提供给汇编一些信息,遵循汇编程序的一用机器汇编要提供给汇编一些信息,遵循汇编程序的一用机器汇编要提供给汇编一些信息,遵循汇编程序的一用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定。这些由伪指令指定。些约定。这些由伪指令指定。些约定。这些由伪指令指定。些约定。这些由伪指令指定。程序设计的步骤:程序设计的步骤:程序设计的步骤:程序设计的步骤:分析任务分析任务分析任务分析任务-确定方案算法确定方案算法确定方案算法确定方案算法-画出流程图画出流程图画出流程图画出流程图-分配存储分配存储分配存储分配存储器或寄存器器或寄存器器或寄存器器或寄存器-编辑程序编辑程序编辑程序编辑程序-汇编连接汇编连接汇编连接汇编连接-仿真调试仿真调试仿真调试仿真调试-修改程序修改程序修改程序修改程序 3.2伪伪指指令令为汇编程序(翻译官)提供信息的指令,它没有机为汇编程序(翻译官)提供信息的指令,它没有机为汇编程序(翻译官)提供信息的指令,它没有机为汇编程序(翻译官)提供信息的指令,它没有机器码,不被计算机执行。常用的伪指令及功能:器码,不被计算机执行。常用的伪指令及功能:器码,不被计算机执行。常用的伪指令及功能:器码,不被计算机执行。常用的伪指令及功能:1.1.起始指令起始指令起始指令起始指令ORGnnORGnn功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。指示此语句后面指示此语句后面指示此语句后面指示此语句后面的程序或数据块以的程序或数据块以的程序或数据块以的程序或数据块以nnnn为起始地址,连续存放在程序存储为起始地址,连续存放在程序存储为起始地址,连续存放在程序存储为起始地址,连续存放在程序存储器中。器中。器中。器中。指令地址指令地址指令地址指令地址 机器码机器码机器码机器码源程序源程序源程序源程序 ORGORG 2000H2000H2000H78302000H7830MAINMAIN:MOVR0MOVR0,#30H#30H2002HE62002HE6 MOVAMOVA,R0R0 ORG3000HORG3000H3000H233000H23TABTAB:DB23HDB23H,100100,AA3001H643001H643002H413002H412.2.字节定义字节定义字节定义字节定义标号:标号:标号:标号:DBDB(字节常数,或字符或表达式)(字节常数,或字符或表达式)(字节常数,或字符或表达式)(字节常数,或字符或表达式)功能:功能:功能:功能:指示在程序存储器中以标号指示在程序存储器中以标号指示在程序存储器中以标号指示在程序存储器中以标号为起始地址的单元里存放的数为为起始地址的单元里存放的数为为起始地址的单元里存放的数为为起始地址的单元里存放的数为字节数据(八位二进制数)。例如字节数据(八位二进制数)。例如字节数据(八位二进制数)。例如字节数据(八位二进制数)。例如 LNLN:DB32DB32,CC,25H25H,-1-1;LNLNLN+2LN+2地址单元依次存放地址单元依次存放地址单元依次存放地址单元依次存放20H,43H,25H20H,43H,25H,FFHFFH地址地址地址地址 数据数据数据数据LNLN2020LN+1LN+14343LN+2LN+22525LN+3LN+3FFFF3.3.字定义字定义字定义字定义标号:标号:标号:标号:DWDW(字常数或表达式)(字常数或表达式)(字常数或表达式)(字常数或表达式)作用:作用:作用:作用:指示在程序存储器中以标号为指示在程序存储器中以标号为指示在程序存储器中以标号为指示在程序存储器中以标号为起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据起始地址的单元里存放的数为字数据(即(即(即(即1616位的二进制数)。位的二进制数)。位的二进制数)。位的二进制数)。例如:例如:例如:例如:GHGH :DW1234HDW1234H,5678H5678H,0808GHGH12123434GH+2GH+256567878GH+4GH+4000008085 5.等值指令等值指令等值指令等值指令标号标号标号标号 EQUEQU(数值表达式)(数值表达式)(数值表达式)(数值表达式)表示表示表示表示EQUEQU两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。例如:例如:例如:例如:X1X1 EQU2000HEQU2000HX2X2 EQU0FHEQU0FHMAIN:MAIN:MOVDPTRMOVDPTR,#X1;DPTR=2000H#X1;DPTR=2000HADDAADDA,#X2;A=A+0FH#X2;A=A+0FH4保留字节保留字节 标号:标号:DS(数值表达式)(数值表达式)作用:作用:指示在程序存储器中保留以标号为起始地指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。址的若干字节单元,其单元个数由数值表达式指定。例如例如 L1:DS 32;从从L1地址开始保留地址开始保留32个存储单元。个存储单元。6.6.位定义位定义位定义位定义 标号标号标号标号 BITBIT 位地址位地址位地址位地址 作用:作用:作用:作用:同同同同EQUEQU指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。例如例如例如例如AICBITP1.1AICBITP1.1。7.汇编结束束 END作用:作用:指示源程序段指示源程序段结束。束。END 指令放在程序的最后。指令放在程序的最后。A51 汇编程序程序还有一些其它的有一些其它的伪指令,列在教材表指令,列在教材表 3-1中,以中,以备查阅。后面将通过实例介绍程序设计方法。常用程序结构有顺序后面将通过实例介绍程序设计方法。常用程序结构有顺序后面将通过实例介绍程序设计方法。常用程序结构有顺序后面将通过实例介绍程序设计方法。常用程序结构有顺序程序、分支程序、循环程序、子程序等。程序、分支程序、循环程序、子程序等。程序、分支程序、循环程序、子程序等。程序、分支程序、循环程序、子程序等。例例例例 3-13-1编程将外部数据存编程将外部数据存编程将外部数据存编程将外部数据存储器的储器的储器的储器的000EH000EH和和和和000FH000FH单元的内容相换。单元的内容相换。单元的内容相换。单元的内容相换。000EH000FH000EH000FH000EH000FH000EH000FH分析分析:外部数据存储器的数外部数据存储器的数据操作只能用据操作只能用MOVX指令,指令,且只能和且只能和A之间传送,因此之间传送,因此必须用一个中间环节作暂存,必须用一个中间环节作暂存,设用设用20H单元。用单元。用R0、R1指指示两单元的低八位地址,高示两单元的低八位地址,高八位地址由八位地址由P2指示。编程过指示。编程过程如左图:程如左图:000EH000FH000EH000FH000EH000FHA A20H20H3.33.3顺序程序设计顺序程序设计顺序程序设计顺序程序设计顺序程序顺序程序顺序程序顺序程序(简单程序简单程序简单程序简单程序):程序走向只有一条路径。程序走向只有一条路径。程序走向只有一条路径。程序走向只有一条路径。ORG0000HMOVP2,#0H;送地址高八位至送地址高八位至P2口口MOVR0,#0EH;R0=0EHMOVR1,#0FH;R1=OFHMOVXA,R0;A=(000EH)MOV20H,A;(20H)=(000EH)MOVXA,R1;A=(000FH)XCHA,20H;A=(000EH),(20H)=(000FH)MOVXR1,AMOVA,20HMOVXR0,A;交换后的数送各单元交换后的数送各单元SJMP$END例例例例3-23-2:将:将:将:将R4R5R4R5双字节符号数求补码程序。双字节符号数求补码程序。双字节符号数求补码程序。双字节符号数求补码程序。ORG0000HORG0000HMOVAMOVA,R4R4JBACC.7,CPLLJBACC.7,CPLL;判符号位;判符号位;判符号位;判符号位 SJMP$;SJMP$;正数的补码原码正数的补码原码正数的补码原码正数的补码原码CPLL:MOVACPLL:MOVA,R5R5;取低字节;取低字节;取低字节;取低字节CPLACPLAADDAADDA,#1#1;低字节变补;低字节变补;低字节变补;低字节变补MOVR5MOVR5,A AMOVAMOVA,R4R4;取高字节;取高字节;取高字节;取高字节CPLACPLAADDCAADDCA,#0#0;高字节变补;高字节变补;高字节变补;高字节变补ORLA,#80H;ORLA,#80H;恢复负号恢复负号恢复负号恢复负号MOVR4MOVR4,A ASJMP$SJMP$分析:先判符号,再根据不同情况处理。分析:先判符号,再根据不同情况处理。分析:先判符号,再根据不同情况处理。分析:先判符号,再根据不同情况处理。地址地址数据数据TABTAB0 0TAB+1TAB+11 1TAB+2TAB+24 4TAB+3TAB+39 9TAB+4TAB+416H16HTAB+5TAB+525H25H例例3-3 求求求求 Y=XY=X2 2(0X5)(0X5)。分析分析:变量变量X放在片内放在片内RAM的的20H单元单元,其值为其值为00H05H之间之间,Y Y在片内在片内RAM的的21H单元,单元,在程序存储器安排一张平在程序存储器安排一张平方表,方表,通过查表通过查表求求求求 Y=XY=X2 2 这样比完成这样比完成 X*X 编程简便多了。编程简便多了。表表 ORG 0000H MOV DPTR,#TAB MOV A,20H ;取;取X MOVC A,A+DPTR ;查表查表 MOV 21H,A ;存于存于Y SJMP$TAB:DB 00H,01H,04H,09H,16H,25H END 首地址为首地址为TAB,以,以DPTR指向表首址,利用查表指令指向表首址,利用查表指令MOVC A,A+DPTR,即可求得。,即可求得。表中数据用表中数据用BCD码存放合乎人们的习惯码存放合乎人们的习惯.如果平方值为两个字节,程序应如何编。如果平方值为两个字节,程序应如何编。DPTRA例例例例3-43-4分解压缩式分解压缩式分解压缩式分解压缩式BCDBCD码码码码,使其成为非压缩式使其成为非压缩式使其成为非压缩式使其成为非压缩式BCDBCD码。码。码。码。如把如把如把如把 65H06H65H06H和和和和05H,05H,见图见图见图见图ORG0000HORG0000HMOVMOV R0R0,#40H#40H;设指针;设指针;设指针;设指针MOVMOV AA,R0R0;取一个字节;取一个字节;取一个字节;取一个字节MOVMOV R2R2,A A;暂存;暂存;暂存;暂存ANLANLAA,#0FH#0FH;清;清;清;清0 0高半字节高半字节高半字节高半字节INCINCR0R0MOVMOV R0R0,AA;保存数据个位;保存数据个位;保存数据个位;保存数据个位片内片内RAM42H41H40H65MOV A,R2SWAP A ;十位换到低半字节;十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位;保存数据十位SJMP$050506063.4 3.4 3.4 3.4 分支程序的设计分支程序的设计分支程序的设计分支程序的设计 由条件转移指令构成程序判断框部分由条件转移指令构成程序判断框部分由条件转移指令构成程序判断框部分由条件转移指令构成程序判断框部分,形成分支结形成分支结形成分支结形成分支结构,通常转移条件取决标志位。常见的分支见下图:构,通常转移条件取决标志位。常见的分支见下图:构,通常转移条件取决标志位。常见的分支见下图:构,通常转移条件取决标志位。常见的分支见下图:条件满足条件满足?N影响条件影响条件Y处理段处理段条件满足条件满足?N影响条件影响条件Y处理处理1处理处理2【例例例例3-53-5】在内部在内部在内部在内部RAMRAM的的的的40H40H和和41H41H地址单元中,有地址单元中,有地址单元中,有地址单元中,有 2 2个无符号数,试编程比较这两数的大小,将大数存于个无符号数,试编程比较这两数的大小,将大数存于个无符号数,试编程比较这两数的大小,将大数存于个无符号数,试编程比较这两数的大小,将大数存于内部内部内部内部RAMRAM的的的的GRGR单元,小数存于单元,小数存于单元,小数存于单元,小数存于LELE单元,如两数相等,单元,如两数相等,单元,如两数相等,单元,如两数相等,则分别送入则分别送入则分别送入则分别送入GRGR和和LELE地址单元。地址单元。地址单元。地址单元。分析分析分析分析采用采用采用采用CJNECJNE指令,即可以判断相等与否,还可以指令,即可以判断相等与否,还可以指令,即可以判断相等与否,还可以指令,即可以判断相等与否,还可以通过通过通过通过CYCY标志判断大小,程序如下:标志判断大小,程序如下:标志判断大小,程序如下:标志判断大小,程序如下:ORG0000HORG0000HMOVA,40HMOVA,40HCJNEA,41H,NEQCJNEA,41H,NEQ;两数不等转两数不等转两数不等转两数不等转 NEQNEQMOVGR,AMOVGR,A;两数相等,两数相等,两数相等,两数相等,GRGR单元和单元和单元和单元和LELE单元均存此数单元均存此数单元均存此数单元均存此数MOVLE,AMOVLE,ASJMP$SJMP$NEQ:JCLESSNEQ:JCLESS;A;A小则转小则转小则转小则转LESSLESSMOVGR,AMOVGR,A;A;A大,大数存大,大数存大,大数存大,大数存GRGR单元单元单元单元MOVLE,41HMOVLE,41H;小数存小数存小数存小数存LELE单元单元单元单元SJNE$SJNE$LESS:MOVLE,ALESS:MOVLE,A;A;A小,小数存小,小数存小,小数存小,小数存LELE单元单元单元单元 MOVGR,41HMOVGR,41H;大数存大数存大数存大数存GRGR单元单元单元单元SJMP$SJMP$GREQU30HGREQU30HLEEQU31HLEEQU31HENDEND例例3-6】设变量设变量X以补码形式存放在片内以补码形式存放在片内RAM的的30H单元,单元,函数函数Y与与X有如下关系式:有如下关系式:XX0Y=20HX=0X+5X00H(30H)+05H(30H)结束结束20H(30H)YNYNORG0000HORG0000HMOVA,30HMOVA,30HJZNEXTJZNEXT;判断是否为零判断是否为零判断是否为零判断是否为零ANLA,#80HANLA,#80H;判断符号位判断符号位判断符号位判断符号位JZEDJZED;X0;X0转转转转EDEDMOVA,#05HMOVA,#05H;X0;X0完成完成完成完成X+5X+5ADDA,#30HADDA,#30HMOV30H,AMOV30H,ASJMPEDSJMPEDNEXT:MOV30H,#20HNEXT:MOV30H,#20H;X=0,Y=20H;X=0,Y=20HED:SJNE$ED:SJNE$例例例例用单片机加重力传感器作磅秤,秤出重量后算出用单片机加重力传感器作磅秤,秤出重量后算出用单片机加重力传感器作磅秤,秤出重量后算出用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以行李运费价格,其秤出的重量以行李运费价格,其秤出的重量以行李运费价格,其秤出的重量以10kg10kg为为为为1 1个计价单位个计价单位个计价单位个计价单位G,G,GG已存入已存入已存入已存入40H40H单元。单元。单元。单元。计价方法为计价方法为计价方法为计价方法为50kg50kg以内按以内按以内按以内按3 3元元元元,50kg50kg以上分段计价以上分段计价以上分段计价以上分段计价:50kg50kg按按按按3 3元计价,超过部分元计价,超过部分元计价,超过部分元计价,超过部分按按按按2 2元计价。元计价。元计价。元计价。由此列出算式:由此列出算式:由此列出算式:由此列出算式:G3+(G-5)2;当当G5M=G3 ;当;当G5 3G因重复使用,先暂存在因重复使用,先暂存在R2。流程见左流程见左,程序如下:程序如下:ORG0100HORG0100HFRTFRT:MOVAMOVA,40H40H;取行李重量计价单位;取行李重量计价单位;取行李重量计价单位;取行李重量计价单位GGMOVR3MOVR3,A AMOVBMOVB,#03H#03H;运费运费运费运费M=G3M=G3MULABMULABMOVR2MOVR2,A A;暂存;暂存;暂存;暂存3G3GMOVAMOVA,R3R3;取回;取回;取回;取回GGCJNEACJNEA,#05H#05H,L1L1;G5?G5?SJMPWETCSJMPWETCL1L1:JCJC WETCWETC;是,转至;是,转至;是,转至;是,转至WETCWETCSUBBASUBBA,#05H#05H;否则;否则;否则;否则 M=3G+2(G-5)M=3G+2(G-5)RLCARLCAADDAADDA,R2R2MOVR2MOVR2,A AWETCWETC:MOV41HMOV41H,R2R2;存运费;存运费;存运费;存运费 MMRETRET 当程序中的某些指令需要反复执行多次时,采用循环程当程序中的某些指令需要反复执行多次时,采用循环程序的方式,这样会使程序缩短,节省存储单元(并不节省序的方式,这样会使程序缩短,节省存储单元(并不节省执行时间)。执行时间)。循环次数的控制,有两种控制方式循环次数的控制,有两种控制方式:第一种方法第一种方法 先判断再处理先判断再处理,即先判断满不满足循环条件,如不即先判断满不满足循环条件,如不满足,就不循环,多以循环条件控制。满足,就不循环,多以循环条件控制。第二种方法第二种方法先处理再判断,即循环执行一遍后,下一轮还需不需先处理再判断,即循环执行一遍后,下一轮还需不需要进行,多以计循环次数控制。循环可以有单重循环和多要进行,多以计循环次数控制。循环可以有单重循环和多重循环,在多重循环中,内、外循环不能交叉,也不允许重循环,在多重循环中,内、外循环不能交叉,也不允许外循环跳入内循环。下面通过几个实例说明循环程序的设外循环跳入内循环。下面通过几个实例说明循环程序的设计方法。计方法。3.5 循循 环环 程程 序序 设设 计计例例3-9设计一个延时设计一个延时10ms的延时子程序,已知单的延时子程序,已知单片机使用的晶振为片机使用的晶振为6MHz。分析分析延时时间与两个因素有关延时时间与两个因素有关:晶振频率和循环晶振频率和循环次数。由于晶振采用次数。由于晶振采用6MHz,一个机器周期是,一个机器周期是2s,用单循环可以实现,用单循环可以实现1ms延时,外循环延时,外循环10次次即可达即可达10ms延时。延时。内循环如何实现内循环如何实现1ms延时呢,程序中可先以延时呢,程序中可先以未知数未知数MT代替,从附录代替,从附录A查每条指令机器周期计查每条指令机器周期计算程序的执行时间。算程序的执行时间。ORG0020HORG0020HMOVR0MOVR0,#0AH#0AH;外循环;外循环;外循环;外循环1010次次次次DL2DL2:MOVR1MOVR1,#MT#MT;内循环;内循环;内循环;内循环MTMT次次次次DL1DL1:NOPNOPNOPNOP;空操作指令;空操作指令;空操作指令;空操作指令DJNZR1DJNZR1,DL1DL1DJNZR0DJNZR0,DL2DL2RETRET111122内循环内循环DL1到指令到指令DJNZ R1,DL1的计算:的计算:(1+1+2)2SMT=1000S MT=125=7DH将将7DH代入上面程序的代入上面程序的MT,计算总的延时时间:,计算总的延时时间:1+1+(1+1+2)125+28102S =10062S=10.062mS若需要延时更长时间,可以采用多重循环。若需要延时更长时间,可以采用多重循环。机器周期数机器周期数内内外外MCS-51单片机有着优异的位逻辑功能单片机有着优异的位逻辑功能,可以方便的实现各种复杂的逻辑运算可以方便的实现各种复杂的逻辑运算.这种这种用软件替代硬件的方法用软件替代硬件的方法,可以大大简化甚至可以大大简化甚至完全不用硬件完全不用硬件,但比硬件要多花运算时间。但比硬件要多花运算时间。例例3-14编写一程序编写一程序,以实现图以实现图3-中的逻辑运中的逻辑运算电路算电路.3.6 位操作程序设计位操作程序设计 其中其中P1.1和和P2.2分别是端口线上的信息分别是端口线上的信息,TF0和和IE1分别是定时器定时溢出标志和外部中请求标志分别是定时器定时溢出标志和外部中请求标志,25H和和26H分别是两个位地址分别是两个位地址,运算结果由端口线运算结果由端口线P1.3输出。输出。图图3-7 硬件逻辑运算电路硬件逻辑运算电路程序如下:程序如下:START:MOVC,P2.2ORLC,TF0ANLC,P1.1MOVF0,CMOVC,IE1ORLC,/25HANLC,F0ANLC,/26HMOVP1.3,CSJMP$例例3-183-18 设累加器设累加器A A的各位的各位ACC.0ACC.0ACC.7ACC.7分别记为分别记为X0X0X7X7,编制程序用软件实现下式,编制程序用软件实现下式:Y=X0X1X2+X0 X1 X2+X0X1X2X3+X4 X5 X6X7 Y=X0X1X2+X0 X1 X2+X0X1X2X3+X4 X5 X6X7 X0BITACC.0X0BITACC.0X1BITACC.1X1BITACC.1X2BITACC.2X2BITACC.2X3BITACC.3X3BITACC.3X4BITACC.4X4BITACC.4X5BITACC.5X5BITACC.5X6BITACC.6X6BITACC.6X7BITACC.7X7BITACC.7 ORG0000HORG0000HMOVC,X0MOVC,X0ANLC,X1ANLC,X1ANLC,X2ANLC,X2MOV00H,C;X0X1X2MOV00H,C;X0X1X2MOVC,X0MOVC,X0ANLC,/X1ANLC,/X1MOV01H,C;X0X1MOV01H,C;X0X1ANLC,/X2ANLC,/X2ORLC,00HORLC,00HMOV00H,CMOV00H,CMOVC,X2MOVC,X2ANLC,01HANLC,01H ANLC,X3;X0X1X2X3ANLC,X3;X0X1X2X3ORLC,/00HORLC,/00HMOV00H,CMOV00H,CMOVC,X7MOVC,X7ANLC,/X6ANLC,/X6ANLC,/X5ANLC,/X5ANLC,/X4;X4X5X6X7ANLC,/X4;X4X5X6X7ORLC,00H;ORLC,00H;最终结果最终结果最终结果最终结果YCYCSJMP$SJMP$子程序是构成单片机应用程序必不可少的部分,子程序是构成单片机应用程序必不可少的部分,通过通过ACALL和LCALL两条子程序调用指令,可以两条子程序调用指令,可以十分方便地用来调用任何地址处的子程序。十分方便地用来调用任何地址处的子程序。子程序节省占用的存储单元,使程序简短、清子程序节省占用的存储单元,使程序简短、清晰,善于灵活的使用子程序,是程序设计的重要晰,善于灵活的使用子程序,是程序设计的重要技巧之一。技巧之一。子程序必须以子程序必须以RET指令结尾指令结尾.在调用子程序时,有以下几点应注意:在调用子程序时,有以下几点应注意:3.7 子程序子程序 当一段程序需多次应用当一段程序需多次应用,或为多人应用时或为多人应用时,这段这段程序编为子程序程序编为子程序.1 1)保护现场。)保护现场。)保护现场。)保护现场。如果在调用前主程序已经使用了某些存储单元或寄存如果在调用前主程序已经使用了某些存储单元或寄存如果在调用前主程序已经使用了某些存储单元或寄存如果在调用前主程序已经使用了某些存储单元或寄存器,在调用时,这些寄存器和存储单元又有其他用途,器,在调用时,这些寄存器和存储单元又有其他用途,器,在调用时,这些寄存器和存储单元又有其他用途,器,在调用时,这些寄存器和存储单元又有其他用途,就应先把这些单元或寄存器中的内容压入堆栈保护,调就应先把这些单元或寄存器中的内容压入堆栈保护,调就应先把这些单元或寄存器中的内容压入堆栈保护,调就应先把这些单元或寄存器中的内容压入堆栈保护,调用完后再从堆栈中弹出以便加以恢复。如果有较多的寄用完后再从堆栈中弹出以便加以恢复。如果有较多的寄用完后再从堆栈中弹出以便加以恢复。如果有较多的寄用完后再从堆栈中弹出以便加以恢复。如果有较多的寄存器要保护,应使主、子程序使用不同的寄存器组。存器要保护,应使主、子程序使用不同的寄存器组。存器要保护,应使主、子程序使用不同的寄存器组。存器要保护,应使主、子程序使用不同的寄存器组。2 2)设置入口参数和出口参数。)设置入口参数和出口参数。)设置入口参数和出口参数。)设置入口参数和出口参数。用之前主程序要按子程序的要求设置好地址单元或存用之前主程序要按子程序的要求设置好地址单元或存用之前主程序要按子程序的要求设置好地址单元或存用之前主程序要按子程序的要求设置好地址单元或存储器(称为入口参数),以便子程序从指定的地址单元储器(称为入口参数),以便子程序从指定的地址单元储器(称为入口参数),以便子程序从指定的地址单元储器(称为入口参数),以便子程序从指定的地址单元或存储器获得输入数据;或存储器获得输入数据;或存储器获得输入数据;或存储器获得输入数据;子程序经运算或处理后的结果存放到指定的地址单元子程序经运算或处理后的结果存放到指定的地址单元子程序经运算或处理后的结果存放到指定的地址单元子程序经运算或处理后的结果存放到指定的地址单元或寄存器(称为出口参数),主程序调用后从指定的地或寄存器(称为出口参数),主程序调用后从指定的地或寄存器(称为出口参数),主程序调用后从指定的地或寄存器(称为出口参数),主程序调用后从指定的地址单元或寄存器读取运算或处理后的结果,只有这样,址单元或寄存器读取运算或处理后的结果,只有这样,址单元或寄存器读取运算或处理后的结果,只有这样,址单元或寄存器读取运算或处理后的结果,只有这样,才能完成子程序和主程序间的数据的正确传递。才能完成子程序和主程序间的数据的正确传递。才能完成子程序和主程序间的数据的正确传递。才能完成子程序和主程序间的数据的正确传递。3)子程序中可包括对另外子程序的调用,称为子)子程序中可包括对另外子程序的调用,称为子程序嵌套。程序嵌套。例例3-1 用程序实现用程序实现 c=a2+b2,设,设a,b均小于均小于10。a存放存放在在31H单元,单元,b存放在存放在32H单元,把单元,把 c 存入存入34H和和33H单元。(和要求为单元。(和要求为BCD码)。码)。解:因该算式两次用到平方值,所以在程序中解:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查表采用把求平方编为子程序的方法。求平方采用查表法法,主程序和子程序编写如下:主程序和子程序编写如下:主程序:主程序:主程序:主程序:ORG0000HORG0000HMOVSPMOVSP,#3FH#3FHMOVAMOVA,31H31H;取;取;取;取a aLCALLSQR;LCALLSQR;求求求求a a方方方方 MOVR1MOVR1,A AMOVAMOVA,32H32H;取;取;取;取b bLCALLSQR;LCALLSQR;求求求求b b方方方方ADDAADDA,R1;R1;求和求和求和求和DAADAA;调整;调整;调整;调整MOV33HMOV33H,AAMOVAMOVA,#0#0ADDCAADDCA,00MOV34HMOV34H,AASJMP$SJMP$子程序:子程序:子程序:子程序:ORG0030HORG0030HSQRSQR:INCAINCAMOVCAMOVCA,A+PCA+PCRETRETTABTAB:DB00H,01H,04HDB00H,01H,04HDB09H16H,25H,DB09H16H,25H,DBDB36H,49H64H,81H36H,49H64H,81HENDEND3.8小小结结1、程序设计的关键在于指令熟悉和算法、程序设计的关键在于指令熟悉和算法(思路思路)正正确、清晰,对复杂的程序应先画出流程图。只有确、清晰,对复杂的程序应先画出流程图。只有多做练习多上机调试,熟能生巧,才能编出高质多做练习多上机调试,熟能生巧,才能编出高质量的程序。量的程序。2、伪指令是非执行指令,提供汇编程序以汇编信、伪指令是非执行指令,提供汇编程序以汇编信息,应正确使用。息,应正确使用。3、本章应掌握顺序程序、分支程序、循环程序、本章应掌握顺序程序、分支程序、循环程序、子程序等各类程序的设计方法,并能熟练应用查子程序等各类程序的设计方法,并能熟练应用查表技术简化程序的设计。表技术简化程序的设计。1、有时候读书是一种巧妙地避开思考的方法。7月-247月-24Friday,July 12,20242、阅读一切好书如同和过去最杰出的人谈话。05:41:3305:41:3305:417/12/2024 5:41:33 AM3、越是没有本领的就越加自命不凡。7月-2405:41:3305:41Jul-2412-Jul-244、越是无能的人,越喜欢挑剔别人的错儿。05:41:3305:41:3305:41Friday,July 12,20245、知人者智,自知者明。胜人者有力,自胜者强。7月-247月-2405:41:3305:41:33July 12,20246、意志坚强的人能把世界放在手中像泥块一样任意揉捏。12七月20245:41:33上午05:41:337月-247、最具挑战性的挑战莫过于提升自我。七月245:41上午7月-2405:41July 12,20248、业余生活要有意义,不要越轨。2024/7/125:41:3305:41:3312 July 20249、一个人即使已登上顶峰,也仍要自强不息。5:41:33上午5:41上午05:41:337月-2410、你要做多大的事情,就该承受多大的压力。7/12/2024 5:41:33 AM05:41:3312-7月-2411、自己要先看得起自己,别人才会看得起你。7/12/2024 5:41 AM7/12/2024 5:41 AM7月-247月-2412、这一秒不放弃,下一秒就会有希望。12-Jul-2412 July 20247月-2413、无论才能知识多么卓著,如果缺乏热情,则无异纸上画饼充饥,无补于事。Friday,July 12,202412-Jul-247月-2414、我只是自己不放过自己而已,现在我不会再逼自己眷恋了。7月-2405:41:3312 July 202405:41谢谢大家谢谢大家
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!