单片机原理及应用第四章.ppt

上传人:wuy****n92 文档编号:88507480 上传时间:2023-04-26 格式:PPT 页数:78 大小:354KB
返回 下载 相关 举报
单片机原理及应用第四章.ppt_第1页
第1页 / 共78页
单片机原理及应用第四章.ppt_第2页
第2页 / 共78页
点击查看更多>>
资源描述

《单片机原理及应用第四章.ppt》由会员分享,可在线阅读,更多相关《单片机原理及应用第四章.ppt(78页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第四章第四章 汇编语言程序设计汇编语言程序设计4 4.1.1 概述概述 计计算算机机需需通通过过执执行行程程序序才才能能完完成成某某一一项工作。项工作。所谓程序是指为若干指令的有序集合。所谓程序是指为若干指令的有序集合。用于程序设计的语言可分为三种:用于程序设计的语言可分为三种:机器语言、汇编语言和高级语言。机器语言、汇编语言和高级语言。1、机器语言、机器语言 计计算算机机只只能能识识别别二二进进制制代代码码,此此二二进进制制代代码码指令称为机器语言指令。指令称为机器语言指令。直直接接用用机机器器语语言言编编写写的的程程序序称称为为机机器器语语言言程程序。序。2、汇编语言、汇编语言 用用助助记

2、记符符来来表表示示机机器器语语言言指指令令称称为为汇汇编编语语言言指指令。用汇编语言编写的程序称为汇编语言程序。令。用汇编语言编写的程序称为汇编语言程序。计算机能执行的是机器代码。计算机能执行的是机器代码。以上两种语言与机器本身有关,是以上两种语言与机器本身有关,是“面向面向机器机器”的语言。的语言。3、高级语言、高级语言 参参照照数数学学语语言言而而设设计计的的、近近似似于于人人们日常用语的语言。们日常用语的语言。高高级级语语言言与与机机器器无无关关,直直观观、易易学学、易懂,通用性强、易于移植。易懂,通用性强、易于移植。由由于于汇汇编编语语言言是是计计算算机机能能提提供供给给用用户户的的最

3、最快快而而又又最最有有效效的的语语言言,能能直直接接利利用用计计算算机机硬硬件件特特性性并并能能直直接接控控制制硬硬件件,在在对对程程序序的的空空间间和和时时间间要要求求较较高高的的场场合合,特特别别是是在在需需要要直直接接控控制制硬硬件件的场合,一般采用汇编语言。的场合,一般采用汇编语言。4.2 程序程序设计的方法设计的方法 程序设计的一般步骤:程序设计的一般步骤:1分析问题分析问题 2确定算法确定算法 3设计程序流程图设计程序流程图 4分配内存单元分配内存单元 5编写汇编语言源程序编写汇编语言源程序 6调试程序调试程序 当当然然,对对于于情情况况较较简简单单的的问问题题,可可直直接接由由算

4、算法法编写程序。编写程序。一一般般而而言言,对对同同一一个个问问题题,不不同同的的思思路路设设计计的的程程序序有有所所不不同同,方方法法也也不不同同。一一个个程程序序的的设设计计好好坏坏主主要要取取决决于于所所占占用用的的程程序序存存储储器器单单元元、工工作作寄寄存存器器单单元元和和程程序序执执行行的的速速度度等等因因素素,这这需需要要通通过过不不断摸索、实践才能达到。断摸索、实践才能达到。程程序序设设计计的的理理想想方方法法是是结结构构化化程程序序设设计计,通通常常采采用用五五种种基基本本结结构构:即即顺顺序序结结构构、分分支支结结构构、循循环环结结构构、子子程程序序和和中中断服务程序断服务

5、程序。4.34.3 汇编程序格式与伪指令汇编程序格式与伪指令 汇编程序:指用汇编语言编写的程序。汇编程序:指用汇编语言编写的程序。汇编语言源程序是由汇编语句(即指令)组成的。汇编语言源程序是由汇编语句(即指令)组成的。在程序中,指令书写具有如下格式:在程序中,指令书写具有如下格式:标号:操作码助记符目的操作数,源操作数;注释标号:操作码助记符目的操作数,源操作数;注释 START:MOV A,30H;A(30H)将汇编语言源程序转换为单片机能执行的机器将汇编语言源程序转换为单片机能执行的机器码形式的目标程序的过程叫汇编。利用计算机汇码形式的目标程序的过程叫汇编。利用计算机汇编,要提供一些必要的

6、信息和参数,这些提供信编,要提供一些必要的信息和参数,这些提供信息的命令叫做伪指令。息的命令叫做伪指令。源程序(汇编语言程序)源程序(汇编语言程序)目标程序(机器语言程序目标程序(机器语言程序)机器或手工汇编机器或手工汇编伪伪指令指令 伪指令伪指令是汇编程序能够识别并对汇编过是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。它程进行某种控制的汇编命令。它不要求计不要求计算机做任何操作,也不产生机器码,不影算机做任何操作,也不产生机器码,不影响程序的执行,仅提供帮助汇编的一些信响程序的执行,仅提供帮助汇编的一些信息。息。MCS51单片机主要有单片机主要有8条伪指令。条伪指令。一、起始地址设定

7、伪指令一、起始地址设定伪指令ORG 格式:格式:ORG 地址(十六进制表示)地址(十六进制表示)用用来来说说明明其其后后面面程程序序段段在在存存储储器器中中存存放放的的起起始始地地址址。在在一一个个源源程程序序中中,可可以以多多次次使使用用ORG指令。指令。例如程序:例如程序:ORG 0000H LJMP MAIN ORG 0030H MAIN:MOVA,#20H MOVB,#30H 在每一个汇编语言源程序的开始,在每一个汇编语言源程序的开始,都要设都要设置一条置一条ORG伪指令来指定该程序在存储器中伪指令来指定该程序在存储器中存放的起始位置。存放的起始位置。若省略若省略ORG伪指令,则该伪指

8、令,则该程序段从程序段从0000H单元开始存放。在一个源程单元开始存放。在一个源程序中,序中,可以多次使用可以多次使用ORG伪指令规定不同程伪指令规定不同程序段或数据段存放的起始地址,但序段或数据段存放的起始地址,但要求地址值要求地址值由小到大依序排列由小到大依序排列,不允许空间重叠。,不允许空间重叠。二、汇编结束伪指令二、汇编结束伪指令 END格式:格式:END 该指令的该指令的功能功能是结束汇编。是结束汇编。一个源程序只能有一个一个源程序只能有一个END命令。命令。汇编汇编程序遇到程序遇到END伪指令后即结束汇编。处于伪指令后即结束汇编。处于END之后的程序,汇编程序将不处理。之后的程序,

9、汇编程序将不处理。三、赋值伪指令三、赋值伪指令 EQU格式:变量格式:变量 EQU 数值数值 给变量标号赋予一个确定的数值。给变量标号赋予一个确定的数值。例:例:DATE EQU 30H TAB EQU 1000H MOV A,DATE MOV DPTR,TAB 例:例:LEN EQU 10 SUM EQU 21H BLOCK EQU 22H CLR A CLR C MOV R7,LEN MOV R0,BLOCK LOOP:ADDC A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A END 该程序的功能是,把该程序的功能是,把BLOCK单元开始存放的单元开始存放的10个个无

10、符号数进行求和,并将结果存入无符号数进行求和,并将结果存入SUM单元中。单元中。四、四、DATA数值地址赋值伪指令数值地址赋值伪指令格式:字符名称格式:字符名称 DATA 表达式表达式功功能能:DATA与与EQU基基本本相相同同,即即将将DATA右右边边表表达达式式的的值值赋赋给给一一个个字字符符名名称称。二二者者的的区区别别是是:EQU必必须须先先定定义义,后后使使用用;而而DATA可可先先使使用用后后定定义义。因因此此,EQU一一般般放放在在程程序序的的开开始始,而而DATA可可放放在在程程序的任何地方。序的任何地方。五、字节数据定义伪指令五、字节数据定义伪指令 DB格式:标号:格式:标号

11、:DB 字节数据表。字节数据表。功功能能是是从从标标号号指指定定的的地地址址开开始始,在在ROM中中把把数数据据以以字字节节数数的的形形式式存存放放在在存存储储器器单单元元中中。一一个个数数据据占一个存储单元。占一个存储单元。例:例:FIRST:DB 73,04,53,38,00,46 SECON:DB 02H,36H,7AH,34H六、字数据定义伪指令六、字数据定义伪指令 DW格式:标号:格式:标号:DW 字数据表字数据表与与DB类类似似,但但定定义义字字,且且把把字字的的高高字字节节数数存存入入低低地地址址单单元元,低低字字节节数数存存入入高高地地址址单单元元,按按顺顺序连续存放。序连续存

12、放。例如例如:ORG 1400HTAB:DW 324AH,3CH 汇编后,(汇编后,(1400H)=32H,(,(1401H)=4AH,(1402H)=00H,(,(1403H)=3CH。七、空间定义伪指令七、空间定义伪指令 DS格式:标号:格式:标号:DS 表达式。表达式。从指定的地址单元开始,保留由表达式所指定从指定的地址单元开始,保留由表达式所指定的数量存储单元,并都填以零值。的数量存储单元,并都填以零值。例:例:ORG 3000HBUF:DS 50 汇编后,从地址汇编后,从地址3000H开始保留开始保留50个存个存储单元作为备用单元。储单元作为备用单元。八、位地址符号定义伪指令八、位地

13、址符号定义伪指令 BIT格式:变量格式:变量 BIT 位地址位地址 确确定定字字符符名名为为确确定定的的位位地地址址(数数值值地地址址或或符符号号地地址址)值。值。例:例:FLG BIT 00H FAST BIT 20H CLR FLG SETB FAST 4.4.1 顺序程序顺序程序 顺序程序是指无分支、无循环结构的程序。顺序程序是指无分支、无循环结构的程序。其执行流程是依指令在存储器中的存放顺序其执行流程是依指令在存储器中的存放顺序进行的。进行的。顺顺序序程程序序是是所所有有程程序序设设计计中中最最基基本本、最最简单,应用最多的程序结构。简单,应用最多的程序结构。4.4 基本程序基本程序结

14、结构构例例1:把片内:把片内RAM中中50H地址单元中的地址单元中的内容与内容与40H地址单元中的内容互换。地址单元中的内容互换。方法一:直接地址传送方法一:直接地址传送MOV A,50HMOV B,40HMOV 40H,AMOV 50H,BSJMP$例例1:把片内:把片内RAM中中50H地址单元中的地址单元中的内容与内容与40H地址单元中的内容互换。地址单元中的内容互换。方法二:间接地址传送方法二:间接地址传送MOV R0,40HMOV R1,50HMOV A,R0MOV B,R1MOV R1,AMOV R0,BSJMP$例例1:把片内:把片内RAM中中50H地址单元中的地址单元中的内容与内

15、容与40H地址单元中的内容互换。地址单元中的内容互换。方法三:直接地址间相互传送方法三:直接地址间相互传送MOV R7,50HMOV 50H,40HMOV 40H,R7SJMP$例例1:把片内:把片内RAM中中50H地址单元中的地址单元中的内容与内容与40H地址单元中的内容互换。地址单元中的内容互换。方法四:字节交换传送方法四:字节交换传送MOV A,50HXCH A,40HMOV 50H,ASJMP$方法五:堆栈传送方法五:堆栈传送PUSH 50HPUSH 40HPOP 50HPOP 40HSJMP$例例2:双字节无符号数加法:双字节无符号数加法 设设被被加加数数存存放放在在内内部部RAM的

16、的21H、20H单单元元,加加数数存存放放在在内内部部RAM的的31H、30H单单元元,相相加加的的结结果果存存放放在在内内部部RAM的的22H、21H、20H单元中(高字节在前)单元中(高字节在前)。程序段如下:程序段如下:ORG 0030HMOV R0,20H;被加数的低字节地址;被加数的低字节地址MOV R1,30H;加数的低字节地址;加数的低字节地址MOV A,R0 ;取被加数低字节;取被加数低字节ADD A,R1 ;加上加数低字节;加上加数低字节MOV R0,A ;保存低字节相加结果;保存低字节相加结果INC R0 ;指向被加数高字节;指向被加数高字节INC R1 ;指向加数高字节;

17、指向加数高字节MOV A,R0 ;取被加数高字节;取被加数高字节ADDC A,R1 ;加上加数高字节(带进位加);加上加数高字节(带进位加)MOV R0,A ;存高字节相加结果;存高字节相加结果INCR0;修改地址;修改地址CLRA ;A清零清零ADDCA,00H;加上高位进位;加上高位进位MOVR0,A;保存最高位进位;保存最高位进位SJMP例 设设R2寄存器中保存两个压缩的寄存器中保存两个压缩的BCD码,码,试将它们拆开,并转换成试将它们拆开,并转换成ASCII码分别码分别放在片内放在片内RAM 11H(高位高位)和和10H(低低位位)单元中。单元中。根据根据ASCII码表可知,码表可知,

18、09的的BCD数与数与ASCII码表只相差码表只相差30H。因此,本题只需将。因此,本题只需将R2中的两个中的两个BCD数拆开,分别加上数拆开,分别加上30H即即可。可。程序段如下:程序段如下:MOV A,R2 ;(R2)AANL A,#0FH;低位;低位BCD数送数送AORL A,#30H;低位;低位BCD数转换成数转换成ASC码码MOV 10H,A ;送;送10H单元保存单元保存MOV A,R2ANL A,#0F0H;取高位;取高位BCD数数SWP A ;高位;高位BCD数送低数送低4位位ORL A,#30H;完成高;完成高4位位BCD数的转换数的转换MOV 11H,A ;送;送11H单元

19、保存单元保存SJMP4.4.2 分支程序分支程序 在在程程序序设设计计过过程程中中,有有时时要要根根据据不不同同情情况况执执行行不不同同功功能能的的程程序序段段,这这种种根根据据程程序序要要求求而而改改变变程程序序执执行行顺顺序序的的设计,称为分支程序设计。设计,称为分支程序设计。分分支支程程序序设设计计分分为为无无条条件件分分支支程程序序设设计计和和条条件件分分支支程程序序设设计计两两类类。无无条条件件分分支支程程序序中中含含有有LJMP、AJMP等等无无条条件件转转移移指指令令,执执行行这这类类指指令令,程程序序将将无无条条件件转转移移。条条件件分分支支程程序序中中含含有有判判零零、比较、

20、位控制等条件转移指令。比较、位控制等条件转移指令。例例:片外片外RAM 2000H、2001H单元分别存放单元分别存放两个数,判断这两个数是否相等,如果相两个数,判断这两个数是否相等,如果相等,则位地址等,则位地址7FH置置1,否则清零。,否则清零。若判断两个数相等使用比较转移指令就若判断两个数相等使用比较转移指令就很容易实现该题中的要求,程序流程如图很容易实现该题中的要求,程序流程如图所示。所示。判断两个数相等的程序流程图判断两个数相等的程序流程图程序如下:程序如下:ORG 0100HMOV DPTR,#2000H;地址指针指;地址指针指2000H单元单元MOVX A,DPTR;(2000H

21、)AMOV R0,A;AR0MOV DPTR,#2001H;地址指针指;地址指针指2001H单元单元MOVX A,DPTR;(2001H)AMOV 30H,R0CJNEA,30H,NE;若两个数不相等,则转;若两个数不相等,则转NESETB 7FH;若两个数相等,则;若两个数相等,则7FH单元置单元置1AJMP OVER;转;转OVERNE:CLR7FH;7FH单元清零单元清零OVER:SJMP例例 设设VAR 单元内有一自变量单元内有一自变量X,请按如,请按如下条件编程求函数值下条件编程求函数值Y并存入并存入FUNC单元单元中。中。按条件求函数按条件求函数Y的流程图的流程图程序如下:程序如下

22、:ORG 0100HVAR EQU 30HFUNC EQU 31HMOV A,VAR;XA JZ DONE ;若;若X=0,则转,则转DONEJNB ACC.7,POSI;若;若X0,则转,则转POSIMOV A,#0FFH;若若X0,则则-1A,FFH为为-1的补码的补码SJMP DONE ;转;转DONE POSI:MOV A,#01H;1A DONE:MOV FUNC,A;存;存Y值值SJMP4.4.3 4.4.3 循环程序循环程序在程序中包含重复执行的程序段称为在程序中包含重复执行的程序段称为循环程序设计。循环程序可以使程序结构循环程序设计。循环程序可以使程序结构性强、可读性好,从而大

23、大提高了程序质性强、可读性好,从而大大提高了程序质量。量。如将如将150这这50个整个整数分别送入内部数分别送入内部RAM中中地址为地址为30H开始的单元开始的单元中,若用顺序结构,则中,若用顺序结构,则需需50个传送指令个传送指令“MOV direct,#data”,而用,而用下面的循环结构程序完下面的循环结构程序完成,显然简单、清晰、成,显然简单、清晰、明了。明了。程序流程图如图所示。程序流程图如图所示。程序如下:程序如下:MOV R7,#50;循环初始化;循环初始化MOV R0,#30HMOV A,#01LOOP:MOV R0,A;循环处理;循环处理INC R0INC ADJNZ R7,

24、LOOP;循环控制;循环控制SJMP ;循环结束;循环结束例例统计单字节变量统计单字节变量X中有多少位为中有多少位为1,并存,并存入入ONE 变量中。变量中。使用带进位左循环移位指令和位判断使用带进位左循环移位指令和位判断转移指令,分别将转移指令,分别将X变量最高位移入进位变量最高位移入进位标志位标志位CY中并判断其值,若为中并判断其值,若为1,则将,则将ONE单元加单元加1。这样重复操作八次即可。这样重复操作八次即可。ORG 1000H X EQU 20H ONE EQU 30HMOV ONE,#00H;ONE中初始值为中初始值为0CLR C ;标志位;标志位CY清零清零MOV A,X;XA

25、MOV R7,#08H;R7存放循环次数存放循环次数L0:RLC A;带进位左循环;带进位左循环1位位JNC L1;CY为为0转转L1INC ONE ;CY为为1给给ONE单元加单元加1L1:DJNZ R7,L0;循环控制;循环控制SJMP例例在首地址为片外在首地址为片外RAM 2000H数据缓冲区中,连数据缓冲区中,连续存放续存放100个非零的无符号单字节数,求出其中最个非零的无符号单字节数,求出其中最大的偶数。大的偶数。用位操作指令用位操作指令JB对操作数最末位进行判断,若对操作数最末位进行判断,若为为1则是奇数,为则是奇数,为0则是偶数。用则是偶数。用SUBB减法指令,减法指令,通过标志

26、位通过标志位CY可判断两个操作数的大小。程序流可判断两个操作数的大小。程序流程图如图所示。程图如图所示。求最大偶数的程序流程图求最大偶数的程序流程图 程序如下:程序如下:ORG 1000HMAX EQU 30HMOV MAX,#00H;00MAXMOV R7,#64H;存放循环次数;存放循环次数MOV DPTR,#2000H;地地址址指指针针DPTR指指向向缓缓冲区首地址冲区首地址L1:MOVX A,DPTR;从缓冲区中取数送入;从缓冲区中取数送入A中中 JB ACC.0,ODD;是奇数转至;是奇数转至ODDMOV R1,A;是偶数与;是偶数与MAX比较比较SUBB A,MAX JC ODD;

27、比;比MAX小转至小转至ODD MOV MAX,R1ODD:INC DPTR;改变地址取下一个数;改变地址取下一个数 DJNZ R7,L1;控制循环;控制循环 SJMP4.4.4 4.4.4 子程序及其调用子程序及其调用在实际应用中,经常会遇到一些带有通在实际应用中,经常会遇到一些带有通用性的问题,例如:数值转换、数值计算等,用性的问题,例如:数值转换、数值计算等,在一个程序中可能要使用多次。这时可以将在一个程序中可能要使用多次。这时可以将其设计成通用的子程序供随时调用。其设计成通用的子程序供随时调用。子程序主要特点子程序主要特点是,在执行过程中需要由其它程是,在执行过程中需要由其它程序来调用

28、,执行完后又需要把执行流程返回到调用序来调用,执行完后又需要把执行流程返回到调用该子程序的主程序。该子程序的主程序。RETLCALL SUB子程序调用要注意的问题:子程序调用要注意的问题:保护子程序占用的存储单元和寄存器保护子程序占用的存储单元和寄存器设置好入口和出口参数(参数传递)设置好入口和出口参数(参数传递)子程序中可再次调用子程序(嵌套)子程序中可再次调用子程序(嵌套)LCALL ARETRETLCALL B例设内部设内部RAM 20H、21H单元中有两个单元中有两个数数a和和b,编程求,编程求c=a2+b2并把并把c送入内部送入内部RAM 22H单元。单元。该程序由两部分组成:主程序

29、和子程序。该程序由两部分组成:主程序和子程序。主程序通过累加器主程序通过累加器A传送入口参数传送入口参数a和和b,子,子程序用于求平方并将结果通过累加器程序用于求平方并将结果通过累加器A传送传送给主程序。给主程序。START:MOV A,20H;aA ACALLSQR;求;求a2 MOV R0,A;a2R0 MOV A,21H;bAACALLSQR;求;求b2 ADD A,R0;a2+b2A MOV 22H,A;存入;存入22H单元单元 SJMP$SQR:ADD A,#01H;地址调整;地址调整 MOVC A,A+PC;查平方表;查平方表 RET;返回;返回TAB:DB 0,1,4,9,16

30、DB 25,36,49,64,81 例:将例:将R1、R2、R3、R4四个工作寄存器四个工作寄存器中的中的BCD码数据依次相加,要求中间计算结码数据依次相加,要求中间计算结果与最后的和都仍为果与最后的和都仍为BCD码,且存入片内码,且存入片内RAM。设四个工作寄存器中的设四个工作寄存器中的BCD码数据相加码数据相加后其和仍为后其和仍为2位位BCD码,无溢出;码,无溢出;(R1)+(R2)后的和存入片内后的和存入片内RAM的的30H单元,再加单元,再加(R3)后的和存入后的和存入31H单元,总的和存入单元,总的和存入32H单元。单元。则主程序为:则主程序为:主程序为:主程序为:ORG 0050H

31、MOV R0,#30H MOV A,R1ADD A,R2 ;(R1)+(R2)ACALL SUB ;调用子程序进行;调用子程序进行BCD调整,调整,;并存和;并存和ADD A,R3 ;(R1)+(R2)+(R3)ACALL SUBADD A,R4 ;(R1)+(R2)+(R3)+(R4)ACALL SUB 子程序为:子程序为:ORG 01A0H ;十进制调整与存和子程序;十进制调整与存和子程序SUB:MOV R7,A ;保护累加器;保护累加器A的内容,以便的内容,以便 ;返回主程序继续使用;返回主程序继续使用 DA A MOV R0,A ;把当前和调整成;把当前和调整成BCD码后存码后存 ;入

32、;入R0所指单元所指单元 INC R0 ;调整地址指针;调整地址指针 MOV A,R7 ;恢复累加器;恢复累加器A的内容,使的内容,使A中中 ;仍为调用子程序时的和;仍为调用子程序时的和 RET ;返主;返主4.5 常用程序常用程序举举例例4.5.1 十六进制数与十六进制数与ASCII码间的转换码间的转换 十六进制数与十六进制数与ASCII码的对应关系如表所示。当码的对应关系如表所示。当十六进制数在十六进制数在09之间时,其对应的之间时,其对应的ASCII码值为码值为该十六进制数加该十六进制数加30H;当十六进制数在;当十六进制数在AF之间时,之间时,其对应的其对应的ASCII码值为该十六进制

33、数加码值为该十六进制数加37H。例例 将将20H单单元元中中的的两两个个十十六六进进制制数数转转换换成成ASCII码码,低低4位位的的ASCII码码保保存存在在21H单元,高单元,高4位的位的ASCII码保存在码保存在22H单元。单元。MOV A,20H;(20H)AANL A,0FH;屏蔽高;屏蔽高4位位ACALL CHANGE;求低位十六进制数的;求低位十六进制数的ASCII码码MOV 21H,A;保存低位十六进制数的;保存低位十六进制数的ASCII码码MOV A,20H;(20H)AANL A,#0F0H;屏蔽低;屏蔽低4位位SWAP A;高位十六进制数送低;高位十六进制数送低4位位AC

34、ALL CHANGE;求高位十六进制数的;求高位十六进制数的ASCII码码MOV 22H,A ;保存高位十六进制数的;保存高位十六进制数的ASCII码码SJMP$CHANGE:PUSH A;操作数进栈保护;操作数进栈保护 CLR C;进位标志清零;进位标志清零 SUBB A,#0AH;与;与10比较比较 POP A;取出操作数;取出操作数 JC NUM;比;比10小转小转NUM ADD A,#07H;大于等于;大于等于10加加37HNUM:ADD A,#30H;加;加30H RET例例 将多位十六进制数转换成将多位十六进制数转换成ASCII码。码。设地址指针设地址指针R0指向十六进制数低位,指

35、向十六进制数低位,R2中存放字节数,转换后地址指针中存放字节数,转换后地址指针R0指向指向十六十六进制数进制数的高位。的高位。R1指向要存放的指向要存放的ASCII码的码的高高位地址。实现程序如下:位地址。实现程序如下:HTASC:MOV A,R0 ;取低;取低4位二进制数位二进制数 ANL A,#0FH ;ADD A,#15 ;偏移量修正;偏移量修正 MOVC A,A+PC ;查表;查表 MOV R1,A ;存;存ASCII码码 INC R1 ;MOV A,R0 ;取十六进制高;取十六进制高4位位 SWAP A ANL A,#0FH ;ADD A,#06H ;偏移值修正;偏移值修正 MOVC

36、 A,A+PC ;MOV R1,A INC R0 ;指向下一单元;指向下一单元 INC R1 ;DJNZ R2,HTASC ;字节数字节数存于存于R2 RETASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H4.5.2 数据处理数据处理1查询查询例例 在在外外部部RAM 1000H开开始始的的地地址址单单元元中中存存放放30个个数数据据,找找出出其其中中的的奇奇数数存存入入内内部部RAM 20H开开始始的的存存储储单单元元中中,并并统统计计奇奇数数的的个数,存入个数,存入3FH单元。单元。用用

37、位位操操作作指指令令对对操操作作数数最最低低位位进进行行判判断断,若若为为1即即为为奇奇数数。本本题题中中,DPTR是是片片外外数数据据缓缓冲冲区区地地址址指指针针,R0是是片片内内数数据据缓缓冲冲区区地地址址指针。指针。ORG 0030HMOV DPTR,#1000H;指向片外缓冲区首地址;指向片外缓冲区首地址MOV R0,#20H;指向片内缓冲区首地址;指向片内缓冲区首地址MOV R7,#30;循环次数送入;循环次数送入R7MOV 3FH,#00H;清零;清零LP:MOVX A,DPTR;取数;取数JNB ACC.0,EVEN ;偶数转;偶数转EVENMOV R0,A;奇数保存;奇数保存I

38、NC R0;修改片内地址;修改片内地址INC 3FH;修改统计个数;修改统计个数EVEN:INC DPTR ;修改片外地址;修改片外地址DJNZ R7,LP ;控制循环;控制循环SJMP2排序排序 例例 将将片片内内RAM 30H开开始始的的连连续续16个个单单元元的的数数据据按从小到大的顺序排序。按从小到大的顺序排序。此此题题采采用用的的是是冒冒泡泡排排序序法法,即即对对这这16个个数数据据组组成成的的数数据据串串,依依次次将将相相邻邻两两数数分分别别进进行行比比较较,若若后后面面的的数数小小于于前前面面的的数数,则则比比较较的的相相邻邻两两数数互互换换,且且置置位位地地址址单单元元7FH为

39、为1。若若这这组组数数据据比比较较完完后后,相相邻邻两两数数有有交交换换(即即交交换换标标志志位位7FH为为1),则则再再重重新新进进行行两两两两比比较较,直直到到16个个数数已已从从小小到到大大排排序序,相相邻邻两两数数比比较较后后不不再再交交换换为为止止。交交换换标标志志位位7FH用用来来控控制制是是否否再再需需要要重重新新两两两两比比较较。程程序序流流程程如如图所示。图所示。排序程序流程图排序程序流程图 ORG 2000HSORT:MOV R1,#30H;指向数据块首地址;指向数据块首地址MOV R7,#10H;数据块长度送;数据块长度送R7CLR 7FH;交换标志位清零;交换标志位清零

40、DEC R7;块长减;块长减1为比较次数为比较次数LOOP1:MOV A,R1;取相邻两数中的前一个数;取相邻两数中的前一个数MOV 20H,AINC R1MOV A,R1;取相邻两数中的后一个数;取相邻两数中的后一个数CJNE A,20H,LOOP;相邻两数比较;相邻两数比较LOOP:JNC NEXT ;前者小于后者转至;前者小于后者转至NEXTXCH A,20H ;前者大于后者,相邻两数互换;前者大于后者,相邻两数互换MOV R1,ADEC R1MOV R1,20HINC R1;恢复数据块指针;恢复数据块指针SETB 7FH;置;置1标志位标志位NEXT:DJNZ R7,LOOP1 ;所有

41、相邻两数未比较完,转至;所有相邻两数未比较完,转至LOOP1JB 7FH,SORT ;交换标志位为;交换标志位为1,转至,转至SORTSJMP4.5.3 算术运算算术运算1多字多字节BCD码加法加法例例 已知在已知在BLOCK1和和BLOCK2为始址的存为始址的存储区中分别有长度为储区中分别有长度为N字节压缩的字节压缩的BCD码,请码,请编写程序使它们相加并将和送入编写程序使它们相加并将和送入BLOCK1为为始址的存储单元。始址的存储单元。使使用用加加法法指指令令从从低低字字节节相相加加,因因为为是是BCD码相加,还需用码相加,还需用DA指令调整。指令调整。ORG 0100HMOV R7,#N

42、;数据块长度送;数据块长度送R7MOV R0,#BLOCK1;被加数始址送;被加数始址送R0MOV R1,#BLOCK2;加数始址送;加数始址送R1CLR C;CY清零清零LOOP:MOV A,R0;被加数送;被加数送AADDC A,R1;相加;相加DA A;BCD码调整码调整MOV R0。A;存和;存和INC R0;修改被加数地址指针;修改被加数地址指针INC R1;修改加数地址指针;修改加数地址指针DJNZ R7,LOOP;未加完,则转至;未加完,则转至LOOPJNC RTN;最高位无进位转至;最高位无进位转至RTNMOV R0,#01H;有进位则保存;有进位则保存RTN:SJMP2、多字

43、节数乘法运算、多字节数乘法运算例例 已知在寄存器已知在寄存器R4R5和和R2R3中分别存放有双中分别存放有双字节的被乘数和乘数字节的被乘数和乘数(R5、R3存放低存放低8位,位,R4、R2存放高存放高8位位),试编程求积并存入,试编程求积并存入BLOCK开始的连开始的连续四个存储单元续四个存储单元(低字节在前,高字节在后低字节在前,高字节在后)。AT89C51乘法指令只能完成两个乘法指令只能完成两个8位无符号数相位无符号数相乘,因此乘,因此16位无符号数求积必须将它们分解成四个位无符号数求积必须将它们分解成四个8位数相乘来实现,其方法是边乘边加。原理和过位数相乘来实现,其方法是边乘边加。原理和

44、过程如图所示。程如图所示。双字节无符号数乘法原理图双字节无符号数乘法原理图ORG 1000HBLOCK EQU 30HMOV R0,#BLOCK;指向积单元首址;指向积单元首址MOV A,R5MOV B,R3MUL AB;bdMOV R0,A;保存;保存bdLMOV A,BINC R0MOV R0,A;保存;保存bdHMOV A,R4MOV B,R3MUL AB;adADD A,R0;bdH+adLMOVR0,AINC R0MOV A,BADDCA,#00H;adH+进位进位MOV R0,ADEC R0MOV A,R5MOV B,R2MUL AB;bcADD A,R0;bcL与与bdh、adL、进位累加、进位累加MOV R0,AMOV A,BINC R0ADDC A,R0;bcH与与adH、进位累加、进位累加MOV R0,AINC R0CLR AADDC A,#00HMOV R0,A;保存进位;保存进位MOV A,R4MOV B,R2MUL AB;acDEC R0ADD A,R0;acL与与adH、bcH、进位累加、进位累加MOV R0,AMOV A,BINC R0ADDC A,R0;ac与进位累加与进位累加MOV R0,ASJMP本章到此结束本章到此结束

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com