单片机原理与接口技术(第七版)课件 项目2 指令_第1页
单片机原理与接口技术(第七版)课件 项目2 指令_第2页
单片机原理与接口技术(第七版)课件 项目2 指令_第3页
单片机原理与接口技术(第七版)课件 项目2 指令_第4页
单片机原理与接口技术(第七版)课件 项目2 指令_第5页
已阅读5页,还剩184页未读 继续免费阅读

下载本文档

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

文档简介

单片机指令和程序设计DANPIANJIYUANLIYUJIEKOUJISHU单片机原理与接口技术(第七版)“十四五”职业教育国家规划教材项目规划12LED数码管及其驱动电路(静态)345LED数码管计数器(静态)显示程序设计产品计数器电路和显示程序产品计数器设计制作和调试首前后以放置于产品流水线关键部位的光电传感器,可以感知一个产品的通过。每通过一个产品,产生一个脉冲信号,产品数量脉冲送入单片机,对脉冲计数,显示。项目规划产品数量脉冲输入单片机,单片机检测到信号之后对脉冲进行计数,同时数码管显示所计数量。项目规划1.汇编语言指令和伪指令的格式,类型,功能,用法,寻址方式。2.伪指令的格式,类型,功能,用法。3.程序设计一般方法,常用子程序。项目规划1.使用软件设计电路图、编写并调试程序2.使用工具制作电路板并测试其正确性3.软硬件联调,完成要求功能项目规划参考样本:光盘仿真文件:产品计数器.DSN(包括电路和程序)项目规划将以上项目分解成若干个小任务,我们完成了这些小任务,项目就基本完成,单片机的指令系统也就基本熟悉了。如果需要计数的值比较大,可以增加计数的单元长度。硬件显示电路也需要增加位数。超过6位数,就要扩展并行口。这些问题留待以后解决。还有产品计数器的其他功能,比如生产速度,产量统计等,以后知识够了再添加。

啤酒瓶生产线,玻璃溶液吹在模具里,成瓶形。刚脱模时还很热,放在传送带上,边移动边降温。移动过程中,有一束光线通过传送带,每个啤酒瓶通过时,挡住光线一次,利用光敏元件,可以感知光线的有和无。设有光线的时候,光敏元件输出高电平,没有光线的时候,输出低电平。则每次出现低电平就代表一个啤酒瓶通过。通过记录负脉冲的个数,就等于通过的啤酒瓶的个数。我们利用一个按钮,按一次产生一个负脉冲,代替生产线上的光电传感器。利用数码管显示的是啤酒瓶的个数。每按一次,计数一次,并以十进制形式显示,2--6位数。项目规划LED数码管及其驱动电路(静态)任务2.1

●LED数码管电路数码管显示和驱动电路。任务要求驱动方法,字形译码和译码器。知识要求LED数码管:就是用多个LED组合排列成可以显示数字的元件。现在用的很多。我们的产品计数器也要用它来显示数字。技能训练2-11.数码管试验1字形.DSN

目的:数码管的使用内容:复习数码管的特性。

说明:

复习一下数码管的特性

我们先来看一个proteus仿真项目:数码管试验1字形.DSN(光盘),通过这个仿真项目来复习一下数码管的特性。熟悉数码管的字形和极性。重点了解字型码。提示1:字型码表格在附录中提示2:proteus仿真软件的使用,请看附录和光盘

●LED数码管电路技能训练2-11.数码管试验1字形.DSN

目的:数码管的使用内容:复习数码管的特性。

说明:

复习一下数码管的特性

我们先来看一个proteus仿真项目:数码管试验1字形.DSN(光盘),通过这个仿真项目来复习一下数码管的特性。熟悉数码管的字形和极性。重点了解字型码。提示1:字型码表格在附录中提示2:proteus仿真软件的使用,请看附录和光盘

●LED数码管电路技能训练2-12.数码管试验2译码.DSN

目的:数码管的使用内容:复习数码管的特性。

说明:

复习一下数码管的特性

通过这个仿真项目来复习一下数码管的电源特性和译码器的特性。红绿蓝黄各种不同颜色电特性不同,不同型号译码器也特性不同。重点了解译码器。可参看:7段数码管和译码.DSN。

●LED数码管电路技能训练2-12.数码管试验2译码.DSN

目的:数码管的使用内容:复习数码管的特性。

说明:

复习一下数码管的特性

通过这个仿真项目来复习一下数码管的电源特性和译码器的特性。红绿蓝黄各种不同颜色电特性不同,不同型号译码器也特性不同。重点了解译码器。可参看:7段数码管和译码.DSN。

●LED数码管电路技能训练2-13.数码管试验3软件译码.DSN

目的:数码管的使用内容:复习数码管的特性。

说明:

再看一个proteus仿真项目:数码管试验3软件译码.DSN(光盘),通过这个仿真项目来了解数码管的不同使用方法。重点是软件译码。

●LED数码管电路技能训练2-13.数码管试验3软件译码.DSN

目的:数码管的使用内容:复习数码管的特性。

说明:

再看一个proteus仿真项目:数码管试验3软件译码.DSN(光盘),通过这个仿真项目来了解数码管的不同使用方法。重点是软件译码。

●LED数码管电路技能训练2-14.一位数码管.DSN

目的:数码管的使用内容:复习数码管的特性。

说明:

再看一个proteus仿真项目:一位数码管.DSN(光盘),有了单片机,数码管也活了起来。重点还是软件。看懂以上几个仿真项目,我们来做下面这个任务。●LED数码管电路技能训练2-14.一位数码管.DSN

目的:数码管的使用内容:复习数码管的特性。

说明:

再看一个proteus仿真项目:一位数码管.DSN(光盘),有了单片机,数码管也活了起来。重点还是软件。看懂以上几个仿真项目,我们来做下面这个任务。●LED数码管电路技能训练2-12位数码管显示电路(软件译码)的设计目的:数码管的驱动电路的设计内容:驱动2位数码管显示

说明:这个技能训练是个模仿型项目。按钮与单片机P3.4引脚相连,P0口通过限流电阻接共阳极数码管(十位),P2口通过限流电阻接共阳极数码管(个位)。开始显示2位数00,每按一次按钮,计数值加1。电路如图2-2所示。P0口没有内部上拉电阻,所以要外加(其实这种用法不加上拉电阻也是可以的)。设计成P0低电平有效(灯亮),是因为P0口低电平输出负载能力比较强。●LED数码管电路技能训练2-12位数码管显示(软件译码)的电路设计目的:数码管的驱动电路的设计内容:驱动2位数码管显示

说明:这个技能训练是个模仿型项目。按钮与单片机P3.4引脚相连,P0口通过限流电阻接共阳极数码管(十位),P2口通过限流电阻接共阳极数码管(个位)。开始显示2位数00,每按一次按钮,计数值加1。电路如图2-2所示。P0口没有内部上拉电阻,所以要外加(其实这种用法不加上拉电阻也是可以的)。设计成P0低电平有效(灯亮),是因为P0口低电平输出负载能力比较强。光盘提供proteus仿真文件,运行仿真文件夹\项目2\产品计数器2位.DSN,观察运行结果。参考源程序照抄即可,以后详细说明并分析。●LED数码管电路技能训练2-12位数码管显示(软件译码)的电路设计目的:数码管的驱动电路的设计内容:驱动2位数码管显示

电路分析:图中数码管采用共阳极数码管。字形a接端口的最低位。每一个字划串接一个限流电阻,200欧姆,电流大约10多毫安。提醒:这种电路用来演示可以,实际电路在实验的时候会出现按键机械抖动。消除抖动的具体方法是采用软件延时以躲过抖动。产品计数器2位.DSN,参考源程序照抄即可,以后详细说明并分析。保存好电路文件,下一个任务要用。●LED数码管电路LED数码管计数器(静态)显示程序设计任务2.2

●LED数码管技能训练2-22位数码管显示电路(软件译码)软件设计目的:数码管的驱动程序设计内容:单片机2个并行口驱动2位数码管上面的电路,再配上下面的程序,数码管就活了,计数器就可以工作了。知识学完了,可以再设计一个更好的计数器。参考源程序及其分析,详见教材,亦可打开仿真软件,观察程序执行结果,此处略。重要提示:在不考虑外设的情况下,使用伟福软件来调试程序和验证指令,要方便很多,它在一个界面内实现程序的编辑、编译和执行,不但可以查看各种存储空间,而且可以修改,十分方便。每一条指令的执行时间也很清楚的显示(以上功能的使用方法请看视频教程)。缺点是不能仿真外设。在程序设计时,我们要比较多的使用这个软件。在需要查看外设反应情况时,与proteus软件配合使用。在WAVE环境下将程序调试好,然后添加到proteus的电路中仿真。●数码管显示程序设计

2.2.1汇编语言指令概述要编程序就要懂指令(高级语言叫语句)。我们现在讲的是汇编语言指令。大类来说,汇编语言指令可以分为2类:指令和伪指令。汇编语言指令是计算机可以识别的并能够执行的机器码的助记符形式,它们与二进制的机器码一一对应。用汇编语言指令写成的源程序翻译成机器码的过程叫做汇编。能完成汇编任务的软件称为汇编程序。伪指令是用于告诉汇编程序如何进行汇编的指令,它不控制机器的操作也不能被汇编成机器码。伪指令又可以分成若干小类,指令也可以分成若干小类。◆指令和程序设计是单片机的2个重要知识之一(单片机知识包括硬件和软件2部分)◆程序是由指令组成的。◆指令是程序的最小语言单位。◆计算机只认识二进制数据,机器码就是二进制数组成的。◆二进制组成的机器指令对于人们书写、阅读和记忆都比较困难,后来就出现了助记符,汇编语言就是用了助记符。◆后来我们又发明了高级语言,比较接近人类的自然语言。本书以A51(汇编语言)为主,以C51(C语言)为辅。1.ORG起始地址定义伪指令2.END汇编程序结束伪指令3.EQU宏代换伪指令4.DATA数值赋值伪指令5.DB字节存储伪指令6.DW字存储伪指令7.DS定义空间伪指令8.BIT位地址符号伪指令●数码管显示程序设计

2.2.2汇编语言伪指令伪指令:用于告诉汇编程序如何进行汇编的指令,它不控制机器的操作也不能被汇编成机器码,只为汇编程序所识别并指导汇编如何进行。MCS-51系列单片机的常用伪指令●数码管显示程序设计

2.2.2汇编语言伪指令2.END汇编程序结束伪指令格式:END功能:标志源程序的结束,即通知汇编程序不再继续向下汇编。注意:在一个程序中只能有一条END指令,而且必须安排在源程序的末尾。否则汇编程序对END指令后面的所有语句都不汇编。1.ORG起始地址定义伪指令格式:ORG16位地址功能:规定目标程序在程序存储器中所占空间的起始地址。例如:ORG1000H,表示以下的数据或程序存放在从1000H开始的程序存储单元中。3.EQU宏代换伪指令格式:符号EQU字符串功能:在程序中用EQU后面的字符串去替换EQU前面的符号。由EQU后面的字符串可以是符号、数据地址、代码地址或位地址。说明:EQU伪指令所定义的符号必须先定义后使用。所以该语句一般放在程序开始。例如:BUFFEREQU58H;BUFFER的值为58HMOVA,BUFFER;表示内部RAM58H单元中数据送给累加器A●数码管显示程序设计

2.2.2汇编语言伪指令4.DATA数值赋值伪指令格式:符号DATA表达式功能:将表达式指定的数据地址或代码地址赋予符号名称。说明:DATA伪指令功能与EQU伪指令相似,但是DATA所定义的符号可以先使用后定义。该语句一般放在程序开始或结尾。例如:BUFFERDATA58H;BUFFER的值为58HMOVA,BUFFER;表示内部RAM58H单元中数据送给累加器A5.DB字节存储伪指令格式:[标号:]DB8位二进制数据表功能:从指定的地址单元开始,定义若干个字节存储单元的内容。【例2-1】ORG100HFIRST:DB01H,02HSECO:DB011B,‘A’,12以上伪指令经汇编后,程序存储器有关单元如图2-3所示。其中伪指令中的011B为二进制数,‘A’为字符A的ASCII码41H,12为十进制数。另外,格式中的标号为可选项。●数码管显示程序设计

2.2.2汇编语言伪指令6.DW字存储伪指令格式:[标号:]DW16位二进制数据表功能:从指定的地址单元开始,定义若干个字存储单元的内容。【例2-2】ORG100HFIRST:DW01HDW1234H,‘AB’以上伪指令经汇编后,程序存储器有关单元如图2-4所示。其中16位数据的高8位存入低地址单元,低8位存入高地址单元。格式中的标号为可选项。7.DS定义空间伪指令格式:[标号:]DS表达式功能:从指定的地址单元开始,保留由表达式指定的若干字节空间作为备用空间。例如:ORG1000HDS0AHDB12H,‘B’伪指令汇编后从1000H单元开始,保留10个字节,从100AH开始连续存放12H、42H。●数码管显示程序设计

2.2.2汇编语言伪指令8BIT位地址符号伪指令格式:字符名称BIT位地址功能:用规定的字符名称表示位地址。例如:X0BITP1.0X1BIT30H经汇编后,P1口的第0位地址赋给X0,位地址30H赋给X1。在程序中可以分别用X0、X1代替P1.0和位地址30H。

提示:在2位数码管显示的参考源程序中,有好多伪指令的应用。请在源程序里找到伪指令并理解其在程序中的作用。●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式计算机的指令系统:计算机是通过执行指令序列(程序)来解决问题的,每种计算机(包括单片机)都有一组指令集供用户使用。汇编语言指令格式机器语言指令格式指令分类指令系统符号约定寻址方式●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式汇编语言指令格式1.汇编语言指令格式汇编语言指令的一般格式如下:[标号:]操作码[第一操作数][,第二操作数][,第三操作数][;注释]说明:(1)带方括号的部分为可选项,根据指令功能决定是否需要。(2)标号是用符号表示的一个地址常量。它表示该指令在程序存储器中的起始地址。标号的命名规则是:必须以字母开头,长度不超过8个字符,并以“:”结束。注意:通常在子程序入口或转移指令的目标地址处才赋予标号。●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式汇编语言指令格式(3)操作码表示指令的操作功能。每条指令都有操作码。(4)操作数表示的是参与操作的数据来源和操作之后结果数据的存放位置,可以是常数、地址或寄存器符号。指令的操作数可能有1个、2个或3个,有些指令可能没有操作数。操作数与操作数之间用“,”分隔,操作码与操作数之间用空格分隔。具有保存操作结果的操作数称为目的操作数,只提供数据的称为源操作数。(5)注释字段是编程人员对该指令或该段程序的功能说明,是为了方便阅读程序的一种标注。注释以“;”开始,当汇编语言源程序被汇编成机器语言程序时,该项被舍弃。汇编语言指令举例:LOOP1:MOVR7,#8;循环8次标号操作码第1操作数,第2操作数;注释目的操作数源操作数这条指令没有第三操作数。操作码与第一操作数之间用空格分隔。操作数之间用逗号分隔。●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式机器语言指令格式

机器语言指令是一种二进制代码,它包括两个部分:操作码和操作数。MCS-51指令系统中,机器语言指令长度有单字节、双字节和三字节共3种。单字节指令(1)在单字节指令中,操作码和操作数共占一个字节,其中操作数通常为以隐含形式指定的常用寄存器或没有操作数。MCS-51系列单片机中,单字节的机器指令共有49条。双字节指令(2)双字节指令的第一个字节为操作码,第二个字节为操作数或操作数的地址。MCS-51系列单片机中,双字节的机器指令共有46条。三字节指令(3)三字节指令的第一个字节为操作码,第二个字节和第三个字节都是操作数或操作数的地址。MCS-51系列单片机中,三字节的机器指令共有16条。●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式汇编语言符号约定指令的一个重要组成部分是操作数,为了说明指令中某一种类型的操作数,或者为了说明指令的执行过程,一般经常采用如下符号约定。(注意:在指令说明时候使用)1、Rn:n=0~7,表示当前工作寄存器区的8个工作寄存器R0~R7。2、Ri:i=0,1。表示当前工作寄存器区的2个工作寄存器R0,R1。3、direct:表示8位内部数据存储单元的地址。当取的值在00H~7FH范围时,表示内部数据RAM;当取的值在80H~0FFH范围时,表示特殊功能寄存器。表示特殊功能寄存器时也可以使用寄存器名称符号来代替其直接地址。4、#data:表示8位立即数。“#”表示后面的data为立即数。5、#data16:表示16位立即数。“#”意义同上。6、addr11:表示11位目的地址。用于ACALL和AJMP指令中,它可以是下一条指令地址第一个字节所指出的同一个2K程序存储空间中的任何值。7、addr16:表示16位目的地址。用于LCALL和LJMP指令中,它可以是64K程序存储空间中的任何值。8、rel:表示带符号的8位偏移量,被用在SJMP和所有条件转移指令中。它可以是下一条指令地址-128~+127范围内的任何值。●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式汇编语言符号约定9、bit:表示8位内部数据存储空间中或特殊功能寄存器区中可按位寻址区的8位位地址。当位地址取值为00H~7FH时,表示内部数据RAM20H~2FH单元中每一位的位地址,当位地址取值为80H~0FFH时,表示特殊功能寄存器的位地址。10、/bit:表示在位操作指令中,对该位(bit)先取反,再参与运算,但不改变11、():表示某一寄存器、存储单元或表达式的内容。12、(()):表示某一寄存器、存储单元或表达式的内容的内容。13、@:表示其后的寄存器或表达式的值为操作数的地址。(1)@Ri:表示寄存器Ri(i=0或1)中存放的是操作数的地址。如果该地址是内部数据存储区中的地址,其取值范围为00H~7FH(8052和8032为00H~0FFH);如果该地址是外部数据存储区中的地址,其取值范围为00H~FFH。注意:当Ri的值在00H~7FH之间时,它表示的既可能是内部数据存储空间中的地址,也可能是外部数据存储空间中的地址,我们需要通过指令操作码来区分。(2)@DPTR:表示DPTR中存放的是操作数的地址,该地址位于外部数据存储空间,其取值范围为0000H~0FFFFH。●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式汇编语言符号约定14、←

:表示将箭头右边的值赋给箭头左边的寄存器或存储单元。15、↔:表示箭头两端的数据进行交换。16、(S):表示源操作数。17、(D):表示目的操作数。18、rrr:在指令编码中,rrr三位值由工作寄存器Rn确定,R0~R7对应的rrr值分别为000~111。19、$:汇编语言中表示本指令的起始地址。●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式

指令的一个重要组成部分是操作数,它指定了参与运算的数或数所在的单元的地址。我们把指令中寻找操作数或操作数地址的方式称为寻址方式。寻址方式越丰富,计算机的功能越强,灵活性越大。寻址方式是指令系统及汇编语言程序设计中最基本的内容之一,必须十分熟悉,牢固掌握。MCS-51指令系统有6种寻址方式:寄存器寻址、直接寻址、立即寻址、寄存器间接寻址、变址寻址和相对寻址。注意:同一条指令中的不同操作数可以有不同的寻址方式。寻址方式●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式(1)寄存器寻址方式寄存器寻址是指,在指令中直接以寄存器的名字表示操作数的地址。即寄存器的内容作为操作数。可以采用寄存器寻址的寄存器有R0~R7、累加器A、DPTR以及位累加器CY。例如:指令MOV R0,A的操作是把累加器A中的数据传送到寄存器R0中,其源操作数存放在累加器A中,目的操作数在R0中,所以源操作数和目的操作数的寻址方式均为寄存器寻址。如果程序状态寄存器PSW的RS1RS0=10(选中第三组工作寄存器,对应地址为10H——17H),设累加器A的内容为50H,则执行MOVR0,A指令后,内部RAM10H单元的值就变为50H,如图2-5所示。寻址方式●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式(2)直接寻址方式

直接寻址方式是指,在指令中以地址或符号形式直接给出操作数地址,例如:指令MOVA,30H执行的操作是将内部RAM中地址为30H的单元内容传送到累加器A中,其源操作数30H就是存放数据的单元地址,因此该指令的源操作数是直接寻址。设内部RAM30H单元的内容是48H,那么指令MOVA,30H的执行过程如图2-6所示。寻址方式用这种寻址方式可以访问内部数据存储器三种地址空间:①内部数据存储器的128个字节单元。例如指令:MOVA,50H;指令中源操作数的寻址方式为直接寻址②位地址空间。例如指令:MOVC,00H;指令中源操作数的寻址方式为直接寻址③特殊功能寄存器地址空间。例如指令:MOVACC,P1

;源操作数和目的操作数采用的都是直接寻址●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式(3)立即寻址方式立即寻址方式是指,指令操作数部分给出的就是参与运算的操作数本身,它可以是8位二进制数或16位二进制数。即操作数是以指令字节的形式存放于程序存储器中的。在MCS-51指令系统中是用在数值前加“#”的形式来表示,如果立即数的最高位为A~F英文字符时,该字符前要加“0”,以使之区别于字符串。指令MOVA,#0F3H的执行过程如图2-7所示。寻址方式●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式(4)寄存器间接寻址方式寄存器间接寻址是指,指令操作数部分所指定的寄存器中存放的是操作数的地址。可以作为寄存器间接寻址的寄存器有工作寄存器R0、R1、地址指针DPTR以及堆栈指针SP。在指令中用在寄存器前加“@”形式表示,SP除外,它由进栈出栈指令操作,相当于间接寻址。例如:指令MOVA,@R1执行的操作是将R1的内容作为内部RAM的地址,再将该地址单元中的内容取出来送到累加器A中。设R1=50H,内部RAM50H中的值是8AH,则指令MOVA,@R1的执行结果是累加器A的值为8AH,该指令的执行过程如图2-8所示。寻址方式●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式(5)变址寻址方式变址寻址是指以程序计数器PC或数据指针DPTR作为基地址寄存器,以累加器A作为变址寄存器,把两者的内容相加形成16位的操作数的地址。这种寻址方式专用于访问程序存储器中的常数表,不能访问数据存储器。例如:指令MOVCA,@A+DPTR执行的操作是将累加器A和基址寄存器DPTR的内容相加,相加结果作为操作数存放的地址,再将此地址中的操作数取出来送到累加器A中。设累加器A=18H,DPTR=0600H,外部ROM(0618H)=8CH,则指令MOVCA,@A+DPTR的执行结果是累加器A的内容为8CH。该指令的执行过程如图2-9所示。寻址方式●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式(6)相对寻址方式相对寻址以程序计数器PC的当前值作为基地址,与指令中给定的相对偏移量rel进行相加,把得到的和作为程序的转移地址。这种寻址方式用于相对转移指令中。所谓相对转移,是指程序转移目标地址由相对于该指令当前地址的偏移量来决定。一般将相对转移指令所在的地址称为源地址,转移后的地址称为目标地址,则有:目标地址=源地址+转移指令字节数+偏移量在汇编语言的相对转移指令中,偏移量通常以目标地址的标号形式出现。例如指令:JZLOOP;操作数为相对寻址指令中LOOP的位置应该是偏移量,但是LOOP是个标号。指令的意思是要转移到标号LOOP所在的那条指令。当源程序汇编时,自动把标号LOOP用偏移量代替。寻址方式●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式(6)相对寻址方式此时,计算偏移量的公式为:偏移量=目标地址-(源地址+2)如果偏移量为负数,那么这条指令执行后程序将转到该指令的前面(低地址方向);如果偏移量为正数,那么将转到该指令的后面(高地址方向)。在MCS-51指令系统中,偏移量的取值范围是+127~-128。假定有如下程序:ORG2000H2000H8030SJMPSTART;转入START开始的程序段2032HF8HSTART:MOVR0,A

END程序执行到SJMP指令时,转入标号为START的指令处继续执行。寻址方式●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式(6)相对寻址方式指令:SJMPSTART的机器码是8030(16进制),所在地址是2000H,本指令占用2个字节,第一个字节80H是操作码,第二个字节30H是操作数,也就是偏移量。详细指令执行情况如下:地址偏移量rel=目标地址-源地址-2=2032H-2000H-2=30H指令SJMPSTART的机器码80H30H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数30H相加,形成目标地址2032H,再送回PC,使得程序跳转到2032H单元继续执行。该指令的执行过程如图2-10所示。寻址方式●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式有关寻址方式的一个proteus仿真项目是:寻址方式.DSN,那里的汇编语言源程序有比较详细的解释,有兴趣的可以打开看看。也可以用伟福软件打开汇编语言源程序文件:寻址方式.ASM,编译之后打开CPU窗口,就可以看到机器码和地址以及与源程序的对应情况。寻址方式(7)寻址方式小结MCS-51指令系统的不同寻址方式对应不同的存储空间,也可以灵活使用不同的寻址方式访问同一个存储空间,使用时应多加注意。表2-1列出了不同寻址方式的作用空间。寻址方式作用空间立即数寻址程序存储器(直接寻址包括特殊功能寄存器在内的内部数据存储空间和位存储空间寄存器寻址工作寄存器寄存器间接寻址R0SPR0变址寻址程序存储器的常数空间相对寻址程序存储器的指令空间●数码管显示程序设计

2.2.3MCS-51系列单片机的指令格式和寻址方式51单片机共有111条指令,按照指令功能分成5类:数据传送指令(28条)算术运算指令(24条)逻辑运算及移位指令(25条)控制转移指令(22条)位操作指令(12条)按照这个分类顺序,依次介绍指令的功能,特点,用法。这部分内容在程序设计的时候还可能需要经常回顾。指令分类●数码管显示程序设计

2.2.3MCS-51系列单片机的指令概述MCS-51系列单片机的指令功能详解为了让单片机替我们工作,不论是彩灯控制器还是产品计数器,除了设计电路,还要编写程序。为了编写程序,必须熟悉指令。现在开始,我们正式开始学习指令。这部分内容在程序设计的时候还可能需要经常回顾。

一种学习方法:快速阅读,尽量记忆,然后开始编写程序,编写过程中遇到困难,再回头查找指令。就是:在使用中学习。51单片机共有111条指令,按照功能分成5类:数据传送指令(28条)算术运算指令(24条)逻辑运算及移位指令(25条)控制转移指令(22条)位操作指令(12条)按照这个分类顺序,依次介绍指令的功能,特点,用法。教材中每条指令都做了详细说明,可供以后随时查阅。指令详解累加器A与外部RAM(或外部接口)数据传送指令●数码管显示程序设计

2.2.4数据传送指令数据传送指令的功能是:把源操作数提供的数据传送给目的操作数所指定的单元,源操作数内容不变。它的另外一个功能是,将源操作数和目的操作数所指定的两个单元内容彼此进行交换。内部RAM和SFR间的一般传送指令数据交换指令累加器A与程序存储器传送指令指令详解●数码管显示程序设计

2.2.4数据传送指令MCS-51系列单片机的指令功能详解单片机系统是由许多部件构成的,单片机的主要工作就是完成这些部件之间的信息交换,所以数据传送指令是CPU最基本最重要的操作之一。数据传送是否灵活、迅速,对程序的编写和执行速度影响极大。MCS-51系列单片机的数据传送操作可以在累加器A、工作寄存器Rn、内部数据存储器、外部数据存储器间进行。另外,我们将字节交换、半字节交换以及堆栈操作也归于数据传送类指令。数据传送指令的功能是:把源操作数提供的数据传送给目的操作数所指定的单元,源操作数内容不变。它的另外一个功能是,将源操作数和目的操作数所指定的两个单元内容彼此进行交换。指令详解●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令MCS-51系列单片机内部RAM和特殊功能寄存器SFR各存储单元之间的数据传送是通过MOV指令来实现的。MOV指令在内部RAM和特殊功能寄存器SFR之间(包含立即数)的数据传送路径如图2-11所示。其中,#data表示立即数;@Ri中Ri的值为内部数据存储单元的地址;direct指向内部数据存储单元或特殊功能寄存器;Rn表示当前工作寄存器区的8个工作寄存器R0~R7;ACC代表累加器A。图2-11为片内RAM及寄存器的数据传送指令图解。指令详解汇编格式机器语言格式操作功能字节数周期数MOVA,#data01110100dataA←data21MOVA,direct11100101directA←(direct)21MOVA,Rn11101rrrA←(Rn)11MOVA,@Ri1110011iA←((Ri))11●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(1)以累加器A为目的操作数的数据传送指令,见表2-2指令详解●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(1)以累加器A为目的操作数的数据传送指令,见表2-2指令详解【例2-3】已知(R3)=8AH(R1)=40H(40H)=9BH(P1)=0FFH,分别写出下列指令的执行结果。1.MOVA,R3

;A←8AH2.MOVA,P1

;A←0FFH3.MOVA,40H;A←9BH4.MOVA,@R1;A←9BH5.MOVA,#50H;A←50H●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(2)以直接地址direct为目的操作数的数据传送指令,见表2-3指令详解汇编格式机器语言格式操作功能字节数周期数MOVdirect,A11110101directdirect←(A)21MOVdirect,Rn10001rrrdirectdirect←(Rn)22MOVdirect2,direct110000101direct1direct2direct2←(direct1)32MOVdirect,#data01110101directdatadirect←data32MOVdirect,@Ri1000011idirectdirect←((Ri))22●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(2)以直接地址direct为目的操作数的数据传送指令,见表2-3【例2-4】已知(A)=8AH(R1)=40H(40H)=9BH(PSW)=80H,分别写出下列指令的执行结果。1.MOV20H,A ;20H←8AH2.MOV20H,R1;20H←40H3.MOV20H,PSW;20H←80H4.MOV20H,@R1;20H←9BH5.MOV20H,#0FFH;20H←0FFH6.MOV20H,40H;20H←9BH指令详解●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(3)以寄存器Rn为目的操作数的数据传送指令,见表2-4指令详解汇编格式机器语言格式操作功能字节数周期数MOVRn,#data01111rrrdataRn←data21MOVRn,direct10101rrrdirectRn←(direct)22MOVRn,A11111rrrRn←(A)11●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(3)以寄存器Rn为目的操作数的数据传送指令,见表2-4【例2-5】已知(A)=08H(7FH)=3DH,分别写出下列指令的执行结果。1.MOVR3,A;R3←08H2.MOVR3,7FH;R3←3DH3.MOVR3,#40H;R3←40H指令详解●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(4)以@Ri为目的操作数的数据传送指令,见表2-5指令详解汇编格式机器语言格式操作功能字节数周期数MOV@Ri,#data0111011idata(Ri)←data21MOV@Ri,direct1010011idirect(Ri)←(direct)22MOV@Ri,A1111011i(Ri)←(A)11●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(4)以@Ri为目的操作数的数据传送指令,见表2-5【例2-6】已知(A)=8AH(R1)=50H(TMOD)=0FFH,分别写出下列指令的执行结果。1.MOV@R1,A;50H←8AH2.MOV@R1,TMOD;50H←0FFH3.MOV@R1,#9BH;50H←9BH指令详解●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(5)16位数据传送指令,见表2-6指令详解汇编格式机器语言格式操作功能字节数周期数MOVDPTR,#data1610010000data15~8data7~0DPH←data15~8DPL←data7~032【例2-7】写出下列指令的执行结果。MOVDPTR,#1234H

;DPH←12H,DPL←34H●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令说明:①上述指令中的rrr取值为000~111,分别对应选定工作寄存器区的8个工作寄存器。②上述指令中的i取值为0或1。分别对应工作寄存器R0和R1。③直接地址到直接地址的数据传送,允许把一个端口引脚的状态值读入到内部数据存储单元,或者把内部数据存储单元的内容输出到端口锁存器中,不需要通过累加器或中间寄存器。例如:MOV20H,90H;20H←(P1)该指令的功能为把P1口引脚状态读入到内部RAM20H单元中。对于特殊功能寄存器来说,它的直接地址可以用其名称来代替。因此,上面指令也可以写成:MOV20H,P1;20H←(P1)④某些指令的功能是相同的,但指令机器码可能不同。例如:MOVA,#01H;A←01H,指令为2字节,机器码为:74H,01HMOVACC,#01H;A←01H,指令为3字节,机器码为:75H,0E0H,01H在第二条指令中的ACC表示累加器A的直接地址0E0H。⑤上述数据传送指令中,以累加器A为目的操作数的数据传送指令会依据累加器A中“1”的个数的奇偶状态,对程序状态寄存器PSW的P标志位重新赋值,其余的都不影响标志位。指令详解●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(6)堆栈操作指令MCS-51系列单片机内部RAM中设定的一个遵循“先进后出,后进先出”原则的区域被称为堆栈,在SFR中有一个堆栈指针SP(8位寄存器),它指出堆栈的栈顶。堆栈技术在CPU响应中断、调用子程序、中断嵌套或子程序嵌套时用于保存断点和现场数据。MCS-51系列单片机的堆栈是向上增长的,栈底固定,栈顶浮动。有入栈(PUSH指令)和出栈(POP指令)两种操作。入栈操作的过程是:先将堆栈指针SP自动加1,然后数据压入堆栈;出栈操作与此相反,先从堆栈中将数据弹出,送给direct单元,然后指针SP自动减1。无论是入栈操作还是出栈操作,其操作对象只能是用direct形式表示的内部数据存储空间地址(00H~7FH)或某个特殊功能寄存器。MCS-51系列单片机堆栈操作指令见表2-7。指令详解●数码管显示程序设计

2.2.4数据传送指令1.内部RAM和SFR间的一般传送指令(6)MCS-51系列单片机堆栈操作指令见表2-7。指令详解

【例2-8】设某主程序和子程序SUB1中均要用到累加器A及地址指针DPTR,则在子程序中可以使用下列方式实现对现场数据的保护和恢复。PUSHACC;保护现场PUSHDPHPUSHDPL……;子程序的功能处理指令,省略POPDPL;恢复现场POPDPHPOPACC思考:将现场数据的压入堆栈和从堆栈中恢复时,对数据的操作顺序有何要求?汇编格式机器语言格式操作功能字节数周期数PUSHdirect1100

0000directSP←(SP)+1(SP)←(direct)22POPdirect11010000directdirect←((SP))SP←(SP)-122●数码管显示程序设计

2.2.4数据传送指令2.数据交换指令MCS-51系列单片机指令系统中交换指令共4条,其中字节交换指令3条,半字节交换指令1条。字节交换指令的功能是将累加器A与内部RAM中某一个单元的内容相互交换。半字节交换指令的功能是将累加器A的低4位与Ri所指出的内部存储单元的低4位相互交换,图2-12为与累加器有关交换指令图解。指令详解●数码管显示程序设计

2.2.4数据传送指令2.数据交换指令交换指令见表2-8。指令详解

【例2-9】已知(A)=8AH(R1)=40H(40H)=0FFH,分别写出下列指令的执行结果。1.XCHA,R1;R1←8AH,A←40H2.XCHA,40H;40H←8AH,A←0FFH3.XCHDA,@R1;40H←0FAH,A←8FH,(R1)=40H不变汇编格式机器语言格式操作功能字节数周期数XCHA,Rn11001rrr(A)↔(Rn)11XCHA,direct11000101direct(A)↔(direct)21XCHA,@Ri1100011i(A)↔((Ri))11XCHDA,@Ri1101011i(A)3~0↔((Ri))3~011●数码管显示程序设计

2.2.4数据传送指令3.累加器A与外部RAM(或外部接口)数据传送指令MCS-51系列单片机指令系统中,CPU与外部数据存储器的数据传送指令操作码为MOVX,其中X为external(外部)的第二个字母。这组指令的功能是在外部数据存储器或扩展I/O口与累加器A之间进行数据传送。图2-13为片外数据存储器传送指令图解。指令详解汇编格式机器语言格式操作功能字节数周期数MOVXA,@DPTR11100000A←((DPTR))12MOVX

@DPTR,A11110000(DPTR)←(A)12MOVX

A,@Ri1110001iA←外存((Ri))12MOVX

@Ri,A1111001i外存(Ri)←(A)12●数码管显示程序设计

2.2.4数据传送指令3.累加器A与外部RAM(或外部接口)数据传送指令说明:(1)在以上4条指令中DPTR的取值范围是:0000H~0FFFFH;Ri的取值范围是00H~0FFH。(2)由于MOVX类指令是专访外部数据存储器和外部接口的指令,因此它的操作数地址(DPTR或Ri的值),即外部数据存储器16位地址是由P0口和P2口向外部数据总线发出的。(3)当执行指令MOVXA,@DPTR和MOVX@DPTR,A时,寄存器DPH(DPTR的高8位)的内容自动写入P2口,寄存器DPL(DPTR的低8位)的内容自动写入P0口并锁存。(4)当执行指令MOVXA,@Ri和MOVX@Ri,A时,寄存器Ri的内容为操作数地址的低八位,将自动写入P0口并锁存,操作数地址的高八位必须事先通过MOVP2,#data指令写入P2口。指令详解●数码管显示程序设计

2.2.4数据传送指令3.累加器A与外部RAM(或外部接口)数据传送指令

【例2-10】用两种方法将外部数据寄存器7E02H单元的内容送入内部数据存储器35H单元。方法1:MOVDPTR,#7E02H;建立地址指针7E02HMOVXA,@DPTR;外存7E02H单元内容送A累加器MOV35H,A;累加器A内容送内部存储单元35H方法2:MOVP2,#7EHMOVR1,#02HMOVXA,@R1MOV35H,A指令详解●数码管显示程序设计

2.2.4数据传送指令4.累加器A与程序存储器传送指令

MCS-51系列单片机指令系统提供了两条累加器A与程序存储器的数据传送指令,这两条指令又称查表指令,操作码采用MOVC形式,指令的功能是将程序存储器中的数据读入累加器A中。图2-14为程序存储器查表指令图解。指令详解汇编格式机器语言格式操作功能字节数周期数MOVCA,@A+DPTR1001

0011A←((A)+(DPTR))12MOVCA,@A+PC10000011A←((A)+(PC))12●数码管显示程序设计

2.2.4数据传送指令4.累加器A与程序存储器传送指令

说明:(1)在上面两条指令中,寄存器DPTR的值、DPTR与累加器A的值的和以及累加器A与PC值的和为程序存储器单元的16位地址。(2)指令的执行结果是将该地址中的操作数取出来送入累加器A。(3)前面已经提到,该指令又叫查表指令。所谓的查表是指,在程序存储空间中有一个常数表,在查表前将表头地址送入DPTR寄存器,累加器A中存放的是从操作数地址到表头地址的偏移量。则指令MOVCA,@A+DPTR的执行过程如图2-15所示。我们假设从1200H单元开始存有一个常数表,累加器A中的内容为34H,DPTR的内容为1200H,程序存储单元1234H单元的内容为0AAH,则指令的执行结果是累加器A中的值变成0AAH。(4)第二条指令的基址寄存器为程序计数器PC。CPU在读取指令时,PC已执行了加1操作,指向下一条指令的第一个字节,所以作基址寄存器时值已经是原PC加1。指令详解●数码管显示程序设计

2.2.4数据传送指令4.累加器A与程序存储器传送指令

【例2-11】有下面的一个程序段,标号SEG7:是子程序的名称。标号TABLE:是字型码表的首地址,紧接着RET指令存放在程序存储器中。设调用该子程序前(A)=0,写出下面程序段的执行结果。;-----------以下查表子程序--------------------------------分隔线7SEG7:INCA;A=A+1,指令长1字节MOVCA,@A+PC;查表指令,指令长1字节 RET;返回,指令长1字节TABLE:DB0C0H,0F9H,0A4H,0B0H,99H;0,1,2,3,4的共阳极字形显示码 DB92H,82H,0F8H,80H,90H;5,6,7,8,9的共阳极字形显示码DB88H,83H,0C6H,0A1H,86H,8EH;A~F的共阳极字形显示码答:(A)=0C0H指令详解●数码管显示程序设计

2.2.4数据传送指令4.累加器A与程序存储器传送指令

因为,执行查表指令时,该指令已经取到CPU,此时PC的值已经是RET指令的首地址(准备取指令RET)。执行查表指令时,将PC+A的值作为地址,在这个地址中读出一个字节的数送给A。如果没有该指令前面的INCA指令,读给A的是RET指令的机器码22H,不是数字0的字型码0C0H。在这里,PC的值是不允许随意改动的,只有改变A中值了。所以,调用该子程序前,A的值是0,就得到0的字型码;A的值是1,就得到1的字型码;……;A的值是15,就得到字符F的字型码。回忆,如果使用查表指令MOVCA,@A+DPTR,此子程序该怎么写?应该写成这样:SEG7:MOVDPTR,#TABLEMOVCA,@A+DPTRRET……这一段要验证的话,要把字型码表写在标号TABLE后面。其实,【技能训练2-2】中步骤18,继续进行单步与跟踪结合使用,就会验证这一段程序。指令详解●数码管显示程序设计

2.2.5算术运算指令MCS-51系列单片机指令系统的算术运算指令包括加、减、乘、除4种基本操作。这4种基本操作能对8位无符号数进行直接运算;借助溢出标志可以对带符号数进行补码运算;借助进位标志可以实现多字节加减运算;也可实现压缩BCD码运算。算术运算类指令指令详解●数码管显示程序设计

2.2.5算术运算指令十进制调整指令乘法指令加1、减1指令减法指令加法指令除法指令算术运算指令●数码管显示程序设计

2.2.5算术运算指令1.加法指令(1)不带进位加法指令

这组指令完成两个8位二进制数的相加运算,结果存放在累加器A中。它们的操作数可以是有符号数也可以是无符号数。无符号的操作数以真值的绝对值形式给出;有符号的操作数以真值的补码形式给出。其指令格式见表2-11。指令详解汇编格式机器语言格式操作功能字节数周期数ADDA,#data00100100dataA←(A)+data21ADDA,direct00100101directA←(A)+(direct)21ADDA,Rn00101rrrA←(A)+(Rn)11ADDA,@Ri0010011iA←(A)+((Ri))11●数码管显示程序设计

2.2.5算术运算指令1.加法指令(1)不带进位加法指令

说明:①在运算过程中,两个操作数是无符号数还是有符号数,是由程序员事先约定的,计算机总是按照二进制补码的规则完成相应的运算。②Cy的值反映的是将两操作数作为无符号数运算时有无进位。③OV的值反映的是将两操作数作为有符号数运算时有无溢出。④程序员应对操作数类型做到“心中有数”,并随时查询标志位,以便获得正确的运算结果。指令详解●数码管显示程序设计

2.2.5算术运算指令1.加法指令(1)不带进位加法指令

【例2-12】已知(A)=0ABH(R1)=7FH,分析下面指令的执行结果是否正确。ADDA,R1;A←0ABH+7FH运算式10101011+01111111100101010当作无符号数,表达式为:171+12742当作有符号数,表达式为:-85+127+42由上面的分析可见:由于产生了进位Cy=1,表明当将操作数看作无符号数时,其运算结果已经超过255,必须将进位(256)一并考虑,才是正确结果;但将操作数看作有符号数时,溢出标志OV=0,结果正确。指令详解ABH+7FH=12AH有进位Cy=1无溢出OV=0100101010=12AH=298有进位,结果不正确,算上进位位才对=298=12AH没有溢出,结果正确●数码管显示程序设计

2.2.5算术运算指令1.加法指令(2)带进位加法指令这组指令除了完成两个8位二进制数的相加运算,还要与进位标志位Cy的值相加,结果存放在累加器A中。若Cy=0,则这组指令同ADD指令。带进位加法指令主要用在多字节加法运算中,其指令格式见表2-12。指令详解汇编格式机器语言格式操作功能字节数周期数ADDCA,#data00110100dataA←(A)+data+(Cy)21ADDCA,direct00110101directA←(A)+(direct)+(Cy)21ADDC

A,Rn00111rrrA←(A)+(Rn)+(Cy)11ADDCA,@Ri0011011iA←(A)+((Ri))+(Cy)11●数码管显示程序设计

2.2.5算术运算指令1.加法指令(2)带进位加法指令【例2-13】将内部数据存储区30H~32H连续3个字节中的无符号数相加,结果可能会超过一字节,所以这里按2字节考虑,其低字节送入33H单元,高字节送入34H单元。源程序:MOVA,30HADDA,31HMOV33H,AMOVA,#00HADDCA,#00HMOV34H,AMOVA,33HADDA,32HMOV33H,AMOVA,34HADDCA,#00HMOV34H,A通过例题,可以总结出两个字节数的加法运算步骤是:(1)用加法指令进行低字节的加法运算。(2)用带进位加法指令进行高字节的加法运算。指令详解●数码管显示程序设计

2.2.5算术运算指令2.减法指令MCS-51系列单片机指令系统的减法只有一组带借位的减法指令,指令操作功能是将累加器A中的内容减去源操作数中的值或常数并减去进位标志Cy的值,运算结果存入累加器A中,指令格式见表2-13。指令详解汇编格式机器语言格式操作功能字节数周期数SUBBA,#data10010100dataA←(A)-data-(Cy)21SUBBA,direct10010101directA←(A)-(direct)-(Cy)21SUBB

A,Rn10011rrrA←(A)-(Rn)-(Cy)11SUBBA,@Ri1001011iA←(A)-((Ri))-(Cy)11●数码管显示程序设计

2.2.5算术运算指令2.减法指令说明:(1)减法指令影响Cy、AC、OV以及P标志位。(2)两个无符号数相减时,Cy=1表示被减数小于减数,需要将累加器A中的值和借位一并考虑才是正确结果。(3)两个带符号数相减时,OV=0表示没有发生溢出,结果正确;若OV=1,表明发生溢出,将导致不正确结果。(4)在进行单字节或多字节减法的最低位相减时,因为减法指令都是带借位的,因此应先将Cy清零(使用CLRC指令完成)。指令详解●数码管显示程序设计

2.2.5算术运算指令2.减法指令【例2-14】已知(A)=0C9H(R1)=7FH,(7FH)=54H,Cy=1,分析下面指令的执行结果是否正确。SUBBA,@R1;A←0C9H-54H-1运算式:当作无符号数当作有符号数指令详解没有借位,结果正确116200-84201-1无借位Cy=0有溢出OV=10111010011001000-0101010011001001-00000001有溢出,结果不正确-140-56-84-55-1●数码管显示程序设计

2.2.5算术运算指令3.十进制调整指令MCS-51系列单片机指令系统中有一条专用于BCD码加法的指令,即十进制调整指令。该指令的功能是在两个压缩型BCD码数据按二进制数相加存入累加器A后,根据PSW中标志位AC、Cy的状态以及A中的结果,将A的内容进行“加6调整”。使其转换为BCD码形式。指令具体操作过程是:若累加器A的低4位大于9或AC等于1,则指令对累加器A的低四位加6,产生低四位正确的BCD码。在加6调整后,如果低四位向高四位产生进位,并且高四位均为1,则进位标志Cy=1,反之,它不能使Cy=0。若累加器A的高4位大于9或Cy等于1,则指令对累加器A的高四位加6,产生高四位正确的BCD码。在加6调整后,如果最高位产生进位,则进位标志Cy=1,反之,它不能使Cy=0。Cy=1表示两个BCD码数相加后,和大于或等于100,这对于多字节加法有用,但不影响OV位,指令的格式见表2-14。指令详解汇编格式机器语言格式操作功能字节数周期数DAA11010100把A的内容转换成11●数码管显示程序设计

2.2.5算术运算指令3.十进制调整指令注意:①DAA指令必须使用在加法指令(ADD或ADDC)之后,它不能简单的把A中的十六进制数变成BCD码。②DAA指令不能用于十进制减法的调整,BCD码的减法运算可以考虑用加法来完成。【例2-15】求两个4位压缩BCD码数的和。注意,高位存放高地址。其中,被加数存放在41H和40H单元,加数存放在51H和50H单元,和存入61H和60H单元。假设和小于等于9999。源程序:MOVA,40HADDA,50HDAAMOV60H,AMOVA,41HADDCA,51HDAAMOV61H,A思考:如果该例题中结果大于9999应该怎样处理?指令详解●数码管显示程序设计

2.2.5算术运算指令3.十进制调整指令【例2-16】设内部数据存储单元30H、31H中分别存放着两位BCD码形式表示的被减数和减数,求两者相减后的差,并以BCD码形式存放到32H单元。说明:为了实现BCD码减法运算,用8位二进制数10011010(9AH)来表示十进制数100(因为9AH经过十进制调整后为00H,Cy=1即100)。BCD码的模数为9AH,模数减去减数,可以得到减数的补码,所以十进制无符号数的减法运算变为:被减数+(9AH-减数)源程序:CLRC;Cy=0MOVA,#9AHSUBBA,31H;求减数的补码ADDA,30HDAA;十进制调整MOV32H,A;差存入32H单元指令详解●数码管显示程序设计

2.2.5算术运算指令4.加1、减1指令加1指令的功能是把操作数指定单元的内容加1;减1指令的功能是将操作数指定单元的内容减1。除了针对PSW的操作外,两类指令操作结果不影响PSW中的标志位,如果针对累加器操作,会影响奇偶标志位。两类指令的格式见表2-15。指令详解汇编格式机器语言格式操作功能字节数周期数INCA00000100A←(A)+111INCdirect00000101directdirect←(direct)+121INCRn00001rrrRn←(Rn)+111INC@Ri0000011i(Ri)←((Ri))+1

11INCDPTR10100011DPTR←(DPTR)+112DECA00010100A←(A)-111DECdirect00010101directdirect←(direct)-121DECRn00011rrrRn←(Rn)-111DEC@Ri0001011i(Ri)←((Ri))-1

11●数码管显示程序设计

2.2.5算术运算指令4.加1、减1指令注意:加1和减1指令用于修改输出口时,原来端口数据的值将从输出口锁存器读入,而不是从引脚读入。例如:DECP1(P1口为输出)这就是“读—修改—写”指令【例2-17】编程将7E00H和7E01H单元清零。MOVA,#00HMOVDPTR,#7E00HMOVX@DPTR,AINCDPTRMOVX@DPTR,A指令详解●数码管显示程序设计

2.2.5算术运算指令5.乘法指令乘法指令只有一条,格式见表2-16。指令详解汇编格式机器语言格式操作功能字节数周期数MULA

温馨提示

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

评论

0/150

提交评论