单元三MCS-51单片机指令系统

上传人:tian****1990 文档编号:247461594 上传时间:2024-10-19 格式:PPT 页数:105 大小:318.50KB
返回 下载 相关 举报
单元三MCS-51单片机指令系统_第1页
第1页 / 共105页
单元三MCS-51单片机指令系统_第2页
第2页 / 共105页
单元三MCS-51单片机指令系统_第3页
第3页 / 共105页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单元三,MCS-51,单片机指令系统,3.1,任务二,P1,口外接,8,只发光二极管模拟彩灯,3.2,任务三 单片机做加、减、乘、除运算,3.3,任务四 单片机做逻辑运算,3.4,任务五 按键控制灯,3.5,任务六,LED,显示电路,返回主目录,3.1,任务二,P,1,口外接,8,只,LED,发光二极管模拟彩灯,学习目标,:通过学习任务二的完成方法,掌握,MCS-51,单片机的数据传送指令的功能及,MCS-51,单片机的寻址方式。,任务描述,:,利用,P1,口外接的,8,只,LED,发光二极管模拟彩灯。常见的彩灯模式有:流水式彩灯、追逐式彩灯、累积式彩灯、开幕式与闭幕式彩灯以及将上述模式组合而成的复合式彩灯。大多数的彩灯都是采用单片机控制的,简单的彩灯单片机的控制程序也较为简单,复杂的彩灯单片机控制程序也较为复杂。,3.1.1,硬件电路,1,、硬件电路,2、工作原理,当,P,1,。,0,P,1,。,7,中的某端口为低电平时,对应的发光二极管亮,为高电平灭。我们只要控制,P1,口各位的电平状态,就可以控制,8,只,LED,的亮与灭。,例如使(,P,1,),=01010101B=55H,,,D,7,、,D,5,、,D,3,、,D,1,4,只,LED,亮,,D,6,、,D,4,、,D,2,、,D,0,4,只,LED,灭,从效果上看亮与灭是相间隔的;反之,使(,P,1,),=10101010B=AAH,,,则另外,4,只,LED,亮,若反复以一定时间间隔不断从,P,1,口轮流输出,55,H,和,AAH,,,则,P,1,口上,8,只,LED,会呈现流水彩灯的效果。,1)将立即数送,P,1,口的程序,ORG 0000H,;,定义程序从程序存贮器0000,H,单元开始存放,LOOP:,MOV P,1,,#55H,;,立即数55,H,送,P,1,口,4只,LED,亮,SJMP LOOP,;,原地踏步,END,;,程序结束,2)通过累加器,A,控制,P,1,口的程序,ORG 0000H,LOOP:,MOV A,#0AAH,;,将立即数,AAH,送累加器,A,MOV P,1,, A,;,累加器,A,中的数送,P,1,端口,SJMP LOOP,;,转移到,LOOP,END,3.1.2,控制程序,3),流水式彩灯程序,开始,55,H,送,P,1,口,延时0.3秒,AAH,送,P,1,口,延时0.3秒,流水式彩灯程序流程图,ORG 0000H,LOOP: MOV P1,#55H,;,将立即数55,H,送,P,1,端口,LCALL TIME,;,调延时子程序,TIME,MOV P1,#0AAH,;,将立即数,AAH,送,P,1,端口,LCALL TIME,;,调延时子程序,TIME,SJMP LOOP,;,转移到,LOOP,TIME: MOV R6,#200,;,延时子程序,TIME,TIME1:MOV R7,#200,TIME2:NOP,NOP,NOP,DJNZ R7,TIME2,DJNZ R6,TIME1,RET,END,4)开幕式与闭幕式彩灯程序,ORG0000H,LJMPMAIN,;,跳转到主程序,ORG0030H,MAIN:,MOVR0,#8,;R0,送循环次数8,MOVDPTR,#TAB,;,给数据指针赋值,LOOP:,MOVA,#00H ;,MOVCA, A + DPTR,MOVP1,A,LCALLTIME,INCDPL,DJNZR0,LOOP,SJMPMAIN,TIME:,MOV R6,#200,TIME1:,MOV R7,#200,TIME2:,NOP,NOP,NOP,DJNZ R7,TIME2,DJNZ R6,TIME1,RET,TAB:,DB 81H,0C3H,0E7H,0FFH,18H,3CH,7EH,0FFH,END,用“伟福”模拟仿真软件进行程序的编辑、编译。,打开“,ISP,下载软件”将目标文件下载到,ISP-4,实验开发板上的,AT89S51,单片机芯片,观察程序运行结果。,要解决的问题:,1、什么是数据传送操作与数据传送指令?,MCS-51,单片机,有哪些数据传递指令?,2,、什么是指令的寻址方式,?,MCS-51,单片机指令系统采,用了哪几种寻址方式,?,3,、指令在,CPU,内部的执行过程?,3.1.3,源程序的编辑、编译、下载,3.1.4,相关知识,1.,单片机内部数据是怎样传送到端口使二极管发亮的?,单片机内部的端口寄存器与片外引脚是直接相连的,数,据通过单片机内部数据总线传送到端口寄存器(用数据,传送指令完成数据的传送),结合发光二极管硬件电,路,二极管便发亮了。,2.,什么是数据传送操作与数据传送指令?,MCS-51,单片机,有哪些数据传递指令,?,数据传送操作:,在计算机中将数据信息从源存储地址传,送到目标存储地址的操作,数据传送指令:,完成数据传送的指令,MCS-51,单片机的数据传送指令共有,29,条:,(,1,)以累加器,A,为目的操作数类指令(,4,条),MOV A,data,;,(,data,),(,A,) 直接单元地址中的内容,送到累加器,A,MOV A,#data,;#data,(,A,) 立即数送到累加器,A,中,MOV A,Rn,;,(,Rn,),(,A,),Rn,中的内容送到累加器,A,中,MOV A,Ri,;,(,Ri,),(,A,),Ri,内容指向的地址单,元中的内容送到累加器,A,。,例如:,任务中“累加器,A,控制,P1,口的程序”里有一条,MOV,A,,,#0AAH,指令就属于此类。,(,2,)以寄存器,Rn,为目的操作数的指令(,3,条),这,3,条指令的功能是把源操作数指定的内容送到所选定的工作寄存器,Rn,中。有直接、立即和寄存器寻址方式:,MOV Rn,data,;,(,data,),(,Rn,) 直接寻址单元中的内容送到,寄存器,Rn,中,MOV Rn,#data,;#data,(,Rn,) 立即数直接送到寄存器,Rn,中。,MOV Rn,A,;,(,A,),(,Rn,) 累加器,A,中的内容送到寄存器,Rn,中。,例如:,任务中“开幕式和闭幕式彩灯程序”里的,MOV R6,#200,MOV R7,#200,指令属于此类。,(,3,)以直接地址为目的操作数的指令(,5,条),这组指令的功能是把源操作数指定的内容送到由直接地址,data,所选定的片内,RAM,中,MOV data,data,;,(,data,),(,data,) 直接地址单元中的内容送到直接地址单元。,MOV data,#data,;#data,(,data,) 立即数送到直接地址单元。,MOV data,A,;,(,A,),(,data,) 累加器,A,中的内容送到直接地址单元。,MOV data,Rn,;,(,Rn,),(,data,) 寄存器,Rn,中的内容送到直接地址单元。,MOV data,Ri,;,(,Ri,),(,data,) 寄存器,Ri,中的内容指定的地址单元中数据送到直接地址单元。,例如:,任务中“流水式彩灯程序”里的,MOV P1,#0AAH,。任务中“开幕式和闭幕式彩灯程序”里,MOVP1,A,指令属于此类。应该注意,这里,DATA,是用寄存器的名字表示的。,(,4,)以间接地址为目的操作数的指令(,3,条),这组指令的功能是把源操作数指定的内容送到以,Ri,中的内容为地址的片内,RAM,中。,MOV Ri,data,;,(,data,),(,Ri,) 直接地址单元中的内容送到以,Ri,中的内容为地址的,RAM,单元。,MOV Ri,#data,;#data,(,Ri,) 立即数送到以,Ri,中的内容为地址的,RAM,单元。,MOV Ri,A,;,(,A,),(,Ri,) 累加器,A,中的内容送到以,Ri,中的内容为地址的,RAM,单元。,(,5,)查表指令(,2,条),这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:,MOVC A,A+DPTR,;,(,A,),+,(,DPTR,),(,A,) 表格地址单元中的内容送到累加器,A,中。,MOVC A,A+PC,;,(,PC,),+1,(,A,),(,A,),+,(,PC,),(,A,) 表格地址单元中的内容送到累加器,A,中。,例如:,在任务中“开幕式闭幕式彩灯程序”里就有,MOVCA, A + DPTR,指令讲预先制好的表格数据取出来。,(,6,)累加器,A,与片外数据存储器,RAM,传送指令(,4,条),这,4,条指令的作用是累加器,A,与片外,RAM,间的数据传送。使用寄存器寻址方式:,MOVX DPTR,A,;,(,A,),(,DPTR,) 累加器中的内容送到数据指针指向片外,RAM,地址中。,MOVX A, DPTR,;,(,DPTR,),(,A,) 数据指针指向片外,RAM,地址中的内容送到累加器,A,中。,MOVX A, Ri,;,(,Ri,),(,A,) 寄存器,Ri,指向片外,RAM,地址中的内容送到累加器,A,中。,MOVX Ri,A,;,(,A,),(,Ri,) 累加器中的内容送到寄存器,Ri,指向片外,RAM,地址中。,(,7,)堆栈操作类指令(,2,条),这,4,类指令的作用是把直接寻址单元的内容传送到堆栈指针,SP,所指的单元中,以及把,SP,所指单元的内容送到直接寻址单元中。,PUSH data,;,(,SP,),+1,(,SP,),(,data,),(,SP,) 堆栈指针首先加,1,,直接寻址单元中的数据送到堆栈指针,SP,所指的单元中。,POP data,;,(,SP,),(,data,)(,SP,),-1,(,SP,), 堆栈指针,SP,所指的单元数据送到直接寻址单元中,堆栈指针,SP,再进行减,1,操作。,(,8,)交换指令(,5,条),这,5,条指令的功能是把累加器,A,中的内容与源操作数所指的数据相互交换。,XCH A,Rn,;,(,A,),(,Rn,)累加器与工作寄存器,Rn,中的内容互换。,XCH A,Ri,;,(,A,),(,Ri,)累加器与工作寄存器,Ri,所指的存储单元中的内容互换。,XCH A,data,;,(,A,),(,data,)累加器与直接地址单元中的内容互换。,XCHD A,Ri,;,(,A3-0,),(,Ri,),3-0,)累加器与工作寄存器,Ri,所指的存储单元中的内容低半字节互换。,SWAP A,;,(,A3-0,),(,A7-4,)累加器中的内容高低半字节互换。,(,9,),16,位数据传送指令(,1,条),这条指令的功能是把,16,位常数送入数据指针寄存器。,MOV DPTR,#data16,;,(,data16,),H,(,DPH,);(,data16,),L,(,DPL,)。,16,位常数的高,8,位送到,DPH,,低,8,位送到,DPL,。,3,、什么是指令的寻址方式,? MCS-51,单片机指令系统采用了哪几种寻址方式,?,寻址的“地址”即为操作数所在单元的地址,绝大部分指令执行时都需要用到操作数,那么到哪里去取得操作数呢?最易想到的就是告诉,CPU,操作数所在的地址单元,从那里可取得响应的操作数,这便是“寻址”之意。,操作数是,指令的重要组成部分,指出了参与操作的数据或数据的地址。,寻找操作数地址的方式称为寻址方式。一条指令采用什么样的寻址方式,是由指令的功能决定的。寻址方式越多,指令功能就越强。,MCS-51,指令系统共使用了7种寻址方式,包括,寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。,直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在,MCS-51,单片机中,可以直接寻址的存储器主要有内部,RAM,区和特殊功能寄存器,SFR,区。,例如指令:,MOV A,2BH,执行的操作是将内部,RAM,中地址为3,AH,的单元内容传送到累加器,A,中,其操作数3,AH,就是存放数据的单元地址,因此该指令是直接寻址。,设内部,RAM 3AH,单元的内容是88,H,,那么指令,MOV A,2BH,的执行过程如,立即数寻址示意图,所示。,(,1,)直接寻址,直接寻址示意图,ABH,2,BH,内部,RAM,ABH,A,寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器,R0R7、,累加器,A、,通用寄存器,B、,地址寄存器,DPTR,等。例如指令:,MOV R1,A,的操作是把累加器,A,中的数据传送到寄存器,R1,中,其操作数存放在累加器,A,中,所以寻址方式为寄存器寻址。,如果程序状态寄存器,PSW,的,RS1RS0=10(,选中第二组工作寄存器,对应地址为10,H17H),,设累加器,A,的内容为4,AH,,则执行,MOV R1,A,指令后,内部,RAM 11H,单元的值就变为4,AH,,如,寄存器寻址示意图,所示。,(,2,),寄存器寻址,寄存器寻址示意图,4,AH,11,H,内部,RAM,4,AH,A,R1,1,0,RS1,RS0,(,3,),寄存器间接寻址,寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。,在,MCS-51,指令系统中,用于寄存器间接寻址的寄存器有,R0、R1,和,DPTR,,,称为寄存器间接寻址寄存器。,注意:,间接寻址寄存器前面必须加上符号“,”。例如,指令,MOV A,R0,执行的操作是将,R0,的内容作为内部,RAM,的地址,再将该地址单元中的内容取出来送到累加器,A,中。,设,R0=3AH,,内部,RAM 3AH,中的值是65,H,,则指令,MOV A,R0,的执行结果是累加器,A,的值为65,H,,该指令的执如右图。,65,H,3,AH,内部,RAM,3,AH,A,R0,65,H,寄存器间接寻址示意图,(,4,)立即数寻址,立即数寻址是指将操作数直接写在指令中。,例如指令:,MOV A,#2BH,执行的操作是将立即数3,AH,送到累加器,A,中,该指令就是立即数寻址。注意:立即数前面必须加“,#,”号,以区别立即数和直接地址。该指令的执行过程如,立即数寻址示意图,所示。,2,BH,A,2,BH,立即数寻址示意图,变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。,DPTR,或,PC,是,基址寄存器,,累加器,A,是,变址寄存器,。该类寻址方式,主要用于查表操作,。,例如,,指令,MOVC A,A+DPTR,执行的操作是将累加器,A,和基址寄存器,DPTR,的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送到累加器,A,中。,(,5,)变址寻址,(,6,)变址寻址过程,AAH,程序存储区,02,H,A,1112,H,11,H,DPTR,10,H,1112,H,设累加器,A=02H,DPTR=1110H,,外部,ROM,中,1112,H,单元的内容是,AAH,,则指令,MOVC A,A+DPTR,的执行结果是累加器,A,的内容为55,H。,该指令的执行过程如下图所示。,位寻址是,指按位进行的寻址操作,,MCS-51,单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。,当我们把某一位作为操作数时,这个操作数的地址称为位地址。,位寻址区包括专门安排在内部,RAM,中的两个区域:一是,内部,RAM,的位寻址区,,地址范围是20,H2FH,,共16个,RAM,单元,位地址为00,H7FH;,二是,特殊功能寄存器,SFR,中有11个寄存器可以位寻址。,(,7,)位寻址,内部,RAM,27,H,二进制,1,0,0,1,0,0,0,0,0,例如,,指令,SETB 3DH,执行的操作是将内部,RAM,位寻址区中的3,DH,位置1。,设内部,RAM 27H,单元的内容是00,H,,执行,SETB 3DH,后,由于3,DH,对应内部,RAM 27H,的第6位,因此该位变为1,也就是27,H,单元的内容变为20,H。,该指令的执行过程如图3.7所示。,相对寻址是,指程序计数器,PC,的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。,该类寻址方式主要用于跳转指令。,例如,,指令,SJMP 54H,执行的操作是将,PC,当前的内容与54,H,相加,结果再送回,PC,中,成为下一条将要执行指令的地址。,(,7,)相对寻址,相对寻址过程,54,H,程序存储区,54,H,A,2001,H,20,H,PC,02,H,2056,H,XX,80,H,2056,H,2000,H,设指令,SJMP 54H,的机器码80,H 54H,存放在2000,H,处,当执行到该指令时,先从2000,H,和2001,H,单元取出指令,,PC,自动变为2002,H;,再把,PC,的内容与操作数54,H,相加,形成目标地址2056,H,,再送回,PC,,使得程序跳转到2056,H,单元继续执行。该指令的执行过程如图所示。,指令的书写必须遵守一定的规则,指令描述的约定如下。,符 号,含 义,Rn,表示当前选定寄存器组的工作寄存器,R0R7,Ri,表示作为间接寻址的地址指针,R0R1,#,data,表示8位立即数,即00,HFFH,表示16位立即数,即0000,HFFFFH,addr16,表示16位地址,用于64,K,范围内寻址,addr11,表示11位地址,用于2,K,范围内寻址,data,8位直接地址,可以是内部,RAM,区的某单元或某专用功能寄存器的地址,Rel,带符号的8位偏移量(-128+127),Bit,位寻址区的直接寻址位,(,X),X,地址单元中的内容,或,X,作为间接寻址寄存器时所指单元的内容,将 后面的内容传送到前面去,指令系统中的符号约定,#,data16,4,、指令在,CPU,内部的执行过程,指令是以二进制的形式存放在程序存储器中的,,CPU,执行指令的过程是不断的从程序存储器取指令,指令译码器对指令进行译码,并发出与指令相应的微操作信号,完成指令的执行。,MCS-51,单片机取指时序,5,、数据传送指令应用举例,【例3.1】 在程序存储器中从而2000H单元开始依次存放置09的平方值:0、1、4、9、81,要求依据累加器A中的值(09)来查找所对应的平方值,分析下述程序的结果。,MOV DPTR,#2000H,MOV A,#09H,MOVC A,A+DPTR,执行结果:(DPTR)=2000H,(A)=51H。,【例3.2】 仍以上例程序存储器中 2000H单元开始存放09的平方值,以PC作为基址寄存器进行查表,设MOVC指令所在地址(PC)=1FF0F。,解:偏移量=2000H(1FF0H+1)=0FH,相应的程序如下:,MOV A,#09H,ADD A,#0FH,MOVC A,A+PC,执行结果:(PC)=1FF1H,(A)=51H,【,例,3.3】,若在程序存储器中,2000H,单元开始依次存放,09,的平方值,数据指针(,DPTR,),=3A00H,,用查一指令取出,2003H,单元的数据后,要求保持,DPTR,中的内容不变,完成以上功能的程序如下:,MOV A,,,#03H,;(,A,),03H,PUSH DPH,;保护,DPTR,高,8,位入栈,PUSH DPL,;保护,DPTR,低,8,位入栈,MOV DPTR,,,#2000H,;(,DPTR,),2000H,MOVC A,,,A+DPTR,;(,A,),(,2000H+03H,),POP DPL,;弹出,DPTR,低,8,位,POP DPH,;弹出,DPTR,高,8,位,(先进后出),执行结果:(,A,),=09H,,(,DPTR,),=3A00H,。,小结:,1,、,MCS-51,单片机指令系统有哪些数据传送指令?,2,、什么是指令的寻址方式?,MCS-51,单片机指令系统采用了哪几种寻址方式?,3,、指令在,CPU,内部的执行过程,思考与练习:,3.1 3.5,模拟彩灯实验实训项目,功能:,8,只,LED,模拟彩灯,形成流水、追逐等效果。,要求:课外完成硬件制作、编程、仿真调试,3.2,任务三 单片机做加、减、乘、除运算,学习目标,:,通过学习任务三的完成方法,掌握,MCS-51,单片机的算术运算指令的功能及运算指令对程序状态字的影响。,任务描述,:,利用单片机的算术运算指令进行加、减、乘、除运算,并将结果送,P1,口发光二极管显示。,3.2.1,硬件电路,1、硬件电路,2,、工作原理,利用,P0,口、,P2,口外接的拨动开关设制运算的数据,利用单片机的算术运算指令进行加、减、乘、除运算,并将结果送,P1,口发光二极管显示。,1)加法运算程序,ORG 0000H,MOV A,P0,MOV R0,P2,ADD A,R0,MOV P1,A,SJMP $,END,2),减法运算程序,ORG 0000H,MOV A,P0,MOV R0,P2,SUBB A,R0,MOV P1,A,SJMP $,END,3.2.2,程序设计,4),除法运算程序,ORG 0000H,MOV A,P0,MOV B,P2,DIV AB,MOV P1,A,SJMP $,END,3),乘法运算程序,ORG 0000H,MOV A,P0,MOV B,P2,MUL AB,MOV P1,A,SJMP $,END,用“伟福”模拟仿真软件进行程序的编辑、编译。打开“,ISP,下载软件”将目标文件下载到,ISP-4,实验开发板上的,AT89S51,单片机芯片,观察程序运行结果。,要解决的问题:,1、什么是算术运算指令?,MCS-51,单片机有哪些算术运,算指令?,2,、单片机运算的速度快吗,?,3,、指令使用的区别?,3.2.3,源程序的编辑、编译、下载,用“伟福”模拟仿真软件进行程序的编辑、编译。打开“,ISP,下载软件”将目标文件下载到,ISP-4,实验开发板上的,AT89S51,单片机芯片,观察程序运行结果。,要解决的问题:,1、什么是算术运算指令?,MCS-51,单片机有哪些算术运,算指令?,2,、单片机运算的速度快吗,?,3,、指令使用的区别?,3.2.4,相关知识,1,、单片机是怎样做加、减、乘、除运算的?,在单片机,CPU,内部集成的算术运算部件(主要有加法器和乘法器、除法器),可以完成加、减、乘、除运算,单片机的算术运算指令经过指令译码器译码后产生的控制信号控制算术运算部件工作产生运算结果。,2,、,MCS-51,单片机有哪些算术运算指令,?,MCS-51,单片机算术运算指令共有,24,条,算术运算主要是执行加、减、乘、除法四则运算。另外,MCS-51,指令系统中有相当一部分是进行加、减,1,操作,,BCD,码的运算和调整,我们都归类为运算指令。需要指出的是,除加、减,1,指令外,这类指令大多数都会对,PSW,(程序状态字)有影响。这在使用中应特别注意。,(,1,)不带进位的加法指令(,4,条),这,4,条指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器,A,的内容相加,运算结果存在,A,中。,ADD A,#data,;,(,A,),+#data,(,A,) 累加器,A,中的内容与立即数,#data,相加,结果存在,A,中,ADD A,data,;,(,A,),+,(,data,),(,A,) 累加器,A,中的内容与直接地址单元中的内容相加,结果存在,A,中,ADD A,Rn,;,(,A,),+,(,Rn,),(,A,) 累加器,A,中的内容与工作寄存器,Rn,中的内容相加,结果存在,A,中,ADD A,Ri,;,(,A,),+,(,Ri,),(,A,) 累加器,A,中的内容与工作寄存器,Ri,所指向地址单元中的内容相加,结果存在,A,中,例如:,如任务中“加法程序”里,MOV A,,,P0,MOV R0,,,P2,ADD A,,,R0,就是将,P0,口与,P2,口的内容相加。,(,2,)带进位的加法指令(,4,条),这,4,条指令除与,1,功能相同外,在进行加法运算时还需考虑进位问题。,ADDC A,data,;,(,A,),+,(,data,),+,(,C,),(,A,) 累加器,A,中的内容与直接地址单元的内容连同进位位相加,结果存在,A,中,ADDC A,#data,;,(,A,),+#data +,(,C,),(,A,) 累加器,A,中的内容与立即数连同进位位相加,结果存在,A,中,ADDC A,Rn,;,(,A,),+Rn+,(,C,),(,A,) 累加器,A,中的内容与工作寄存器,Rn,中的内容、连同进位位相加,结果存在,A,中,ADDC A,Ri,;,(,A,),+,(,Ri,),+,(,C,),(,A,) 累加器,A,中的内容与工作寄存器,Ri,指向地址单元中的内容、连同进位位相加,结果存在,A,中,(,3,)带借位减法指令(,4,条),这组指令包含立即数、直接地址、间接地址及工作寄存器与累加器,A,连同借位位,C,内容相减,结果送回累加器,A,中。,这里我们对借位位,C,的状态作出说明,在进行减法运算中,,CY=1,表示有借位,,CY=0,则无借位。,OV=1,声明带符号数相减时,从一个正数减去一个负数结果为负数,或者从一个负数中减去一个正数结果为正数的错误情况。在进行减法运算前,如果不知道借位标志位,C,的状态,则应先对,CY,进行清零操作。,SUBB A,data,;,(,A,),-,(,data,),-,(,C,),(,A,) 累加器,A,中的内容与直接地址单元中的内容、连同借位位相减,结果存在,A,中。,SUBB A,#data,;,(,A,),-#data -,(,C,),(,A,) 累加器,A,中的内容与立即数、连同借位位相减,结果存在,A,中。,SUBB A,Rn,;,(,A,),-,(,Rn,),-,(,C,),(,A,) 累加器,A,中的内容与工作寄存器中的内容、连同借位位相减,结果存在,A,中,SUBB A,Ri,;,(,A,),-,(,Ri,),-,(,C,),(,A,) 累加器,A,中的内容与工作寄存器,Ri,指向的地址单元中的内容、连同借位位相减,结果存在,A,中。,例如:,任务中“减法程序”里,MOV A,,,P0,MOV R0,,,P2,SUBB A,,,R0,就是将,P0,口与,P2,口的内容相减。,(,4,)乘法指令(,1,条),这个指令的作用是把累加器,A,和寄存器,B,中的,8,位无符号数相乘,所得到的是,16,位乘积,这个结果低,8,位存在累加器,A,,而高,8,位存在寄存器,B,中。如果,OV=1,,说明乘积大于,FFH,,否则,OV=0,,但进位标志位,CY,总是等于,0,。,MUL AB,;,(,A,),(,B,),(,A,)和(,B,) 累加器,A,中的内容与寄存器,B,中的内容相乘,结果存在,A,、,B,中。,例如:,任务中“加法程序”里,MOV A,,,P0,MOV B,,,P2,MUL AB,就是将,P0,口与,P2,口的内容相乘,低字节存于,A,,高字节存于,B,。,(,5,)除法指令(,1,条),这个指令的作用是把累加器,A,的,8,位无符号整数除以寄存器,B,中的,8,位无符号整数,所得到的商存在累加器,A,,而余数存在寄存器,B,中。除法运算总是使,OV,和进位标志位,CY,等于,0,。,DIV AB,;,(,A,),(,B,),(,A,)和(,B,) 累加器,A,中的内容除以寄存器,B,中的内容,所得到的商存在累加器,A,,而余数存在寄存器,B,中。,例如,:任务中“加法程序”里,MOV A,,,P0,MOV B,,,P2,DIV AB,就是将,P0,口与,P2,口的内容相除,商存于,A,,余数存于,B,。,(,6,)加,1,指令(,5,条),这,5,条指令的的功能均为原寄存器的内容加,1,,结果送回原寄存器。上述提到,加,1,指令不会对任何标志有影响,如果原寄存器的内容为,FFH,,执行加,1,后,结果就会是,00H,。这组指令共有直接、寄存器、寄存器减间址等寻址方式:,INC A,;,(,A,),+1,(,A,) 累加器,A,中的内容加,1,,结果存在,A,中。,INC data,;,(,data,),+1,(,data,) 直接地址单元中的内容加,1,,结果送回原地址单元中。,INC Ri,;,(,Ri,),+1,(,Ri,) 寄存器的内容指向的地址单元中的内容加,1,,结果送回原地址单元中,INC Rn,;,(,Rn,),+1,(,Rn,)寄存器,Rn,的内容加,1,,结果送回原地址单元中,INC DPTR,;,(,DPTR,),+1,(,DPTR,)数据指针的内容加,1,,结果送回数据指针中,说明:,在,INC data,这条指令中,如果直接地址是,I/O,,其功能是先读入,I/O,锁存器的内容,然后在,CPU,进行加,1,操作,再输出到,I/O,上,这就是“读,修改,写”操作。,(,7,)减,1,指令(,4,条),这组指令的作用是把所指的寄存器内容减,1,,结果送回原寄存器,若原寄存器的内容为,00H,,减,1,后即为,FFH,,运算结果不影响任何标志位。,DEC A,;,(,A,),-1,(,A,)累加器,A,中的内容减,1,,结果送回累加器,A,中,DEC data,;,(,data,),-1,(,data,)直接地址单元中的内容减,1,,结果送回直接地址单元中,DEC Ri,;,(,Ri,),-1,(,Ri,)寄存器,Ri,指向的地址单元中的内容减,1,,结果送回原地址单元中,DEC Rn,;,(,Rn,),-1,(,Rn,)寄存器,Rn,中的内容减,1,,结果送回寄存器,Rn,中。,(,8,)十进制调整指令(,1,条),在进行,BCD,码运算时,这条指令总是跟在,ADD,或,ADDC,指令之后,其功能是将执行加法运算后存于累加器,A,中的结果进行调整和修正。,DA A,3,、算术运算指令应用举例,【,例,3.4】,双字节无符号数加法(,R0R1,)(,R2R3,),(,R4R5,),R0,、,R2,、,R4,中存放,16,位数的高字节,,R1,、,R3,、,R5,中存放低字节。由于不存在,16,位数加法指令,所以只能先加低,8,位,而在加高,8,位时要连低,8,沉位相加时产生的进位一起相加。假设其和不超过,16,位,其编程如下:,MOV A,R1 ;,取被加数低字节,ADD A,R3 ;,低字节相加,MOV R5,A ;,保存和低字节,MOV A,R0 ;,取高字节被加数,ADDC A,R2 ;,两高字节之和加低位进位,MOV R4,A ;,保存和高字节,【,例,3.5】,双字节无符号数相减(,R0R1,)(,R2R3,),(,R4R5,),R0,、,R2,、,R4,存放,16,位数的高字节,,R1,、,R3,、,R5,存放低字节。先减低,8,位,后减高,8,位和低位减借位,所以要先清零。其编程如下:,MOV A,R1 ;,取被减数低字节,CLR C ;,清借位位,SUBB A,R3 ;,低字节相减,MOV R5,A ;,保存差低字节,MOV A,R0 ;,取被减法高字节,SUBB A,R2 ;,两高字节之差减低位借位,MOV R4,A ;,保存差高字节,小结:,1,、任务三的硬件电路与工作原理,2,、单片机是怎样做加、减、乘、除运算的?,3,、,MCS-51,单片机有哪些算术指令?,思考与练习:,3.14 3.15,算术运算实验实训项目,功能:加、减、,乘、除运算程序,。,要求:课外完成编程、使用软件和实验板进行仿真调试,3.3,任务四 单片机作逻辑运算,学习目标,:,通过学习任务四的完成方法,掌握,MCS-51,单片机的逻辑运算指令的功能。,任务描述,:,利用单片机的逻辑运算指令进行逻辑与、或、异或等逻辑运算,并将结果送,P1,口发光二极管显示。,3.3.1,硬件电路,1,、硬件电路,硬件电路仍采用实验开发板上的电路,如图所示。,2、工作原理,通过P0口、P2口外接的拨动开关设制运算的数据,利用单片机的逻辑运算指令运算,并将结果送P1口发光二极管显示。,3.2.2,程序设计,1.,逻辑“与”运算程序,ORG 0000H,MOV A,P0,ANL A,P2,MOV P1,A,SJMP $,END,2.,逻辑“或”运算程序,ORG 0000H,MOV A,P0,ORL A,P2,MOV P1,A,SJMP $,END,3. 逻辑“异或”运算程序,ORG 0000H,MOV A,P0,XRL A,P2,MOV P1,A,SJMP $,用“伟福”模拟仿真软件进行程序的编辑、编译。,打开“,ISP,下载软件”将目标文件下载到,ISP-4,实验开发板上的,AT89S51,单片机芯片,观察程序运行结果。,要解决的问题:,1、什么是逻辑运算指令?,MCS51,有哪些逻辑运算指令?,2、取反与清零。,3,、为什么单片机中要集成逻辑运算部件?,4,、“与”、“或”、“异或”指令的应用技巧,?,3.3.3,源程序的编辑、编译、下载,3.3.4,相关知识,1,、单片机是怎样做逻辑运算的?,单片机,CPU,内部集成的逻辑运算部件(主要有与运算器、或运算器、异或运算器等),可以完成与、或、异或运算等,单片机的逻辑运算指令经过指令译码器译码后产生的控制信号控制逻辑运算部件工作产生运算结果。,2,、,MCS,51,单片机有哪些逻辑运算指令?,逻辑运算和移位指令共有,25,条,有与、或、异或、求反、左右移位、清,0,等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(,PSW,)标志。,(,1,)循环移位指令(,4,条),这,4,条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位,CY,一起移位。,RL A,;,累加器,A,中的内容左移一位。,RR A,;,累加器,A,中的内容右移一位。,RLC A,;,累加器,A,中的内容连同进位位,CY,左移一位。,RRC A,;,累加器,A,中的内容连同进位位,CY,右移一位。,(,2,)累加器半字节交换指令(,1,条),这条指令是将累加器中的内容高低半字节互换,这在上一节中内容已有介绍。,SWAP A,;,累加器中的内容高低半字节互换,(,3,)求反指令(,1,条),这条指令将累加器中的内容按位取反。,CPL A,;,累加器中的内容按位取反,(,4,)清零指令(,1,条),这条指令将累加器中的内容清,0,。,CLR A,; 0,(,A,),累加器中的内容清,0,(,5,)逻辑与操作指令(,6,条),这组指令的作用是将两个单元中的内容执行逻辑与操作。如果直接地址是,I/O,地址,则为“读,修改,写”操作。,ANL A,data,;,累加器,A,中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器,A,中。,ANL data,#data,;,直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。,ANL A,#data,;,累加器,A,的内容和立即数执行与逻辑操作。结果存在累加器,A,中。,ANL A,Rn,;,累加器,A,的内容和寄存器,Rn,中的内容执行与逻辑操作。结果存在累加器,A,中。,ANL data,A,;,直接地址单元中的内容和累加器,A,的内容执行与逻辑操作。结果存在直接地址单元中。,ANL A,Ri,;,累加器,A,的内容和工作寄存器,Ri,指向的地址单元中的内容执行与逻辑操作。结果存在累加器,A,中。,例如:,任务中的,ANL A,P2,指令。,(,6,)逻辑或操作指令(,6,条),这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是,I/O,地址,则为“读,修改,写”操作。,ORL A,data,;,累加器,A,中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器,A,中。,ORL data,#data,;,直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。,ORL A,#data,;,累加器,A,的内容和立即数执行逻辑或操作。结果存在累加器,A,中。,ORL A,Rn,;,累加器,A,的内容和寄存器,Rn,中的内容执行逻辑或操作。结果存在累加器,A,中。,ORL data,A,;,直接地址单元中的内容和累加器,A,的内容执行逻辑或操作。结果存在直接地址单元中。,ORL A,Ri,;,累加器,A,的内容和工作寄存器,Ri,指向的地址单元中的内容执行逻辑或操作。结果存在累加器,A,中。,例如:,任务中的,ORL A,P2,指令。,(,7,)逻辑异或操作指令(,6,条),这组指令的作用是将两个单元中的内容执行逻辑异或操作。如果直接地址是,I/O,地址,则为“读,修改,写”操作。,XRL A,data,;,累加器,A,中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器,A,中。,XRL data,#data,;,直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。,XRL A,#data,;,累加器,A,的内容和立即数执行逻辑异或操作。结果存在累加器,A,中。,XRL A,Rn,;,累加器,A,的内容和寄存器,Rn,中的内容执行逻辑异或操作。结果存在累加器,A,中。,XRL data,A,;,直接地址单元中的内容和累加器,A,的内容执行逻辑异或操作。结果存在直接地址单元中。,XRL A,Ri,;,累加器,A,的内容和工作寄存器,Ri,指向的地址单元中的内容执行逻辑异或操作。结果存在累加器,A,中。,例如:,任务中的,XRL A,P2,指令。,3,、逻辑运算指令应用举例,【,例,3.9】,16,位数的算术左移。,16,位数在内存中低,8,位存放在,1,单元,高,8,位存放在,1+1,单元。,解,:所谓算术左移就是将操作数左移一位,并使最低位补充,0,,相当于完成,16,位数的乘务员操作,故称算术左移。参考程序如下:,CLR C ;,进位,CY,清零,MOV R1,#M1 ;,操作数地址,M1,送,R1,MOV A, R1 ;,低,8,位数送,A,RLC A, ;,低,8,位左移,最低位补,0,MOV R1 ,A ;,低,8,位左移后,回送,M1,存放,INC R1 ;,指向,16,位高,8,位地址,M1+1,MOV A, R1 ;,低,8,位送,A,RLC A, ;,高,8,位带低,8,位进位左移,MOV R1 ,A ;,高,8,位左移后回送,M1+1,存放,说明:,若要对,16,位数进行循环移位,则应首先设法把最高位(,D15,)的值置入,CY,,然后再参照以上程序编写即可。利用以后介绍的位操作指令可以很容易地实现将某一位的值置入,CY,。,小结:,1,、任务四的硬件电路与工作原理,2,、单片机是怎样做逻辑运算的?,3,、,MCS-51,单片机有哪些逻辑运算指令?,思考与练习:,3.20 3.21,逻辑运算实验实训项目,功能:逻辑,运算程序,。,要求:课外完成编程、使用软件和实验板进行仿真调试,3.4,任务五 按键控制灯,学习目标,:,通过学习任务五的完成方法,掌握,MCS-51,单片机的控制转移指令的功能。,任务描述,:,用,S1,S4,组成的键盘分别控制,P1,口发光二极管发光,按住,S1,键红色发光二极管(假定为,P1.0,)亮,按住,S2,键黄色发光二极(,P1.1,)管亮,按住,S3,键绿色发光二极管(假定为,P1.2,)亮。,S4,用于控制三组灯之间的切换。,3.4.1,硬件电路,硬件电路采用实验开发板上的电路,如图,3.6,所示。用,S1,S4,组成的键盘分别控制,P1,口发光二极管发光。,3.4.2,程序设计,ORG0000H,LJMPMAIN,ORG0030H,MAIN:ORL P3,#3CH,MOV A,P3,ANL A,#3CH,MOV R0,A,CJNE A,#3CH,MAIN1,SJMP MAIN,MAIN1:MOVR1,#10,PDO: LCALL DELAY,DJNZ R1,PDO,MOV A,P3,CJNE A,R0,DODO,K_S1: JB P3.2,K_S2,LJMP KEY_1,K_S2: JBP3.3,K_S3,LJMPKEY_2,K_S3: JBP3.4,K_S4,LJMPKEY_3,K_S4: JBP3.5,DODO,3.4.2,程序设计,SPK1:CPL P3.2,LCALL DELAY,DJNZ R2,SPK1,DJNZ R1,SPK2,SJMP MAIN,DELAY: MOV R3,#10,DEL:MOV R4,#50,DJNZ R4,$,DJNZ R3,DEL,END,LJMPKEY_4,DODO: SJMP MAIN,KEY_1:MOV P1,#0FDH,SJMP MAIN,KEY_2:MOV P1,#0FBH,SJMP MAIN,KEY_3:MOV P1,#0FEH,SJMP MAIN,KEY_4:MOV R1,#10,SPK2:MOV R2,#50H,3.4.3,源程序的编辑、编译、下载,用“伟福”模拟仿真软件进行程序的编辑、编译。,打开“,ISP,下载软件”将目标文件下载到,ISP-4,实验开发板上的,AT89S51,单片机芯片,观察程序运行结果。,要解决的问题,:,1、,MCS-51,有哪些控制转移指令?,2、实验开发板上的555振荡电路起什么作用?,3、为什么计数脉冲从,P3.4,引脚输入?,4、如何使,LED,七段数码管显示字符?,5、如何实现软件延时?,6、如何使计数值按十进制进位,3.4.4,相关知识,1,、如何用按键控制灯?,按键是单片机常用的输人控制设备,用于信息和命令的输人,当按键与灯的对应关系建立后,单片机程序不断轮流检测,S1,S4,按键是否有键按下,当有某键按下时,单片机点亮相应的灯。也就是说,每个按键都对应了一个程序段,按下不同按键,程序就执行相应程序段,怎样才能实现这种转移呢?原来单片机中专门有一类控制转移类指令。,2,、,MCS-51,单片机有哪些控制转移指令?,控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,,MCS-51,系列单片机的控制转移指令相对丰富,有可对,64kB,程序空间地址单元进行访问的长调用、长转移指令,也有可对,2kB,字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。,(,1,)无条件转移指令(,4,条),这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为,16,地址,64kB,,绝对转移指令访问的程序存储器空间为,11,位地址,2kB,空间。,LJMP addr16,;addr16,(,PC,),给程序计数器赋予新值的,16,位地址。,AJMP addr11,;,(,PC,),+2,(,PC,),,addr11,(,PC10-0,)程序计数器赋予新值(,11,位地址),(,PC15-11,)不改变。,SJMP rel,;,(,PC,),+ 2 + rel,(,PC,)当前程序计数器先加上,2,再加上偏移量给程序计数器赋予新值。,JMP A+DPTR,;,(,A,),+,(,DPTR,),(,PC,),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值。,例如:,任务中的,LJMPMAIN,指令,就属无条件转移指令。,2,、条件转移指令(,8,条),程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足某种特定的条件,从而控制程序的转向。,JZ rel,; A=0,(,PC,),+ 2 + rel,(,PC,),累加器中的内容为,0,,则转移到偏移量所指向的地址,否则程序往下执行。,JNZ rel,; A0,(,PC,),+ 2 + rel,(,PC,),累加器中的内容不为,0,,则转移到偏移量所指向的地址,否则程序往下执行。,CJNE A, data, rel,; A,(,data,),(,PC,),+ 3 + rel,(,PC,),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行。,CJNE A, #data, rel,; A#data,(,PC,),+ 3 + rel,(,PC,),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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