单片微机原理与应用 教学课件 作者 罗印升 素材包 第3章 51系列单片机的指令系统和程序设计方法

上传人:494895****12427 文档编号:252653847 上传时间:2024-11-19 格式:PPT 页数:154 大小:1.20MB
返回 下载 相关 举报
单片微机原理与应用 教学课件 作者 罗印升 素材包 第3章 51系列单片机的指令系统和程序设计方法_第1页
第1页 / 共154页
单片微机原理与应用 教学课件 作者 罗印升 素材包 第3章 51系列单片机的指令系统和程序设计方法_第2页
第2页 / 共154页
单片微机原理与应用 教学课件 作者 罗印升 素材包 第3章 51系列单片机的指令系统和程序设计方法_第3页
第3页 / 共154页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第3章51系列单片机的指令系统和程序设计方法,(1) 理解指令的寻址方式及相应的寻址空间。,(2) 理解51系列单片机的111条基本指令的含义,熟练掌握其应用方法。,(3) 了解机器语言、汇编语言和高级语言的特点、汇编语言程序设计步骤。,(4) 掌握汇编语言的基本格式,熟练掌握汇编语言的程序设计思想和设计方法。,(5) 理解子程序的特点,掌握子程序的设计方法和设计中应该注意的问题。,3.1指令系统概述,3.2寻址方式,3.3数据传送类指令,5.16位数据的传递指令(1条),3.4算术运算类指令,第3章51系列单片机的指令系统和程序设计方法(1) 理解指,第3章51系列单片机的指令系统和程序设计方法,3.5逻辑运算类指令,3.6位操作类指令,3.7控制转移类指令,3.8汇编语言程序设计,第3章51系列单片机的指令系统和程序设计方法3.5逻辑运,3.1指令系统概述,3.1.1指令分类,3.1.2指令格式,3.1.3指令中常用缩写符号的意义,3.1指令系统概述3.1.1指令分类3.1.2指令格,3.1.1指令分类,1.按指令功能可分为五类,2.按指令执行所需要的时间可分为三类,3.按指令所占的字节数可分为三类,3.1.1指令分类1.按指令功能可分为五类2.按指令执行,1.按指令功能可分为五类,1)数据传送类指令(29条):内部8位数据传送指令15条,内部16位数据传送指令1条,外部数据传送指令4条,交换、查表和堆栈操作指令9条。,2)算术传送类指令(24条):加法指令14条(包括BCD码调整指令1条),减法指令8条,乘/除法指令各1条。,3)逻辑运算类指令(24条):逻辑运算指令20条,循环移位指令4条。,4)位操作指令(12条):位传送指令2条,位置位、位清“0”和位取反指令6条,位运算指令4条。,5)控制转移类指令(22条):无条件转移指令4条,条件转移指令8条,调用和返回指令5条,位测试转移指令3条,判别CY标志转移指令2条。,1.按指令功能可分为五类1)数据传送类指令(29条):内部8,2.按指令执行所需要的时间可分为三类,1)单周期指令(64条)。,2)双周期指令(45条)。,3)四周期指令(2条)。,2.按指令执行所需要的时间可分为三类1)单周期指令(64条),3.按指令所占的字节数可分为三类,1)单字节指令(49条)。,2)双字节指令(46条)。,3)三字节指令(16条)。,3.按指令所占的字节数可分为三类1)单字节指令(49条)。,3.1.2指令格式,1.指令格式介绍,2.指令中数据的表示,3.1.2指令格式1.指令格式介绍2.指令中数据的表示,1.指令格式介绍,1)汇编语言语句由标号、操作码、操作数和注释四部分组成。,2)标号位于语句的开始,由18个ASCII字符组成,第一个字符必须是字母。,3)操作码是用英文缩写的指令功能助记符。,4)操作数在操作码之后,两者用空格分开。,5)注释在语句的最后,以分号“;”开始,是说明性的文字,与语句的具体功能无关,但是能增加程序的可阅读性,便于程序的调试与交流。,1.指令格式介绍1)汇编语言语句由标号、操作码、操作数和注释,2.指令中数据的表示,1)十进制数以D结尾,也可以省略,如55D或55。,2)十六进制数以H结尾,如55H。,3)二进制数以B结尾,如00110011B。,4)八进制数以O或Q结尾,如55O或55Q。,5)字符串用“”括起来,如M表示字符M的ASCII码。,2.指令中数据的表示1)十进制数以D结尾,也可以省略,如55,3.1.3指令中常用缩写符号的意义,1)#data:8位立即数。,2)#data16:16位立即数。,3)Rn:工作寄存器,R0R7,n=07。,4)Ri:工作寄存器,i=0或1。,5):间接地址符号。,6)direct:8位直接地址,可以是特殊功能寄存器(SFR)的地址或片内RAM单元地址。,7)addr11:11位目的地址。,8)addr16:16位目的地址。,9)rel:有符号的8位偏移地址,主要用于所有的条件转移指令和SJMP指令。,10)bit:位地址。,11)/ : 位操作数的前缀,表示对该位操作数取反,如 /bit。,3.1.3指令中常用缩写符号的意义1)#data:8位立即,3.1.3指令中常用缩写符号的意义,12):当前指令存放的地址。,13)(X):表示由X所指定的某寄存器或某单元中的内容。,14)(X):表示由X间接寻址单元中的内容。,15)B:通用寄存器,常用于乘法MUL和除法DIV的指令。,16)C:进位标志位或者布尔处理器中的累加器。,17):表示指令的操作结果是将箭头右边的内容传送到左边。,3.1.3指令中常用缩写符号的意义12):当前指令存放的地,3.2寻址方式,3.2.1立即寻址,3.2.2直接寻址,3.2.3寄存器寻址,3.2.4寄存器间接寻址,3.2.5变址寻址,3.2.6相对寻址,3.2.7位寻址,3.2寻址方式3.2.1立即寻址3.2.2直接寻址,3.2.1立即寻址,立即寻址是指指令中直接给出操作数的寻址方式。立即数用前面加有,#,号的,8,位或,16,位数来表示。立即数是指令代码的一部分,只能作源操作数。这种寻址方式主要用于对特殊功能寄存器和指定的存储单元赋初值。,3.2.1立即寻址立即寻址是指指令中直接给出操作数的寻址方,3.2.2直接寻址,1) 特殊功能寄存器(SFR):直接寻址是唯一的访问形式。,2) 片内RAM低128B单元(地址范围00H7FH)。,3) 221个位地址空间。,3.2.2直接寻址1) 特殊功能寄存器(SFR):直接寻址,3.2.3寄存器寻址,寄存器寻址是指操作数存放于寄存器中,(Rn,、,A,、,B,、,DPTR,、,CY),的寻址方式。,例如:,MOV,A,,,R7,;,(A)(R7),其功能是把寄存器,R7,内的操作数传送到累加器,A,中。由于操作数在,R7,中,因此在指令中指定了,R7,,就能从中取得操作数。,3.2.3寄存器寻址寄存器寻址是指操作数存放于寄存器中(R,3.2.4寄存器间接寻址,图3-1寄存器间接寻址示意图,3.2.4寄存器间接寻址图3-1寄存器间接寻址示意图,3.2.5变址寻址,图3-2变址寻址示意图,3.2.5变址寻址图3-2变址寻址示意图,3.2.6相对寻址,1)当前PC值是指相对转移指令所在地址(一般称为源地址)加上转移指令字节数,即当前PC值=源地址+转移指令字节数。,2)偏移量rel是有符号的单字节数,以补码表示,其相对值的范围是-128+127,负数表示从当前地址向地址减小的方向转移,正数表示从当前地址向地址增大的方向转移。,3.2.6相对寻址1)当前PC值是指相对转移指令所在地址(,图3-3相对寻址示意图,a)指令JZ 08H寻址示意图b)指令JZ 0F4H寻址示意图,图3-3相对寻址示意图a)指令JZ 08H寻址示意图b,3.2.7位寻址,1)直接使用位地址。,2)位名称表示方法。,3)单元地址加位数的表示方法。,4)专用寄存器符号加位数的表示方法。,3.2.7位寻址1)直接使用位地址。2)位名称表示方法。,表3-17种寻址方式及寻址空间,序号,寻址方式,寻址空间范围,1,寄存器寻址,R0R7,A,B,CY,DPTR寄存器,2,立即寻址,程序存储器,3,寄存器间址,片内RAM的00H0FFH,片外RAM,4,直接寻址,片内RAM的00H7FH,SFR,5,变址寻址,程序存储器,6,相对寻址,程序存储器,7,位寻址,片内RAM的20H2FH的128位,SFR中的93位,表3-17种寻址方式及寻址空间序号寻址方式寻址空间范围1,3.3数据传送类指令,3.3.1片内RAM数据传送类指令,3.3数据传送类指令3.3.1片内RAM数据传送类指令,3.3.1片内RAM数据传送类指令,1.以累加器为目的操作数的指令(4条),2.以寄存器Rn为目的操作数的指令(3条),3.以直接地址为目的操作数的指令(5条),4.以间接地址为目的操作数的指令(3条),3.3.1片内RAM数据传送类指令1.以累加器为目的操作数,3.3.1片内RAM数据传送类指令,图3-4片内RAM间数据传递关系,3.3.1片内RAM数据传送类指令图3-4片内RAM间数,1.以累加器为目的操作数的指令(4条),MOV,A,,,Rn,;,(A)(Rn),,,(n=0,7),MOV,A,,,direct,;,(A)(direct),MOV,A,,,Ri,;,(A)(Ri)(i=0,、,1),MOV,A,,,data,;,(A) data,这组指令的目的操作数都是累加器,A,,源操作数的寻址方式采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。,1.以累加器为目的操作数的指令(4条)MOVA,Rn,2.以寄存器Rn为目的操作数的指令(3条),MOV,Rn,,,A,;,(Rn) (A),,,(n=0,7),MOV,Rn,,,direct,;,(Rn) (direct),,,(n=0,7),MOV,Rn,,,data,;,(Rn) data,,,(n=0,7),这组指令都是以工作寄存器为目的操作数,源操作数的寻址方式采用寄存器寻址、直接寻址和立即寻址。,2.以寄存器Rn为目的操作数的指令(3条)MOVRn,A;,3.以直接地址为目的操作数的指令(5条),MOV,direct,,,A,;,(direct)(A),MOV,direct,,,Rn,;,(direct)(Rn),,,(n=0,7),MOV,directl,,,direct2,;,(direct1)(direct2),MOV,direct,,,Ri,;,(direct) (Ri),,,(i=0,、,1),MOV,direct,,,data,;,(direct)data,这组指令的目的操作数都是直接寻址单元,源操作数采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。,3.以直接地址为目的操作数的指令(5条)MOVdirect,4.以间接地址为目的操作数的指令(3条),MOV,Ri,,,A,;,(Ri)(A),MOV,Ri,,,direct,;,(Ri)(direct),MOV,Ri,,,data,;,(Ri)data,这组指令的目的操作数都是间接寻址单元,源操作数可采用寄存器寻址、直接寻址和立即寻址方式。,4.以间接地址为目的操作数的指令(3条)MOVRi,A,5.16位数据的传递指令(1条),(1) MOVA,R0和MOVA,R0,(2) MOVA, #40H和MOVA,40H,3.3.2片外RAM数据传送类指令,3.3.3程序存储器向累加器A传送数据类指令,3.3.4数据交换类指令,3.3.5堆栈操作类指令,5.16位数据的传递指令(1条)(1) MOVA,R0和,(2) MOVA, #40H和MOVA,40H,解:它们的执行结果为,解:运行结果为,解:上述指令均是错误的。,解法一: MOV55H,15H,解法二: MOVR6,15H,解法三: MOVR1,15H,解法四:MOVA,15H,解:30H和40H单元中都装有数据,要想把其中的内容相交换必须寻求第三个存储单元对其中的一个数进行缓冲,这个存储单元若选为累加器A,则相应程序如下:,(2) MOVA, #40H和MOVA,40H解:它,3.3.2片外RAM数据传送类指令,1)要访问片外RAM,必须知道片外RAM单元的地址,在后两条指令中,地址是被直接放在DPTR中,可寻址片外RAM的64KB空间。,2)使用访问片外RAM数据传送指令时,应当首先将要读或写的地址送入DPTR或Ri中,然后再用读或者写命令。,3)也可以由P2与R0或P2与R1组成16位地址指针,寻址片外RAM的64KB空间。,3.3.2片外RAM数据传送类指令1)要访问片外RAM,必,3.3.3程序存储器向累加器A传送数据类指令,1)MOVC A,A+DPTR:这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关。,2)MOVC A, A+PC:这条指令的优点是不改变SFR和PC的状态,只要根据A的内容就可以取出表格中的常数。,3.3.3程序存储器向累加器A传送数据类指令1)MOVC,3.3.3程序存储器向累加器A传送数据类指令,图3-5查表指令,3.3.3程序存储器向累加器A传送数据类指令图3-5查表,图3-609二次方值表,图3-609二次方值表,3.3.4数据交换类指令,1.字节交换指令(Exchange,XCH,2.半字节交换指令(1条),3.累加器A高低半字节交换指令(1条),3.3.4数据交换类指令1.字节交换指令(Exchange,1.字节交换指令(Exchange,XCH,XCH,A,,,Rn,;,(A)(Rn),XCH,A,,,Ri,;,(A)(Ri),XCH,A,,,direct,;,(A)(direct),指令功能:将累加器,A,的内容与源操作数,(Rn,、,direct,或,Ri),所指定单元的内容相互交换。,1.字节交换指令(Exchange,XCHXCHA,Rn,2.半字节交换指令(1条),XCHD A,,,Ri,;,(A)3,0 (Ri)3,0,指令功能:将累加器,A,中的内容的低,4,位与,Ri,所指的片内,RAM,单元中的低,4,位互换,但它们的高,4,位均不变。,例如,设,(A)=0ABH,,,(R0)=30H,,,(30H)=12H,,执行指令“,XCHD A,,,R0”,后,,(A)=0A2H,,,(30H)=1BH,。,2.半字节交换指令(1条)XCHD A,Ri ;(A),3.累加器A高低半字节交换指令(1条),解:本题是一个字节交换问题,故可以采用3条字节交换指令中的任何一条。若采用第三条字节交换指令,则相应程序为,解:09的ASCII码为30H39H。进行比较后发现,两者之间仅相差30H,故可以利用半字节指令把09的数装配成相应的ASCII码。程序如下:,3.累加器A高低半字节交换指令(1条)解:本题是一个字节交换,3.3.5堆栈操作类指令,1)PUSH称为压栈指令,将指定的直接寻址单元的内容压入堆栈。,2)POP称为出栈指令,它是将当前堆栈指针SP所指示的单元内容弹出到指定的片内RAM单元中,然后再将SP减1。,3.3.5堆栈操作类指令1)PUSH称为压栈指令,将指定的,图3-7堆栈指令执行过程,a)指令“PUSH 40H”操作示意图b)指令“POP 30H”操作示意图,图3-7堆栈指令执行过程a)指令“PUSH 40H”操,3.4算术运算类指令,3.4.1加法指令,3.4.2减法指令,3.4.3乘法指令,3.4.4除法指令,3.4算术运算类指令3.4.1加法指令3.4.2减法,3.4.1加法指令,1.不带进位位的加法指令(Addition,ADD,1 00110100,2.带进位加法指令(Addition,3.增量指令(Increase,INC,4.十进制调整指令(Decimal,3.4.1加法指令1.不带进位位的加法指令(Additio,1.不带进位位的加法指令(Addition,ADD,解:10000101,1.不带进位位的加法指令(Addition,ADD解:,2.带进位加法指令(Addition,解:参考程序如下:,2.带进位加法指令(Addition解:参考程序如下:,3.增量指令(Increase,INC,解:,3.增量指令(Increase,INC 解:,4.十进制调整指令(Decimal,1)这条指令必须紧跟在ADD或ADDC指令之后,对加法指令的结果进行调整,且这里的ADD或ADDC的操作是对压缩的BCD码表示的数进行运算。,2)DA指令不影响溢出标志。,4.十进制调整指令(Decimal1)这条指令必须紧跟在AD,1W4.TIF,1W4.TIF,3.4.2减法指令,1.带借位减法指令(Subtract,2.减1指令(Decrease,DEC,3.4.2减法指令1.带借位减法指令(Subtract2,1.带借位减法指令(Subtract,图3-8例题3-19程序,流程图,1.带借位减法指令(Subtract图3-8例题3-19程,2.减1指令(Decrease,DEC,解:首先要考虑到“DA A”指令只能对加法调整,故必须先化BCD减法为加法,关键是求两位十进制减数的补码(9AH减数),如图3-8所示。,2.减1指令(Decrease,DEC解:首先要考虑到“DA,1W5.TIF,1W5.TIF,1W6.TIF,1W6.TIF,3.4.3乘法指令,1)若乘积大于255,(OV)=1;否则(OV)=0。,2)CY总是为“0”。,3)P受累加器A中的内容影响。,3.4.3乘法指令1)若乘积大于255,(OV)=1;否则,图3-9例题3-20,程序流程图,图3-9例题3-20程序流程图,1W7.TIF,1W7.TIF,3.4.4除法指令,1)CY、OV,清“0” 。,2)若(B)=0,(OV)=1。,3)P受累加器A 中的内容影响。,1)将要转换的二进制数除以100,商即为百位数,余数再除以10,商和余数分别为十位和个位数。,2)通过SWAP、ADD指令组成一个压缩的BCD数,其中十位数放在A,74,,个位数放在A,30,。,1)乘法指令和除法指令需要4个机器周期,是指令系统中执行时间最长的指令。,2)在进行8位数乘除法运算时,必须将相应的被乘数和乘数、被除数和除数分别放入累加器A和寄存器B中,才能进行计算。,3)在51单片机中,乘法和除法指令仅适用于8位数乘法和除法运算。,3.4.4除法指令1)CY、OV,清“0” 。2)若(B,3.4.4除法指令,图3-10例3-21流程图,3.4.4除法指令图3-10例3-21流程图,3.5逻辑运算类指令,3.5.1累加器A的逻辑运算指令,3.5.2两个操作数的逻辑操作运算指令,3.5逻辑运算类指令3.5.1累加器A的逻辑运算指令3,3.5.1累加器A的逻辑运算指令,1.累加器清“0”,2.累加器按位取反指令,3.循环移位指令(4条),3.5.1累加器A的逻辑运算指令1.累加器清“0”,1W8.TIF,1W10.TIF,1W8.TIF1W10.TIF,3.循环移位指令(4条),1W11.TIF,1W9.TIF,3.循环移位指令(4条)1W11.TIF1W9.TIF,3.5.2两个操作数的逻辑操作运算指令,1.逻辑“与”操作指令(And,2.逻辑“或”操作指令(Or,3.逻辑“异或”指令(6条),3.5.2两个操作数的逻辑操作运算指令1.逻辑“与”操作指,1.逻辑“与”操作指令,ANL,A,,,Rn,;,(A)(A)(Rn),ANL,A,,,direct,;,(A)(A)(direct),ANL,A,,,Ri,;,(A)(A)(Ri),ANL,A,,,#data,;,(A)(A) data,ANL,direct,,,A,;,(direct)(direct)(A),ANL,direct,,,#data,;,(direct)(direct) data,指令功能:将两个操作数的内容按位进行逻辑“与”操作,并将结果送回目的操作数的单元中。,利用“与”操作可屏蔽一些位或影响标志位。例如,要将一个字节中的高,4,位清“,0”,,可用,0FH,进行“与”操作。,1.逻辑“与”操作指令ANLA,Rn ;(A,2.逻辑“或”操作指令,ORL,A,,,Rn,;,(A)(A)(Rn),ORL,A,,,direct,;,(A)(A)(direct),ORL,A,,,Ri,;,(A)(A)(Ri),ORL,A,,,#data,;,(A)(A)data,ORL,direct,,,A,;,(direct)(direct)(A),ORL,direct,,,#data,;,(direct)(direct) data,指令功能:将两个操作数的内容按位进行逻辑“或”操作,并将结果送回目的操作数的单元中。利用“或”操作可进行数位的组合。例如,要把数字转换成,ASCII,码,可用,30H,进行或操作。,2.逻辑“或”操作指令ORLA,Rn ;(A),3.逻辑“异或”指令(6条),解:完成本题有多种求解方法,现介绍其中两种。,(1)利用MOVX,(2)利用MOVX,3.逻辑“异或”指令(6条)解:完成本题有多种求解方法,现介,(1)利用MOVX,1W12.TIF,(1)利用MOVX1W12.TIF,(2)利用MOVX,1)选用工作寄存器组中0区为工作区。,2)利用移位指令实现累加器A的内容乘6。,1) ANLPSW,#11100111B ;PSW的D4、D3位为00,2) CLRC,(2)利用MOVX1)选用工作寄存器组中0区为工作区。2),3.6位操作类指令,3.6.1位变量传送指令,3.6.2位变量修改指令,3.6.3位变量逻辑操作指令,3.6位操作类指令3.6.1位变量传送指令3.6.2,3.6.1位变量传送指令,位变量传送指令有互逆的,2,条,可实现进位位,C,与某直接寻址位,bit,间内容的传送。,MOV,C,,,bit,;,(CY)(bit),MOV,bit,,,C,;,(bit)(CY),指令功能:把源操作数的布尔变量送到目的操作数指定的位地址单元,其中一个操作数必须为进位标志,CY,,另一个操作数可以是任何可直接寻址位。,3.6.1位变量传送指令位变量传送指令有互逆的2条,可实现,3.6.2位变量修改指令,位变量修改指令共有,6,条,分别是对位进行清“,0”,、置“,1”,和取反指令,不影响其他标志。,CLR,C,;,(CY)0,CLR,bit,;,(bit)0,CPL,C,;,(CY)(/CY),CPL,bit,;,(bit)(/bit),SETB,C,;,(CY)1,SETB,bit,;,(bit)1,3.6.2位变量修改指令位变量修改指令共有6条,分别是对位,3.6.3位变量逻辑操作指令,位变量逻辑操作指令包括位变量逻辑“与”和逻辑“或”,共有,4,条指令。,ANL,C,,,bit,;,(CY)(CY)(bit),ANL,C,,,/bit,;,(CY)(CY)(/bit),ORL,C,,,bit,;,(CY)(CY)(bit),ORL,C,,,/bit,;,(CY)(CY)(/bit),【,注意,】,位变量逻辑运算指令中无逻辑“异或”,(XRL),。,3.6.3位变量逻辑操作指令位变量逻辑操作指令包括位变量逻,3.6.3位变量逻辑操作指令,图3-11例3-29硬件逻辑电路,3.6.3位变量逻辑操作指令图3-11例3-29硬件逻辑,3.7控制转移类指令,3.7.1无条件转移指令,3.7.2条件转移指令,3.7.3调用与返回指令,3.7控制转移类指令3.7.1无条件转移指令3.7.2,3.7.1无条件转移指令,1.绝对转移指令(Absolute,2.相对转移指令(Short,3.长转移指令(Long,4.间接转移指令(散转指令),3.7.1无条件转移指令1.绝对转移指令(Absolute,1.绝对转移指令(Absolute,1W13.TIF,1.绝对转移指令(Absolute1W13.TIF,1.绝对转移指令(Absolute,1W14.TIF,1.绝对转移指令(Absolute1W14.TIF,2.相对转移指令,SJMP,rel,;,(PC)(PC)+2+rel,转移范围为当前,PC,值的,128,+127,范围内,共,256,个单元。,若偏移量,rel,取值为,0FEH(,2,的补码,),,则目标地址等于源地址,相当于动态停机,程序终止在这条指令上,停机指令在调试程序时很有用。,51,系列单片机没有专用的停机指令,若要求动态停机可用,SJMP,指令来实现:,HERE,:,SJMP,HERE,;动态停机,2.相对转移指令SJMPrel;(PC)(PC)+2,3.长转移指令,LJMP,addr16,;,(PC)addr16,执行该指令时,将,16,位目标地址,addr16,装入,PC,,程序无条件转向指定的目标地址。转移指令的目标地址可在,64KB,程序存储器地址空间的任何地方,不影响任何标志。,4.,间接转移指令,(,散转指令,),JMP,A+DPTR,;,(PC)(A),(DPTR),3.长转移指令LJMPaddr16;(PC)addr,4.间接转移指令(散转指令),JMP,A+DPTR,;,(PC)(A),(DPTR),指令功能:把累加器,A,中的,8,位无符号数与数据指针,DPTR,的,16,位数相加,其和作为下一条指令的地址送入,PC,,不影响标志位。间接转移指令采用变址方式实现无条件转移,其特点是转移地址可以在程序运行中加以改变。例如,把,DPTR,作为基地址时,根据,A,的不同值就可以实现多分支转移,故一条指令可完成多条条件判断转移指令功能。这种功能称为散转功能,所以间接指令又称为散转指令。,4.间接转移指令(散转指令)JMPA+DPTR;(PC,3.7.2条件转移指令,1.进位/无进位转移指令,2.累加器内容为零/非零转移指令,3.比较不相等转移指令,4.减1不为零转移指令,5.位测试指令,3.7.2条件转移指令1.进位/无进位转移指令2.累加器,1.进位/无进位转移指令,JC,rel,;,(CY)=1,,则,(PC)(PC)+2+rel,;,(CY)=0,,则,(PC)(PC)+2,JNC,rel,;,(CY)=0,,则,(PC)(PC)+2+rel,;,(CY)=1,,则,(PC)(PC)+2,指令功能:第一条指令执行时,先判断,CY,中的值。若,CY,1,,则程序发生转移;若,(CY),0,,则程序不转移,继续执行原程序。第二条指令执行时的情况与第一条指令恰好相反:若,(CY),0,,则程序发生转移;若,(CY),1,,则程序不转移,继续执行原程序。,1.进位/无进位转移指令JCrel ;(CY)=1,则,2.累加器内容为零/非零转移指令,图3-12JZ和JNZ指令执行示意图,a)JZ rel指令b)JNZ rel指令,2.累加器内容为零/非零转移指令图3-12JZ和JNZ指令,3.比较不相等转移指令,1) 这4条指令都是三字节指令,指令执行时PC3次加1,然后再加地址偏移量rel。,2) 指令执行过程中的比较操作实际上是减法操作,但不保存两数之差,产生CY标志。,3) 若参加比较的两个操作数X和Y是无符号数,则可以直接根据指令执行后产生的CY来判断两个操作数的大小。,4) 若参加比较的两个操作数X和Y是有符号数补码。,3.比较不相等转移指令1) 这4条指令都是三字节指令,指令执,图3-13带符号数的比较方法,图3-13带符号数的比较方法,4.减1不为零转移指令,DJNZ,Rn,,,rel,;两字节指令,DJNZ,direct,,,rel,;三字节指令,,direct,可以是片内,RAM,任意字节地址,指令功能:把源操作数减,1,,结果回送到源操作数中去,如果结果不为,0,则转移。,【,注意,】,这两条指令均可以构成循环结构程序。,4.减1不为零转移指令DJNZRn,rel ;两字节指令,5.位测试指令,JB,bit,,,rel,;,(bit)=1,,则,(PC)(PC)+3+rel,;,(bit)=0,,则,(PC)(PC)+3,JNB,bit,,,rel,;,(bit)=0,,则,(PC)(PC)+3+rel,;,(bit)=1,,则,(PC)(PC)+3,JBC,bit,,,rel,;,(bit)=1,,则,(PC)(PC)+3+rel,且,(bit)0,;,(bit)=0,,则,(PC)(PC)+3,指令功能:当某一特定条件满足时,执行转移操作指令,(,相当于一条相对转移指令,),;条件不满足时,顺序执行下面的一条指令。,5.位测试指令JBbit,rel ;(,解:程序如下:,图3-14按键连接图及流程图,解:程序如下:图3-14按键连接图及流程图,解:程序如下。,图3-15主程序与子程序结构,a)二次调用b)二级子程序嵌套,解:程序如下。图3-15主程序与子程序结构a)二次调用,3.7.3调用与返回指令,1.绝对调用指令(Absolute,2.长调用指令(Long,3.返回指令(2条),4.空操作指令(1条),3.7.3调用与返回指令1.绝对调用指令(Absolute,3.7.3调用与返回指令,图3-16二级子程序嵌套及断点地址存放,a)二级子程序嵌套示意图b)转入子程序2时的堆栈,3.7.3调用与返回指令图3-16二级子程序嵌套及断点地,1.绝对调用指令(Absolute,1)(PC)+ 2 (PC),并压入堆栈,先压入PC低8位,后压入PC高8位。,2)PC1511 a100 PC,获得子程序起始地址。,1.绝对调用指令(Absolute1)(PC)+ 2 (P,图3-17例3-36图,图3-17例3-36图,2.长调用指令(Long,1)(PC)+ 3 (PC),并压入堆栈,先压入PC的低8位,后压入PC的高8位。,2)addr16 PC,获得子程序起始地址。,3)可调用64KB地址范围内的任意子程序。,1) 转移指令不保存返回地址,而子程序调用指令在转向目的地址的同时,必须保留返回地址(也称为断点地址),以便执行返回指令时回到主程序断点的位置。,2) 堆栈是片内RAM中一片存储区,采用先进后出的原则存取数据,调用时保护断点的工作由调用指令完成,调用后恢复断点的工作由返回指令完成。,2.长调用指令(Long1)(PC)+ 3 (PC),并压,3.返回指令(2条),(1) 子程序的返回,(2) 中断返回指令,3.返回指令(2条)(1) 子程序的返回(2) 中断返回指,(1) 子程序的返回,RET,;,PC15,PC8(SP),,,(SP)(SP),1,;,PC7,PC0(SP),,,(SP)(SP),1,指令功能:,RET (Return),指令从堆栈中取出,16,位断点地址送回,PC,,使子程序返回主程序。,(1) 子程序的返回RET;PC15PC8(SP),,(2) 中断返回指令,RETI,;,PC15,PC8(SP),,,(SP)(SP),1,;,PC7,PC0(SP),,,(SP)(SP)-1,指令功能:,RETI (Return for Interrupt),将堆栈顶部,2,字节的内容送到,PC,中,该指令用于中断服务程序的末尾。,与,RET,指令不同之处:,RETI,指令还具有清除中断优先级触发器状态、恢复中断逻辑等功能。,(2) 中断返回指令RETI;PC15PC8(SP),(,(2) 中断返回指令,图3-18红绿灯和P1口连接图,(2) 中断返回指令图3-18红绿灯和P1口连接图,4.空操作指令(1条),1) 该指令不执行任何操作,仅仅将PC加1,使程序继续向下执行。,2) 该指令为单周期指令,所以在时间上占用一个机器周期,常用于程序的等待或时间的延迟。,4.空操作指令(1条)1) 该指令不执行任何操作,仅仅将PC,3.8汇编语言程序设计,3.8.1汇编语言程序设计概述,3.8.2常用伪指令,3.8.3顺序结构程序设计,3.8.4分支结构程序设计,3.8.5循环结构程序设计,3.8.6子程序设计,3.8.7综合编程举例,3.8汇编语言程序设计3.8.1汇编语言程序设计概述3,3.8.1汇编语言程序设计概述,1.程序设计的三种语言,2.汇编语言程序设计思路,3.8.1汇编语言程序设计概述1.程序设计的三种语言2.,1.程序设计的三种语言,(1) 机器语言,(2) 汇编语言,(3) 高级语言,1.程序设计的三种语言(1) 机器语言(2) 汇编语言(,(1) 机器语言,在计算机中,用二进制代码表示的指令、数字和符号简称为机器语言。直接用机器语言编写的程序称为机器语言程序。但是用机器语言编制的程序不易看懂,难于编写、难于查错和难于交流,容易出错。,(1) 机器语言在计算机中,用二进制代码表示的指令、数字和符,(2) 汇编语言,汇编语言是一种面向机器的程序设计语言,它用英文字符来代替对应的机器语言。例如,用,ADD,代替机器语言中的加法运算,这些英文字符被称为助记符。,(2) 汇编语言汇编语言是一种面向机器的程序设计语言,它用英,(3) 高级语言,计算机高级语言是一种面向算法、过程和对象的程序设计语言,它采用更接近人们习惯的自然语言和数学语言描述算法、过程和对象,如,BASIC,、,C,、,Java,等都是常用的高级语言。,(3) 高级语言计算机高级语言是一种面向算法、过程和对象的程,2.汇编语言程序设计思路,(1) 分析问题,确定算法,(2) 画程序流程图,(3) 编写源程序,(4) 汇编和调试,2.汇编语言程序设计思路(1) 分析问题,确定算法(2),(1) 分析问题,确定算法,先对所需解决的问题进行分析,明确目的和任务,了解现有条件和目标要求后再确定解决该问题的方法和步骤,即通常所说的算法。对于一个问题,一般有多种不同的解决方案,通过比较从中挑选最优方案。,(1) 分析问题,确定算法先对所需解决的问题进行分析,明确目,(2) 画程序流程图,把算法用流程图描述出来,即用流程图中的各种图形、符号、流向线等来描述程序设计的过程,它可以清晰表达程序的设计思路。,起止框:开始和结束框,在程序的开始和结束时使用。,判断框:进行条件判断,以决定程序的流向。,处理框:表示各种处理和运算。,流向线:表示程序执行的流向。,连接点:圈中标注相同数字或符号的,表示连接在一起。,(2) 画程序流程图 把算法用流程图描述出来,即用流程图中的,(3) 编写源程序,根据流程图中各部分的功能,选取合适的指令和结构编写出具体程序。,(3) 编写源程序根据流程图中各部分的功能,选取合适的指令和,(4) 汇编和调试,对已编写好的程序,先进行汇编。在汇编过程中,若还有语法错误,需要对源程序进行修改。汇编工作完成后,上机调试运行。先输入给定的数据,运行程序,检查运行结果是否正确,若发现错误,通过分析,再对源程序进行修改。,(4) 汇编和调试对已编写好的程序,先进行汇编。在汇编过程中,3.8.2常用伪指令,1.汇编起始地址伪指令,2.汇编结束伪指令,3.定义字节数据伪指令,4.定义字数据伪指令,5.赋值伪指令,6.数据地址赋值伪指令,7.位地址符号定义伪指令,3.8.2常用伪指令1.汇编起始地址伪指令2.汇编结束伪,1.汇编起始地址伪指令,对已编写好的程序,先进行汇编。在汇编过程中,若还有语法错误,需要对源程序进行修改。汇编工作完成后,上机调试运行。先输入给定的数据,运行程序,检查运行结果是否正确,若发现错误,通过分析,再对源程序进行修改。,1.汇编起始地址伪指令对已编写好的程序,先进行汇编。在汇编过,2.汇编结束伪指令,格式:,END,指令功能:,END,是汇编源程序的结束标志,在整个源程序中只能有一条,END,命令,且位于程序的最后。如果,END,命令出现在中间,则其后的源程序汇编时将不予处理。,2.汇编结束伪指令格式:,3.定义字节数据伪指令,格式:,标号:,DB,8,位字数据表,指令功能:,DB (Definition Byte),命令用于定义从指定的地址开始,在程序存储器的连续单元中定义字数据。常用于存放数据表格。,说明:字节数据可以是一字节常数或字符,或用逗号分开的字符串,或用引号括起来的字符串。,3.定义字节数据伪指令格式:,4.定义字数据伪指令,格式:,标号:,DW,16,位字数据表,指令功能:,DW (Definition Word),命令用于定义从指定地址开始,在程序存储器的连续单元中定义,16,位的字数据。,说明:存放时,数据的高,8,位在前,(,低地址,),,低,8,位在后,(,高地址,),。,4.定义字数据伪指令格式:,5.赋值伪指令,格式:,字符名称,EQU,赋值项,指令功能:,EQU (Equate),用于给字符名称赋值。赋值后,其符号值在整个程序中有效。,说明:赋值项可以是常数、地址、标号或表达式。其值为,8,位或,16,位二进制数。赋值以后的字符名称既可以作立即数使用,也可以作地址使用。必须先定义后使用,放在程序开头。,5.赋值伪指令格式:,6.数据地址赋值伪指令,1) EQU指令可以把一个汇编符号赋给一个字符名称,而DATA指令不能。,) EQU指令应先定义后使用,而DATA指令可以先使用后定义。,6.数据地址赋值伪指令1) EQU指令可以把一个汇编符号赋给,7.位地址符号定义伪指令,格式:,字符名称,BIT,位地址,指令功能:用于给字符名称赋以位地址。,说明:位地址可以是绝对地址,也可以是符号地址,(,即位符号名称,),。,例如:,KEY0,BIT,P1.0,表示把,P1.0,的位地址赋给变量,KEY0,,在其后的编程过程中,,KEY0,就可以作为位地址,(P1.0),使用。,7.位地址符号定义伪指令格式:,3.8.3顺序结构程序设计,解:两位压缩BCD码转换成二进制数的算法为:(a,1,a,0,),BCD,=10a,1,+a,0,,程序流程图如图3-19所示。,3.8.3顺序结构程序设计解:两位压缩BCD码转换成二进制,3.8.3顺序结构程序设计,图3-19例3-38流程图,3.8.3顺序结构程序设计图3-19例3-38流程图,3.8.4分支结构程序设计,1) 建立测试条件。,2) 选用合适的条件转移指令。,3) 在转移的目的地址处设定标号。,1.单分支程序,2.多分支程序,3.8.4分支结构程序设计1) 建立测试条件。2) 选用,3.8.4分支结构程序设计,图3-20分支结构图,3.8.4分支结构程序设计图3-20分支结构图,图3-21分支程序结构图,a)单分支结构图b)双分支结构图c)多支结构图,图3-21分支程序结构图a)单分支结构图b)双分支结构,1.单分支程序,单分支程序是通过条件转移指令实现的,即根据条件对程序的执行结果进行判断,条件满足则进行程序转移,条件不满足则程序顺序执行。,在,51,系列单片机指令系统中,可利用,JZ,、,JNZ,、,CJNE,、,DJNZ,、,JC,、,JNC,、,JB,、,JNB,、,JBC,等指令,完成为,0,、为,1,、为正、为负以及相等、不相等各种条件判断。,1.单分支程序单分支程序是通过条件转移指令实现的,即根据条件,解:根据题意,程序流程如图3-22所示。,图3-22例3-39流程图,解:根据题意,程序流程如图3-22所示。图3-22例3-3,2.多分支程序,1) 使用多条CJNE指令,通过逐次比较,实现多分支程序转移。,2) 使用查地址表方法实现多分支程序转移。,2.多分支程序1) 使用多条CJNE指令,通过逐次比较,实现,图3-23例题3-41程序流程图,图3-23例题3-41程序流程图,3.8.5循环结构程序设计,1) 循环初始化。,2) 循环体。,3) 循环控制。,4) 循环结束。,1.单重循环程序,2.多重循环程序,3.8.5循环结构程序设计1) 循环初始化。2) 循环体,图3-24循环程序结构,a)先处理后控制b)先控制后处理,图3-24循环程序结构a)先处理后控制b)先控制后处理,图3-25例3-42流程图,图3-25例3-42流程图,图3-26例3-43流程图,图3-26例3-43流程图,图3-27例3-44图,a)硬件连线图b)程序流程图,图3-27例3-44图a)硬件连线图b)程序流程图,3.8.6子程序设计,1.子程序的调用与返回,2.保存与恢复寄存器内容,3.子程序的参数传递,4.子程序的嵌套,5.典型子程序设计,0123 4 5 6 7 8 9 A B C D E F,3.8.6子程序设计1.子程序的调用与返回2.保存与恢复,1.子程序的调用与返回,(1) 子程序的调用,(2) 子程序的返回,1.子程序的调用与返回(1) 子程序的调用(2) 子程序的,2.保存与恢复寄存器内容,(1) 保护现场,(2) 恢复现场,2.保存与恢复寄存器内容(1) 保护现场(2) 恢复现场,3.子程序的参数传递,1) 应用工作寄存器或累加器传递参数。,2) 应用内存单元。,3) 应用堆栈传递参数。,4) 利用位地址传送子程序参数。,3.子程序的参数传递1) 应用工作寄存器或累加器传递参数。,图3-28子程序嵌套示意图,图3-28子程序嵌套示意图,4.子程序的嵌套,在子程序中若再调用子程序,称为子程序的嵌套,如图,3-28,所示。,51,系列单片机也允许多重嵌套。,4.子程序的嵌套在子程序中若再调用子程序,称为子程序的嵌套,,5.典型子程序设计,(1) 延时程序,(2) 查表程序,(3) 代码转换程序,5.典型子程序设计(1) 延时程序(2) 查表程序(3),(1) 延时程序,解:根据题意,延时子程序的时限可以有以下几种方法。,1) 单循环延时,延时时间,t,=(210+1+2)s=23s,2) 双重循环延时,延时时间,t,=(2100+2+1)10+1+2s=2033s,3) 三重循环延时,程序流程如图3-29所示。,(1) 延时程序解:根据题意,延时子程序的时限可以有以下几种,(1) 延时程序,图3-29延时子程序,流程图,(1) 延时程序图3-29延时子程序流程图,(2) 查表程序,解:计算某数的二次方可采用查表的方法实现,并编写成子程序。只要两次调用子程序,并求和就可得运算结果。,(2) 查表程序解:计算某数的二次方可采用查表的方法实现,并,图3-30例3-46流程图,图3-30例3-46流程图,(3) 代码转换程序,解:在单片机汇编程序设计中,主要涉及十六进制的16个符号“0F”的ASCII码及其数值的转换。ASCII码是有一定规律的,数字09的ASCII码为该数值加上30H,而对于字母“AF”的ASCII码为该数值加上37H。“0F”对应的ASCII码如下:,(3) 代码转换程序解:在单片机汇编程序设计中,主要涉及十六,1) 入口参数。,2) 出口参数。,(4) 算术运算子程序,1) 入口参数。2) 出口参数。(4) 算术运算子程序,1W20.TIF,1W20.TIF,3.8.7综合编程举例,1) 输入信号。,2) 输出信号。,(1) 将累加器内容送工作寄存器R0。,(2) 将累加器内容送片内RAM的7BH单元。,(3) 将累加器内容送片外RAM的7BH单元。,(4) 将累加器内容送片外RAM的007BH单元。,(5) 将片外ROM中007BH单元内容送累加器。,(1) MOVA,#24H 与MOVA,24H,(2) MOVA,R0 与 MOVA,R0,(3) MOVA,R0 与 MOVXA,R0,(1) MOVR0,#30H,(2) MOVA,R0,(3) MOVR1,A,3.8.7综合编程举例1) 输入信号。2) 输出信号。,3.8.7综合编程举例,(4) MOVB,Rl,(5) MOVR0,P1,(6) MOVP3,P1,(7) MOV10H,#20H,(8) MOV30H,10H,(1) MOVR6,A,(2) MOVR0,A,(3) MOVA,#90H,(4) MOVA,90H,(5) MOV80H,#81H,(6) MOVXR0,A,(7) PUSHA,(8) SWAPA,3.8.7综合编程举例(4) MOVB,Rl(5),3.8.7综合编程举例,(9) XCHA,R0,(1) MOVA,R1,(2) MOVXDPTR,A,(3) MOVCA,A+DPTR,(4) XCHDA,R1,(1) ADDA,R1,(2) ADDCA,78H,(3) SUBBA,#77H,(4) INCR1,(5) DEC78H,(6) MULAB,(7) DIVAB,(8) ANL78H,#78H,3.8.7综合编程举例(9) XCHA,R0(1) M,3.8.7综合编程举例,(9) ORLA,#0FH,(10) XRL80H,A,3.8.7综合编程举例(9) ORLA,#0FH(10,图3-31例3-49图,图3-31例3-49图,图3-32例3-50图,图3-32例3-50图,图3-33例题3-51程序流程图,图3-33例题3-51程序流程图,(10) XRL80H,A,图3-34习题3-27图,(10) XRL80H,A图3-34习题3-27图,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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