《单片机原理及应用》第4章汇编语言程序设计课件

上传人:91274****mpsvz 文档编号:241296879 上传时间:2024-06-16 格式:PPT 页数:51 大小:331.06KB
返回 下载 相关 举报
《单片机原理及应用》第4章汇编语言程序设计课件_第1页
第1页 / 共51页
《单片机原理及应用》第4章汇编语言程序设计课件_第2页
第2页 / 共51页
《单片机原理及应用》第4章汇编语言程序设计课件_第3页
第3页 / 共51页
点击查看更多>>
资源描述
第4章 汇编语言程序设计q程序设计的步骤和伪指令。q源程序、目标代码、编辑和汇编的基本概念。q顺序程序、分支程序、循环程序、子程序的设计。q算术运算和数码转制程序设计。6/16/2024广东松山职业技术学院课件制作组第4章 汇编语言程序设计程序设计的步骤和伪指令。8/9/21本章主要内容本章主要内容 4.1 汇编语言程序设计基础汇编语言程序设计基础 4.2 顺序程序设计顺序程序设计 4.3 分支程序设计分支程序设计 4.4 循环程序设计循环程序设计 4.5 子程序设计子程序设计 4.6 算术运算和数码转制程序设计算术运算和数码转制程序设计6/16/2024广东松山职业技术学院课件制作组本章主要内容 4.1 汇编语言程序设计基础 4.2 24.1 汇编语言程序设计基础汇编语言程序设计基础 1.机器语言机器语言4.1.1 程序设计语言简介程序设计语言简介2.汇编语言汇编语言n用二进制编码表示每条指令用二进制编码表示每条指令。计算机能够直接执。计算机能够直接执行用机器语言编出的机器码程序。不同种类的计行用机器语言编出的机器码程序。不同种类的计算机,由于其内部结构不完全相同,它的机器码算机,由于其内部结构不完全相同,它的机器码指令也不一定相同。指令也不一定相同。n符号化的机器语言符号化的机器语言。它用一些容易理解和记忆的。它用一些容易理解和记忆的符号符号代替机器码指令,又称为代替机器码指令,又称为助记符语言助记符语言,助记,助记符指令与机器码指令一一对应。不同结构的计算符指令与机器码指令一一对应。不同结构的计算机,汇编指令不相同。机,汇编指令不相同。6/16/2024广东松山职业技术学院课件制作组4.1 汇编语言程序设计基础 1.机器语言4.1.1 程序34.1.1 程序设计语言简介程序设计语言简介n汇编语言和特点:汇编语言和特点:对比机器码,汇编语言克服了对比机器码,汇编语言克服了机器语言的缺点,方便了用户机器语言的缺点,方便了用户记忆指令记忆指令和和编写程编写程序序,但用汇编语言编写的源程序需用汇编程序,但用汇编语言编写的源程序需用汇编程序“翻译翻译”成机器码后方可执行。采用汇编语言编写成机器码后方可执行。采用汇编语言编写程序,可以直接访问和操作单片机中的寄存器及程序,可以直接访问和操作单片机中的寄存器及存储器单元,对数据的处理表述的非常具体。因存储器单元,对数据的处理表述的非常具体。因此,在计算机实时测试和控制领域中得到了广泛此,在计算机实时测试和控制领域中得到了广泛应用。应用。n接近自然语言和数学语言的算法语言,具有直观、接近自然语言和数学语言的算法语言,具有直观、通用等特点。不象机器语言和汇编语言编写程序通用等特点。不象机器语言和汇编语言编写程序需要完全了解需要完全了解CPU硬件结构,且程序不能移植。硬件结构,且程序不能移植。3.高级语言高级语言6/16/2024广东松山职业技术学院课件制作组4.1.1 程序设计语言简介汇编语言和特点:对比机器码,汇编44.1.2 汇编语言程序设计步骤汇编语言程序设计步骤1分析问题,确定算法分析问题,确定算法程序设计中最重要的一步。设计人员必须认真、仔细地考虑系统需要解决的各种问题解决的各种问题以及将来系将来系统功能的进一步扩展统功能的进一步扩展,明确知道程序要解决的问题和接收、处理、发送的数据范围以及使用什么样的算法。2画流程图画流程图流程图是用各种图形、符号、有向线段来直观地表示程序执行的步骤和顺序。它可使人们通过流程图的基本线索,对全局有完整的了解。6/16/2024广东松山职业技术学院课件制作组4.1.2 汇编语言程序设计步骤1分析问题,确定算法程序54.1.2 汇编语言程序设计步骤汇编语言程序设计步骤4调试、测试程序调试、测试程序调试是利用仿真器等开发工具,采用单步、设断单步、设断点、连续运行点、连续运行等方法排除程序中的错误排除程序中的错误,完善程序的功能。3编写汇编语言源程序编写汇编语言源程序根据流程图用汇编语言指令实现流程图的每一个步骤,从而编写出汇编语言的源程序。6/16/2024广东松山职业技术学院课件制作组4.1.2 汇编语言程序设计步骤4调试、测试程序3编写汇64.1.3 伪指令伪指令 1.汇编起始伪指令汇编起始伪指令ORGn格式:格式:ORG 16位地址位地址n功能:规定该指令后面的源程序汇编后所产生的功能:规定该指令后面的源程序汇编后所产生的目标程序存放的起始地址。目标程序存放的起始地址。例例4.1 ORG 2000HMAIN:MOV A,#50H2.汇编结束伪指令汇编结束伪指令ENDn格式:格式:ENDn 功能:通知汇编程序功能:通知汇编程序结束汇编结束汇编。汇编时遇到。汇编时遇到END指令,则结束所有汇编工作,而指令,则结束所有汇编工作,而END之后的之后的所有指令将不予处理。所有指令将不予处理。6/16/2024广东松山职业技术学院课件制作组4.1.3 伪指令 1.汇编起始伪指令ORG格式:ORG 74.1.3 伪指令伪指令 3.赋值伪指令赋值伪指令EQUn格式:格式:字符名称字符名称 EQU 赋值项赋值项 n功能:功能:把该伪指令右边的值赋项给左边用户定义把该伪指令右边的值赋项给左边用户定义的符号。的符号。例例4-3 COUNT EQU 64H MOV A,COUNT ;A(64H)n注意注意:使用:使用EQU伪指令时,必须先赋值,后使用,伪指令时,必须先赋值,后使用,故该指令通常放在程序开头。而赋值后的故该指令通常放在程序开头。而赋值后的“字符字符”,其值在整个程序中不改变,并可多次使用。,其值在整个程序中不改变,并可多次使用。6/16/2024广东松山职业技术学院课件制作组4.1.3 伪指令 3.赋值伪指令EQU格式:字符名称 84.1.3 伪指令伪指令 4.定义数据字节伪指令定义数据字节伪指令DB n格式:格式:标号:标号:DB 字节数据表字节数据表 n功能:从指定的地址单元开始,定义若干个字节功能:从指定的地址单元开始,定义若干个字节的数据或的数据或ASCII码字符码字符。例例4-4 ORG 2000HTAB:DB 99H,00H,01H,02H,03H,04HSTR:DB ABC n以上伪指令经汇编后在程序储存器中的以上伪指令经汇编后在程序储存器中的2000H2008H单元的内容为:单元的内容为:99H、00H、01H、02H、03H、04H、41H、42H、43H。6/16/2024广东松山职业技术学院课件制作组4.1.3 伪指令 4.定义数据字节伪指令DB 格式:标94.1.3 伪指令伪指令 5.定义数据字节伪指令定义数据字节伪指令DW n格式:格式:标号:标号:DW 16 位数据表位数据表 n功能:从指定的地址单元开始,定义若干个字数功能:从指定的地址单元开始,定义若干个字数据(据(16位)。位)。例例4-5 ORG 2000H TAB:DW 1234H,50H,CDn以上伪指令经汇编后,程序存储器中的以上伪指令经汇编后,程序存储器中的2000H2005H单元的内容为:单元的内容为:12H、34H、00H、50H、43H、44H。6/16/2024广东松山职业技术学院课件制作组4.1.3 伪指令 5.定义数据字节伪指令DW 格式:标104.1.3 伪指令伪指令 6.数据地址赋值伪指令数据地址赋值伪指令DATAn格式:格式:标号标号 DATA 表达式表达式n功能:把由表达式指定的数据地址或代码地址功能:把由表达式指定的数据地址或代码地址赋予规定的标号。赋予规定的标号。nDATA伪指令的功能和伪指令的功能和EQU伪指令相似,但伪指令相似,但DATA伪指令所定义的符号可伪指令所定义的符号可先使用后定义先使用后定义。在。在程序中它常用来定义数据地址。该语句一般放在程序中它常用来定义数据地址。该语句一般放在程序的开头和末尾。程序的开头和末尾。6/16/2024广东松山职业技术学院课件制作组4.1.3 伪指令 6.数据地址赋值伪指令DATA格式:标114.1.3 伪指令伪指令 7.定义存储区伪指令定义存储区伪指令DS n格式:格式:标号:标号:DS 表达式表达式n功能:从指定的地址单元开始,保留由表达式功能:从指定的地址单元开始,保留由表达式指定的若干字节空间,以备程序使用。指定的若干字节空间,以备程序使用。例例4-6 ORG 2000H DS 05 DB 11H,22H,33Hn以上伪指令经汇编后从以上伪指令经汇编后从2000H单元开始,单元开始,保留保留5个字节的存储单元个字节的存储单元,从,从2005H单元开始连续存放单元开始连续存放11H,22H,33H代码。代码。6/16/2024广东松山职业技术学院课件制作组4.1.3 伪指令 7.定义存储区伪指令DS 格式:标号:124.1.3 伪指令伪指令 8.位地址赋值伪指令位地址赋值伪指令BITn格式:格式:字符名称字符名称 BIT 位地址位地址n功能:把位地址赋予规定的字符名称,常用于功能:把位地址赋予规定的字符名称,常用于定义位符号地址定义位符号地址。例例4-7 AA BIT P1.7 BB BIT P1.6n汇编后汇编后P1.7和和P1.6(位地址)赋给变量(位地址)赋给变量AA和和BB,在程序中就可以把在程序中就可以把AA和和BB作为位地址使用。作为位地址使用。n上面介绍了上面介绍了MCS-51单片机汇编语言中常用的伪指单片机汇编语言中常用的伪指令。在编写汇编语言源程序时,必须严格按照汇编令。在编写汇编语言源程序时,必须严格按照汇编语言的规范书写。语言的规范书写。6/16/2024广东松山职业技术学院课件制作组4.1.3 伪指令 8.位地址赋值伪指令BIT格式:字符名称134.2 顺序程序设计顺序程序设计u顺序程序(又称简单程序)是一种最简单、最顺序程序(又称简单程序)是一种最简单、最基本的程序。基本的程序。u程序按编写的顺序从第一条指令开始执行,直程序按编写的顺序从第一条指令开始执行,直到最后一条指令为止。计算机是按到最后一条指令为止。计算机是按指令在存储器指令在存储器中存放的先后次序来顺序执行程序中存放的先后次序来顺序执行程序的。它会在的。它会在PC控制下顺序执行。这种程序虽然简单,但它是构控制下顺序执行。这种程序虽然简单,但它是构成复杂程序的基础。成复杂程序的基础。例例4-9 将将两个两个半字节半字节数合并成数合并成一个一个一字节一字节数。数。n设内部设内部RAM的的40H、41H单元中分别存放着单元中分别存放着8位位二进制数。要求取出两个单元中的低半字节、合二进制数。要求取出两个单元中的低半字节、合并成一个字节后,存并成一个字节后,存42H单元。单元。6/16/2024广东松山职业技术学院课件制作组4.2 顺序程序设计顺序程序(又称简单程序)是一种最简单、14 ORG 0000HSTART:MOV R1,#40H MOV A,R1 ANL A,#0FH SWAP A INC R1 XCH A,R1 ANL A,#0FH ORL A,R1 INC R1 MOV R1,A RET END4.2 顺序程序设计顺序程序设计6/16/2024广东松山职业技术学院课件制作组 ORG 0000H4.215例例4-10 拆字程序拆字程序:将:将40H单元中的内容拆开后分别送单元中的内容拆开后分别送41H、42H单元中。单元中。ORG 0000HSTART:MOV R1,#40H MOV A,R1 MOV B,A ;暂存;暂存B中中 ANL A,#0FH ;取第一个半字节;取第一个半字节 INC R1 MOV R1,A ;存放第一个半字节;存放第一个半字节 MOV A,B SWAP A ANL A,#0FH ;取第二个半字节;取第二个半字节 INC R1 MOV R1,A ;存放第二个半字节;存放第二个半字节 END4.2 顺序程序设计顺序程序设计6/16/2024广东松山职业技术学院课件制作组例4-10 拆字程序:将40H单元中的内容拆开后分别送41164.3 分支程序设计分支程序设计分支程序条件分支无条件分支LJMP、AJMP单分支多分支JZJZ、JNZJNZCJNZCJNZ、DJNZDJNZ等等JNCJNC、JBJB、JNBJNB、JBCJBC等等6/16/2024广东松山职业技术学院课件制作组4.3 分支程序设计分支程序条件分支无条件分支LJMP、A174.3 分支程序设计分支程序设计例例4-11 两个无符号数比较大小两个无符号数比较大小设两个连续外部设两个连续外部RAM单元单元ST1和和ST2中存放无符号的二进制数,找中存放无符号的二进制数,找出其中的大数存入出其中的大数存入ST3单元中。单元中。n用减法指令用减法指令SUBB来比较两数的大来比较两数的大小。执行该指令前,先把进位位清小。执行该指令前,先把进位位清零。通过借位(零。通过借位(CY)的状态判断两)的状态判断两数的大小。设两个数数的大小。设两个数X和和Y,当,当XY时,(时,(CY)0;XY,(,(CYCY)1 1。用减法指令比较大小,会破。用减法指令比较大小,会破坏累加器中的内容,故作减法前先坏累加器中的内容,故作减法前先保存累加器中的内容。保存累加器中的内容。n执行执行JNC指令后,形成了分支。执指令后,形成了分支。执行行SJMP指令后,实现程序的转移。指令后,实现程序的转移。6/16/2024广东松山职业技术学院课件制作组4.3 分支程序设计例4-11 两个无符号数比较大小用减法18 ORG 8000H ST1 EQU 8040H START1:CLR C MOV DPTR,#ST1 MOV XA,DPTR MOV R2,A INC DPTR MOV XA,DTPR SUBB A,R2 JNC BIG1 XCH A,R2BIG0:INC DPTR MOVX DPTR,A4.3 分支程序设计分支程序设计 SJMP$BIG1:MOV X A,DPTR SJMP BIG0 END6/16/2024广东松山职业技术学院课件制作组 ORG 800019例4-12 将ASCII码表的ASCII码转换为十六进制数码转换为十六进制数,如果ASCII码不能转换不能转换成十六进制数,用户标志位置户标志位置1。由ASCII码表可知,30H39H为09的ASCII码,41H46H为AF的ASCII码。在这一范围内的ASCII码减30H或37H就可以获得对应的十六进制数。设ASCII码放在累加器A中,转换结果放回A中。流程图如右图所示。4.3 分支程序设计分支程序设计6/16/2024广东松山职业技术学院课件制作组例4-12 将ASCII码表的ASCII码转换为十六进制数,204.3 分支程序设计分支程序设计 ORG 0000HSTART:CLR C SUBB A,#30H JC NASC CJNE A,#0AH,MMMM:JC ASC SUBB A,#07H CJNE A,#0AH,NNNN:JC NASC CJNE A,#10H,LLLL:JC ASCNASC:SETB F0ASC:RET END6/16/2024广东松山职业技术学院课件制作组4.3 分支程序设计 ORG214.4 循环程序设计循环程序设计u在在程程序序设设计计中中,只只有有简简单单程程序序和和分分支支程程序序是是不不够够的的。因因为为简简单单程程序序,每每条条指指令令只只执执行行一一次次,而而分分支支程程序序则则根根据据条条件件的的不不同同,会会跳跳过过一一些些指指令令,执执行行另另一一些些指指令令。它它们们的的特特点点是是,每每一一条条指指令令至至多多执执行行一一次次。在在处处理理实实际际事事务务时时,有有时时会会遇遇到到多多次次重重复复处处理理的的问问题题,用用循循环环程程序序的的方方法法来来解解决决就就比比较较合合适适。循循环环程程序序中中的的某某些些指指令令可可以以反反复复执执行行多多次次。采采用用循循环环程程序序,使使程程序序缩缩短短,节节省省存存储储单单元元。重重复复次次数数越越多多,循循环环程程序序的的优优越越性性就就越越明明显显。但但是是并并不不节节省省程程序序的的执执行行时时间间。由由于于要要有有循循环环准准备备、结结束束判判断断等等指指令令,循循环环程程序序执执行行速速度度要要比比简简单程序稍慢些。单程序稍慢些。6/16/2024广东松山职业技术学院课件制作组4.4 循环程序设计在程序设计中,只有简单程序和分支程序是224.4.1 循环程序结构循环程序结构1.循环程序的组成循环程序的组成 n初始化部分初始化部分:为循环程序做准备。如设置循环次数计数:为循环程序做准备。如设置循环次数计数器的初值,地址指针置初值,为循环变量赋初值等。器的初值,地址指针置初值,为循环变量赋初值等。n处理部分处理部分:为反复执行的程序段,是循环程序的实体。:为反复执行的程序段,是循环程序的实体。n修改部分修改部分:每执行一次循环体后,对指针做一次修改,:每执行一次循环体后,对指针做一次修改,使指针指向下一数据所在位置,为进入下一轮处理做准使指针指向下一数据所在位置,为进入下一轮处理做准备。备。n控制部分控制部分:根据循环次数计数器的状态或循环条件,检:根据循环次数计数器的状态或循环条件,检查循环能否继续执行,若循环次数已达到或循环条件不查循环能否继续执行,若循环次数已达到或循环条件不满足,应控制退出循环,否则继续循环。满足,应控制退出循环,否则继续循环。通常通常处理、修改、控制部分处理、修改、控制部分又称为循环体。又称为循环体。n结束部分结束部分:分析及存放执行结果。:分析及存放执行结果。6/16/2024广东松山职业技术学院课件制作组4.4.1 循环程序结构1.循环程序的组成 初始化部分:234.4.1 循环程序结构循环程序结构2.循环程序的结构循环程序的结构 先进入先进入处理部处理部分,再分,再控制循控制循环。即环。即至少执至少执行一次行一次循环体。循环体。先控制循环,先控制循环,后进入处理后进入处理部分。即先部分。即先根据判断结根据判断结果,控制循果,控制循环的执行与环的执行与否,有时可否,有时可以不进入循以不进入循环体就退出环体就退出循环程序。循环程序。6/16/2024广东松山职业技术学院课件制作组4.4.1 循环程序结构2.循环程序的结构 先进入处理部244.4.2 循环程序设计循环程序设计1.单循环程序单循环程序 n循环次数已知的循环程循环次数已知的循环程序序例例4-14 工作单元清零。工作单元清零。n将将40H为起点的为起点的8个单元个单元清清0。注:注:此程序的前24句为设定循环初值,57句为循环体。ORG 0000HCLEAR:CLR A MOV R0,#40H MOV R7,#08 LOOP:MOV R0,A INC R0 DJNZ R7,LOOP END6/16/2024广东松山职业技术学院课件制作组4.4.2 循环程序设计1.单循环程序 循环次数已知的循254.4.2 循环程序设计循环程序设计1.单循环程序单循环程序 n循环次数已知的循环循环次数已知的循环程序程序例例4-14 工作单元清零。工作单元清零。n将外部将外部2000H开始的开始的50个个RAM单元清零。单元清零。注:注:本例中循环次数已知,用用R2作循环次作循环次数计数器数计数器,用DJNZ指指令修改计数器值令修改计数器值,并控制循环的结束与否。ORG 0000H MOV DPTR,#2000H CLEAR:CLR A MOV R2,#32H LOOP:MOVX DPTR,A INC DPTR DJNZ R2,LOOP END6/16/2024广东松山职业技术学院课件制作组4.4.2 循环程序设计1.单循环程序 循环次数已知的循264.4.2 循环程序设计循环程序设计n循环次数未知的循环循环次数未知的循环程序程序例例4-17 测试字符串长度测试字符串长度n设有一串字符依次存设有一串字符依次存放在从放在从50H单元开始的单元开始的连续单元中,该字符串连续单元中,该字符串以以回车符回车符为结束标志,为结束标志,测得的字符串长度存入测得的字符串长度存入R2中。中。ORG 0000HCONT:MOV R2,#00H MOV R0,#50HNT:CJNE R0,#0DH,LP RETLP:INC R0 INC R2 SJMP NT END待测字符以待测字符以ASCII码形式存放在码形式存放在RAM中,回车符的中,回车符的ASCII码为码为0DH,程序中用一条,程序中用一条“CJNE R0,#0DH,LP”指令实现指令实现字符比较字符比较及控制循环任务的结束。及控制循环任务的结束。6/16/2024广东松山职业技术学院课件制作组4.4.2 循环程序设计循环次数未知的循环程序 274.4.2 循环程序设计循环程序设计2.多循环程序多循环程序 例例4-18 试编写试编写10秒延时程序。秒延时程序。延时程序与延时程序与MCS-51执行指令的时间有关,如果使用执行指令的时间有关,如果使用6 MHz晶振,一个机器周期为晶振,一个机器周期为2s,计算出执行一条,计算出执行一条指令以至一个循环所需要的时间,给出相应的循环指令以至一个循环所需要的时间,给出相应的循环次数,便能达到延时的目的。次数,便能达到延时的目的。DEL:MOV R5,#100DEL0:MOV R6,#200DEL1:MOV R7,#248NOPDEL2:DJNZ R7,DEL2 ;2482+4DJNZ R6,DEL1 ;(2482+4)200+4DJNZ R5,DEL0 ;(2482+4)200+4100+4RET6/16/2024广东松山职业技术学院课件制作组4.4.2 循环程序设计2.多循环程序 例4-18 试284.4.2 循环程序设计循环程序设计n上例延时程序实际延时为上例延时程序实际延时为10.000303秒。它是一秒。它是一个三重循环程序,利用程序嵌套的方法对时间进个三重循环程序,利用程序嵌套的方法对时间进行延迟是程序设计中常用的方法。行延迟是程序设计中常用的方法。n使用多重循环程序时,必须注意以下几点:使用多重循环程序时,必须注意以下几点:(1)循环嵌套,必须层次分明,不允许产生内外)循环嵌套,必须层次分明,不允许产生内外层循环交叉。层循环交叉。(2)外循环可以一层层向内循环进入,结束时由)外循环可以一层层向内循环进入,结束时由里往外一层层退出。里往外一层层退出。(3)内循环体可以直接转入外循环体,实现一个)内循环体可以直接转入外循环体,实现一个循环由多个条件控制的循环结构方式。循环由多个条件控制的循环结构方式。6/16/2024广东松山职业技术学院课件制作组4.4.2 循环程序设计上例延时程序实际延时为10.000294.5 子程序设计子程序设计u在实际程序中,常常会多次进行一些相同的计算和操作。在实际程序中,常常会多次进行一些相同的计算和操作。如数制转换、函数式计算等。如果每次都从头开始编制一如数制转换、函数式计算等。如果每次都从头开始编制一段程序,不仅麻烦,而且浪费存储空间。因此对一些常用段程序,不仅麻烦,而且浪费存储空间。因此对一些常用的程序段,以子程序的形式,事先存放在存储器的某一区的程序段,以子程序的形式,事先存放在存储器的某一区域,当主程序在运行过程中,需要用子程序时,只要执行域,当主程序在运行过程中,需要用子程序时,只要执行调用子程序的指令,使程序转至子程序。子程序处理完毕,调用子程序的指令,使程序转至子程序。子程序处理完毕,返回主程序,继续进行以后的操作。返回主程序,继续进行以后的操作。u调用子程序有几个优点:调用子程序有几个优点:(1)避免对相同程序段的重复编制。)避免对相同程序段的重复编制。(2)简化程序的逻辑结构,同时也便于程序调试。)简化程序的逻辑结构,同时也便于程序调试。(3)节省存储器空间。)节省存储器空间。MCS-51指令系统中,提供了两条调用子程序指令指令系统中,提供了两条调用子程序指令ACALL、LCALL和一条返回主程序的指令和一条返回主程序的指令RET。6/16/2024广东松山职业技术学院课件制作组4.5 子程序设计在实际程序中,常常会多次进行一些相同的计304.5.1 工作寄存器或累加器传递参数工作寄存器或累加器传递参数 u此方法是把此方法是把入口参数入口参数或或出口参数出口参数存放在工存放在工作寄存作寄存器器或或累加器累加器中。使用这种方法程序最简单,运算速中。使用这种方法程序最简单,运算速度也最高。它的缺点是工作寄存器数量有限,不能度也最高。它的缺点是工作寄存器数量有限,不能传递太多的数据;主程序必须先把数据送到工作寄传递太多的数据;主程序必须先把数据送到工作寄存器;参数个数固定,不能由主程序任意改变。存器;参数个数固定,不能由主程序任意改变。例例4-20 请编出能把请编出能把20H单元内两个单元内两个BCD数变换成数变换成相应相应ASCII码码并放在并放在21H(高位(高位BCD数的数的ASCII码)码)和和22H(低位(低位BCD数的数的ASCII码)单元的程序。码)单元的程序。根据根据ASCII表,表,09的的BCD数数和和它们的它们的ASCII码之码之间仅相差间仅相差30H。因此,仅需把。因此,仅需把20H单元中两个单元中两个BCD数拆开,分别和数拆开,分别和30H相加相加就行了。就行了。6/16/2024广东松山职业技术学院课件制作组4.5.1 工作寄存器或累加器传递参数 此方法是把入口参数或314.5.1 工作寄存器或累加器传递参数工作寄存器或累加器传递参数 ORG 0000HASCH:MOV R0,#22H MOV R0,#00H MOV A,20H XCHD A,R0 ORL 22H,#30H SWAP A ORL A,#30H MOV 21H,A SJMP$END6/16/2024广东松山职业技术学院课件制作组4.5.1 工作寄存器或累加器传递参数 324.5.2 用指针寄存器传递参数用指针寄存器传递参数 u由于数据一般存放在存储器中,而不是工作寄存由于数据一般存放在存储器中,而不是工作寄存器中,故可用器中,故可用指针来指示数据的位置指针来指示数据的位置,这样可以大,这样可以大大节省传递数据的工作量,并可实现可变长度运算。大节省传递数据的工作量,并可实现可变长度运算。一般如参数在内部一般如参数在内部RAM中,可用中,可用R0或或R1作指针作指针。可变长度运算时,可用一个寄存器来指出数据长度,可变长度运算时,可用一个寄存器来指出数据长度,也可在数据中指出其长度(如使用结束标记符)。也可在数据中指出其长度(如使用结束标记符)。例例4-21 将将R0和和R1指出的内部指出的内部RAM中两个中两个3字节无字节无符号整数相加,结果送符号整数相加,结果送R0指出的内部指出的内部RAM中。入中。入口时,口时,R0、R1分别指向加数和被加数的低位字节,分别指向加数和被加数的低位字节,出口时出口时R0指向结果的高位字节。利用指向结果的高位字节。利用MCS-51的带的带进位加法指令,可以直接编写出程序。进位加法指令,可以直接编写出程序。6/16/2024广东松山职业技术学院课件制作组4.5.2 用指针寄存器传递参数 由于数据一般存放在存储器中334.5.2 用指针寄存器传递参数用指针寄存器传递参数 ORG 0000HNADD:MOV R7,#3 CLR CNADD1:MOV A,R0 ADDC A,R1 MOV R0,A DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 RET END6/16/2024广东松山职业技术学院课件制作组4.5.2 用指针寄存器传递参数 344.5.3 用堆栈传递参数用堆栈传递参数 n堆栈可以用于传递参数。调用时,堆栈可以用于传递参数。调用时,主程序可主程序可用用PUSH指令把参数压入堆栈中指令把参数压入堆栈中。之后子程序。之后子程序可按堆栈指针访问堆栈中的参数,同时可把可按堆栈指针访问堆栈中的参数,同时可把结果参数送回堆栈中。返回主程序后,结果参数送回堆栈中。返回主程序后,可用可用POP指令得到这些结果参数指令得到这些结果参数。这种方法的优。这种方法的优点是简单,能传递大量参数,不必为特定的点是简单,能传递大量参数,不必为特定的参数分配存储单元。使用这种方法时,由于参数分配存储单元。使用这种方法时,由于参数在堆栈中,故大大简化了中断响应时的参数在堆栈中,故大大简化了中断响应时的现场保护。现场保护。6/16/2024广东松山职业技术学院课件制作组4.5.3 用堆栈传递参数 堆栈可以用于传递参数。调用时,主354.5.3 用堆栈传递参数用堆栈传递参数 例例4-22 一位十六进制数一位十六进制数转换为转换为ASCII码子程序。码子程序。子程序HASC把堆栈中的一位十六进制数变成ASCII码。它先从堆栈中读出表格中存放的数据,然后用它的低4位去访问一个局部的16项的ASCII码表,把得到的ASCII码放回堆栈中,然后返回。它不改变累加器的值。可以按不同的情况调用这个程序。ORG 0000HHASC:MOV R0,SP DEC R0 DEC R0 XCH A,R0 ANL A,#0FH ADD A,#2 MOVC A,A+PC XCH A,R0 RET DB 0123456789 DB ABCDEF END6/16/2024广东松山职业技术学院课件制作组4.5.3 用堆栈传递参数 例4-22 一位十六进制数转换364.5.4 程序段参数传递程序段参数传递n以上这些参数传递方法,多数是在调用子程序以上这些参数传递方法,多数是在调用子程序前,把值装入适当的寄存器传递参数。如果有前,把值装入适当的寄存器传递参数。如果有许多常数参数,这种技术不太有效,因为每个许多常数参数,这种技术不太有效,因为每个参数需要一个寄存器传递,并且在每次调用子参数需要一个寄存器传递,并且在每次调用子程序时需分别用指令把它们装入寄存器中。程序时需分别用指令把它们装入寄存器中。如果需要大量参数,并且这些参数均为常数时,如果需要大量参数,并且这些参数均为常数时,程序段参数传递方法(有时也称为直接参数传程序段参数传递方法(有时也称为直接参数传递)是传递常数的有效方法递)是传递常数的有效方法。调用时,常数作。调用时,常数作为程序代码的一部分,紧跟在调用子程序后面。为程序代码的一部分,紧跟在调用子程序后面。子程序根据栈内的返回地址,决定从何处找到子程序根据栈内的返回地址,决定从何处找到这些常数,然后在需要时,从程序存储器中读这些常数,然后在需要时,从程序存储器中读出这些参数。出这些参数。6/16/2024广东松山职业技术学院课件制作组4.5.4 程序段参数传递以上这些参数传递方法,多数是在调374.5.4 程序段参数传递程序段参数传递例例4-23 字符串发送子程序字符串发送子程序。在实际应用中,经常需要发送各种字符串。这在实际应用中,经常需要发送各种字符串。这些字符串,通常放在些字符串,通常放在EPROM(程序存储器)中。(程序存储器)中。按通常方法,需要先把这些字符装入按通常方法,需要先把这些字符装入RAM中,中,然后用传递指针的方法来实现参数传递。为了然后用传递指针的方法来实现参数传递。为了简便,也可把简便,也可把字符串放在字符串放在EPROM独立区域中独立区域中,然后用传递字符串首地址的方法来传递参数。然后用传递字符串首地址的方法来传递参数。以后子程序可按该地址用以后子程序可按该地址用MOVC指令从指令从EPROM中读出并发送该字符串。但是最简单的中读出并发送该字符串。但是最简单的方法是方法是采用程序段参数传递方法采用程序段参数传递方法采用程序段参数传递方法采用程序段参数传递方法。下例中,字。下例中,字符串以全符串以全0结束。结束。6/16/2024广东松山职业技术学院课件制作组4.5.4 程序段参数传递例4-23 字符串发送子程序。384.5.4 程序段参数传递程序段参数传递 ORG 0000HSOUT:POP DPH ;栈中指针;栈中指针 POP DPLSOT1:CLR A MOVC A,A+DPTR INC DPTR JZ SEND JNB TI,$;$为本条指令地址为本条指令地址 CLR TI MOV SBUF,A SJMP SOT1SEND:JMP A+DPTR END6/16/2024广东松山职业技术学院课件制作组4.5.4 程序段参数传递 O394.5.4 程序段参数传递程序段参数传递下面以发送字符串下面以发送字符串MCS-51 CONTROLLER为例,为例,说明该子程序使用方法。说明该子程序使用方法。ACALL SOUTDB MCS51 CONTROLLERDB 0AH,0DH,0 后面紧接其他程序。后面紧接其他程序。上面这种子程序有几个特点:上面这种子程序有几个特点:(1)它不以一般的)它不以一般的返回指令结尾返回指令结尾,而是采用,而是采用基址基址寄存器加变址寄存器间接转移指令寄存器加变址寄存器间接转移指令来返回到参数表来返回到参数表后的第一条指令。一开始的后的第一条指令。一开始的POP指令已调整了栈指指令已调整了栈指针的内容。针的内容。6/16/2024广东松山职业技术学院课件制作组4.5.4 程序段参数传递下面以发送字符串MCS-51 404.5.4 程序段参数传递程序段参数传递(2)它可适用于)它可适用于ACALL或或LCALL,因为这两种,因为这两种调用指令均把下一条指令或数据字节的地址压入栈调用指令均把下一条指令或数据字节的地址压入栈中。调用程序可位于中。调用程序可位于MCS-51全部地址空间的任何全部地址空间的任何地方,因为地方,因为MOVC指令能访问所有指令能访问所有64 K字节。字节。(3)传递到子程序的参数可按最方便的次序列表,)传递到子程序的参数可按最方便的次序列表,而不必按使用的次序排列。子程序在每一条而不必按使用的次序排列。子程序在每一条MOVC 指令前累加器装入适当的参数,这样基本指令前累加器装入适当的参数,这样基本上可上可“随机访问随机访问”参数表。参数表。(4)子程序只使用累加器)子程序只使用累加器A和数据指针和数据指针DPTR,应,应用程序可以在调用前,把这些寄存器压入堆栈中,用程序可以在调用前,把这些寄存器压入堆栈中,保护它们的内容。保护它们的内容。6/16/2024广东松山职业技术学院课件制作组4.5.4 程序段参数传递(2)它可适用于ACALL或LC414.6.1 算术运算程序的设计算术运算程序的设计n一般说来,单片机应用系统的任务就是对各种一般说来,单片机应用系统的任务就是对各种物理参数进行测试和控制。因此,数据的处理是物理参数进行测试和控制。因此,数据的处理是避免不了的。尽管数据处理并不是避免不了的。尽管数据处理并不是MCS-51单片单片机的优势所在,但运用一些编程技巧和方法,对机的优势所在,但运用一些编程技巧和方法,对于大部分测控应用于大部分测控应用MCS-51单片机还是能胜任的。单片机还是能胜任的。nMCS-51的指令系统提供的是字节运算指令,的指令系统提供的是字节运算指令,所以在处理多字节数的加减运算时,要合理地运所以在处理多字节数的加减运算时,要合理地运用进位(借位)标志。用进位(借位)标志。例例4-24 多字节无符号数的加法。多字节无符号数的加法。设两个设两个N字节的无符号数分别存放在内部字节的无符号数分别存放在内部RAM中中以以DATA1和和DATA2开始的单元中。相加后的结开始的单元中。相加后的结果要求存放在果要求存放在DATA2数据区。数据区。6/16/2024广东松山职业技术学院课件制作组4.6.1 算术运算程序的设计一般说来,单片机应用系统的任424.6.1 算术运算程序的设计算术运算程序的设计程序段如下:程序段如下:ORG 2000H MOV R0,#DATA1 MOV R1,#DATA2 MOV R7,#N;置字节数;置字节数 CLR CLOOP:MOV A,R0 ADDC A,R1;求和;求和 MOV R1,A;存结果;存结果 INC R0;修改指针;修改指针 INC R1 DJNZ R7,LOOP END6/16/2024广东松山职业技术学院课件制作组4.6.1 算术运算程序的设计程序段如下:434.6.2 数码转制程序设计数码转制程序设计u计算机中常用的是二进制码、计算机中常用的是二进制码、BCD码和码和ASCII码。但是,计算机能识别和处理的只有码。但是,计算机能识别和处理的只有二进制码,而输入输出设备(如显示器、打二进制码,而输入输出设备(如显示器、打印机等)常使用印机等)常使用BCD码和码和ASCII码。因此,在码。因此,在计算机中经常需要通过软件进行相互间的转计算机中经常需要通过软件进行相互间的转换。换。1.十六进制数与十六进制数与ASCII码之间的转换码之间的转换二进制数与十六进制数有着直接的对应关系。二进制数与十六进制数有着直接的对应关系。所以,介绍十六进制数与所以,介绍十六进制数与ASCII码的转换。码的转换。6/16/2024广东松山职业技术学院课件制作组4.6.2 数码转制程序设计计算机中常用的是二进制码、BC444.6.2 数码转制程序设计数码转制程序设计例例4-29 将一位十六进制数转换为将一位十六进制数转换为ACSII码码。设十六进制数存放于设十六进制数存放于R0中,转换后的中,转换后的ASCII码存放于码存放于R2中。中。程序如下:程序如下:HTASC:MOV A,R0 ;取出;取出4位二进制数位二进制数 ANL A,#0FH ;屏蔽高位;屏蔽高位 PUSH A ;入栈保护;入栈保护 CLR C SUBB A,#0AH ;4位二进制数减位二进制数减10 POP A ;弹出原;弹出原4位二进制数位二进制数 JC LOOP ;该数小于;该数小于10,加,加30H ADD A,#37H ;大于等于;大于等于10,加,加37H SJMP LOOP1LOOP:ADD A,#30H LOOP1:MOV R 2,A RET 6/16/2024广东松山职业技术学院课件制作组4.6.2 数码转制程序设计例4-29 将一位十六进制数45本课小结本课小结v汇编语言的源程序结构紧凑、灵活,编译后的目标程序效率高,具有占存储空间少、运行速度快、实时性强等优点,应用相当广泛。但是由于它是面向机器的语言,所以它缺乏通用性,而且编程复杂繁琐。v在进行程序设计时,首先需要对单片机应用系统预完成的任务进行深入地分析,明确系统的设设计任务、功能要求、技术指标计任务、功能要求、技术指标。然后,要对系统的硬件资源和工作环境进行分析和熟悉。经过分析、研究和明确规定后,利用数学方法或数学模型来对其进行描述,从而把一个实际问题转化成由计算机进行处理的问题。最后,对各种算法进行分析比较,并进行合理的优化。6/16/2024广东松山职业技术学院课件制作组本课小结汇编语言的源程序结构紧凑、灵活,编译后的目标程序效率46本课小结本课小结v在程序设计中,应尽可能使用循环程序和子程序。因为采用循环结构和子程序可以使程序的容量大大减少,提高程序的效率,节省内存。vMCS51系列单片机汇编语言的语句行由四个字段组成,汇编程序能对这种格式正确的识别。伪指令是汇编程序能够识别的汇编命令。它不是单片机执行的指令,没有对应的机器码,仅是用来对汇编过程进行某种控制。v汇编语言程序设计是实践性较强的一种单片机应用技能,它需要较多的编程训练和实际应用经验的积累。本章仅列出了一些最为基本的程序段示例以供参考。6/16/2024广东松山职业技术学院课件制作组本课小结在程序设计中,应尽可能使用循环程序和子程序。因为采用47思考题及习题思考题及习题 4-1若有两个无符号数x,y分别存放在内部存储器50H、51H单元中,试编写一个程序实现x*10+y,结果存入52H、53H两个单元中。4-2从内部存储器20H单元开始,有30个数据。试编一个程序,把其中的正数、负数分别送以51H和71H开始的存储单元,并分别记下正数、负数的个数送50H和70H单元。4-3内部存储单元40H中有一个ASCII码字符,试编一程序,给该数的最高位加上奇校验。4-4编写一段程序,将存储在自DATA单元开始的一个四字节数(高位在前)取补后送回原单元。6/16/2024广东松山职业技术学院课件制作组思考题及习题 4-1若有两个无符号数x,y48思考题及习题思考题及习题 4-5以BUF1为起始地址的外存储区中,存放有16个单字节无符号二进制数,试编一程序,求其平均值并送BUF2单元。4-6在DATA1单元中有一个带符号8位二进制数x。编一程序,按以下关系计算y值,送DATA2单元。4-7设内部RAM中30H和31H单元中有两个带符号数,求出其中的大数存放在32H单元中。4-8利用逻辑尺控制的方法,设计一个主程序,在第1、3、5、6次调用SB1子程序,第2、4、7、8次调用SB2程序。6/16/2024广东松山职业技术学院课件制作组思考题及习题 4-5以BUF1为起始地址49思考题及习题思考题及习题4-9将DATA单元存放的以ASCII码表示的16进制数转换成十进制数存放于DATA+1单元。4-10编一个将十六进制数转换成十进制数的子程序。4-11编一程序,将存储区DATA1单元开始的20个单字节数据依次与DATA2单元开始的20个单字节数据进行交换。4-12试编写一程序,将存储区DATA1单元开始的50个单字节数逐一移至DATA2单元开始的存储区中。6/16/2024广东松山职业技术学院课件制作组思考题及习题4-9将DATA单元存放的以ASCII码表示50思考题及习题思考题及习题4-13试编写一采用查表法求120的平方数子程序(要求:x在累加器A中,1x20,平方数高位存放在R6,低位存放在R7)。4-14试编写一个三字节无符号数乘法程序。4-15试编写一个三字节无符号数除法程序。6/16/2024广东松山职业技术学院课件制作组思考题及习题4-13试编写一采用查表法求120的平方51
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


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

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


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