已阅读5页,还剩100页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元三MCS-51单片机指令系统,3.1任务二P1口外接8只发光二极管模拟彩灯,3.2任务三单片机做加、减、乘、除运算,3.3任务四单片机做逻辑运算,3.4任务五按键控制灯,3.5任务六LED显示电路,返回主目录,3.1任务二P1口外接8只LED发光二极管模拟彩灯,学习目标:通过学习任务二的完成方法,掌握MCS-51单片机的数据传送指令的功能及MCS-51单片机的寻址方式。任务描述:利用P1口外接的8只LED发光二极管模拟彩灯。常见的彩灯模式有:流水式彩灯、追逐式彩灯、累积式彩灯、开幕式与闭幕式彩灯以及将上述模式组合而成的复合式彩灯。大多数的彩灯都是采用单片机控制的,简单的彩灯单片机的控制程序也较为简单,复杂的彩灯单片机控制程序也较为复杂。,3.1.1硬件电路,1、硬件电路,2、工作原理当P1。0P1。7中的某端口为低电平时,对应的发光二极管亮,为高电平灭。我们只要控制P1口各位的电平状态,就可以控制8只LED的亮与灭。例如使(P1)=01010101B=55H,D7、D5、D3、D14只LED亮,D6、D4、D2、D04只LED灭,从效果上看亮与灭是相间隔的;反之,使(P1)=10101010B=AAH,则另外4只LED亮,若反复以一定时间间隔不断从P1口轮流输出55H和AAH,则P1口上8只LED会呈现流水彩灯的效果。,1)将立即数送P1口的程序ORG0000H;定义程序从程序存贮器0000H单元开始存放LOOP:MOVP1,#55H;立即数55H送P1口,4只LED亮SJMPLOOP;原地踏步END;程序结束2)通过累加器A控制P1口的程序ORG0000HLOOP:MOVA,#0AAH;将立即数AAH送累加器AMOVP1,A;累加器A中的数送P1端口SJMPLOOP;转移到LOOPEND,3.1.2控制程序,3)流水式彩灯程序,ORG0000HLOOP:MOVP1,#55H;将立即数55H送P1端口LCALLTIME;调延时子程序TIMEMOVP1,#0AAH;将立即数AAH送P1端口LCALLTIME;调延时子程序TIMESJMPLOOP;转移到LOOPTIME:MOVR6,#200;延时子程序TIMETIME1:MOVR7,#200TIME2:NOPNOPNOPDJNZR7,TIME2DJNZR6,TIME1RETEND,4)开幕式与闭幕式彩灯程序,ORG0000HLJMPMAIN;跳转到主程序ORG0030HMAIN:MOVR0,#8;R0送循环次数8MOVDPTR,#TAB;给数据指针赋值LOOP:MOVA,#00H;MOVCA,A+DPTRMOVP1,ALCALLTIMEINCDPLDJNZR0,LOOPSJMPMAINTIME:MOVR6,#200TIME1:MOVR7,#200TIME2:NOPNOPNOPDJNZR7,TIME2DJNZR6,TIME1RETTAB:DB81H,0C3H,0E7H,0FFH,18H,3CH,7EH,0FFHEND,用“伟福”模拟仿真软件进行程序的编辑、编译。打开“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条)MOVA,data;(data)(A)直接单元地址中的内容送到累加器AMOVA,#data;#data(A)立即数送到累加器A中MOVA,Rn;(Rn)(A)Rn中的内容送到累加器A中MOVA,Ri;(Ri)(A)Ri内容指向的地址单元中的内容送到累加器A。例如:任务中“累加器A控制P1口的程序”里有一条MOVA,#0AAH指令就属于此类。,(2)以寄存器Rn为目的操作数的指令(3条)这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。有直接、立即和寄存器寻址方式:MOVRn,data;(data)(Rn)直接寻址单元中的内容送到寄存器Rn中MOVRn,#data;#data(Rn)立即数直接送到寄存器Rn中。MOVRn,A;(A)(Rn)累加器A中的内容送到寄存器Rn中。例如:任务中“开幕式和闭幕式彩灯程序”里的MOVR6,#200MOVR7,#200指令属于此类。,(3)以直接地址为目的操作数的指令(5条)这组指令的功能是把源操作数指定的内容送到由直接地址data所选定的片内RAM中MOVdata,data;(data)(data)直接地址单元中的内容送到直接地址单元。MOVdata,#data;#data(data)立即数送到直接地址单元。,MOVdata,A;(A)(data)累加器A中的内容送到直接地址单元。MOVdata,Rn;(Rn)(data)寄存器Rn中的内容送到直接地址单元。MOVdata,Ri;(Ri)(data)寄存器Ri中的内容指定的地址单元中数据送到直接地址单元。例如:任务中“流水式彩灯程序”里的MOVP1,#0AAH。任务中“开幕式和闭幕式彩灯程序”里MOVP1,A指令属于此类。应该注意,这里DATA是用寄存器的名字表示的。,(4)以间接地址为目的操作数的指令(3条)这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。MOVRi,data;(data)(Ri)直接地址单元中的内容送到以Ri中的内容为地址的RAM单元。MOVRi,#data;#data(Ri)立即数送到以Ri中的内容为地址的RAM单元。MOVRi,A;(A)(Ri)累加器A中的内容送到以Ri中的内容为地址的RAM单元。,(5)查表指令(2条)这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:MOVCA,A+DPTR;(A)+(DPTR)(A)表格地址单元中的内容送到累加器A中。MOVCA,A+PC;(PC)+1(A),(A)+(PC)(A)表格地址单元中的内容送到累加器A中。例如:在任务中“开幕式闭幕式彩灯程序”里就有MOVCA,A+DPTR指令讲预先制好的表格数据取出来。,(6)累加器A与片外数据存储器RAM传送指令(4条)这4条指令的作用是累加器A与片外RAM间的数据传送。使用寄存器寻址方式:MOVXDPTR,A;(A)(DPTR)累加器中的内容送到数据指针指向片外RAM地址中。MOVXA,DPTR;(DPTR)(A)数据指针指向片外RAM地址中的内容送到累加器A中。MOVXA,Ri;(Ri)(A)寄存器Ri指向片外RAM地址中的内容送到累加器A中。MOVXRi,A;(A)(Ri)累加器中的内容送到寄存器Ri指向片外RAM地址中。,(7)堆栈操作类指令(2条),这4类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。PUSHdata;(SP)+1(SP),(data)(SP)堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中。POPdata;(SP)(data)(SP)-1(SP),堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作。,(8)交换指令(5条)这5条指令的功能是把累加器A中的内容与源操作数所指的数据相互交换。XCHA,Rn;(A)(Rn)累加器与工作寄存器Rn中的内容互换。XCHA,Ri;(A)(Ri)累加器与工作寄存器Ri所指的存储单元中的内容互换。XCHA,data;(A)(data)累加器与直接地址单元中的内容互换。XCHDA,Ri;(A3-0)(Ri)3-0)累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换。SWAPA;(A3-0)(A7-4)累加器中的内容高低半字节互换。,(9)16位数据传送指令(1条)这条指令的功能是把16位常数送入数据指针寄存器。MOVDPTR,#data16;(data16)H(DPH);(data16)L(DPL)。16位常数的高8位送到DPH,低8位送到DPL。3、什么是指令的寻址方式?MCS-51单片机指令系统采用了哪几种寻址方式?寻址的“地址”即为操作数所在单元的地址,绝大部分指令执行时都需要用到操作数,那么到哪里去取得操作数呢?最易想到的就是告诉CPU操作数所在的地址单元,从那里可取得响应的操作数,这便是“寻址”之意。,操作数是指令的重要组成部分,指出了参与操作的数据或数据的地址。寻找操作数地址的方式称为寻址方式。一条指令采用什么样的寻址方式,是由指令的功能决定的。寻址方式越多,指令功能就越强。MCS-51指令系统共使用了7种寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。,直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。例如指令:MOVA,2BH执行的操作是将内部RAM中地址为3AH的单元内容传送到累加器A中,其操作数3AH就是存放数据的单元地址,因此该指令是直接寻址。设内部RAM3AH单元的内容是88H,那么指令MOVA,2BH的执行过程如立即数寻址示意图所示。,(1)直接寻址,直接寻址示意图,寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如指令:MOVR1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。如果程序状态寄存器PSW的RS1RS0=10(选中第二组工作寄存器,对应地址为10H17H),设累加器A的内容为4AH,则执行MOVR1,A指令后,内部RAM11H单元的值就变为4AH,如寄存器寻址示意图所示。,(2)寄存器寻址,寄存器寻址示意图,(3)寄存器间接寻址寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。在MCS-51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,称为寄存器间接寻址寄存器。注意:间接寻址寄存器前面必须加上符号“”。例如,指令MOVA,R0执行的操作是将R0的内容作为内部RAM的地址,再将该地址单元中的内容取出来送到累加器A中。,设R0=3AH,内部RAM3AH中的值是65H,则指令MOVA,R0的执行结果是累加器A的值为65H,该指令的执如右图。,寄存器间接寻址示意图,(4)立即数寻址立即数寻址是指将操作数直接写在指令中。例如指令:MOVA,#2BH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。注意:立即数前面必须加“#”号,以区别立即数和直接地址。该指令的执行过程如立即数寻址示意图所示。,立即数寻址示意图,变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。DPTR或PC是基址寄存器,累加器A是变址寄存器。该类寻址方式主要用于查表操作。例如,指令MOVCA,A+DPTR执行的操作是将累加器A和基址寄存器DPTR的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送到累加器A中。,(5)变址寻址,(6)变址寻址过程,设累加器A=02H,DPTR=1110H,外部ROM中,1112H单元的内容是AAH,则指令MOVCA,A+DPTR的执行结果是累加器A的内容为55H。该指令的执行过程如下图所示。,位寻址是指按位进行的寻址操作,MCS-51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。位寻址区包括专门安排在内部RAM中的两个区域:一是内部RAM的位寻址区,地址范围是20H2FH,共16个RAM单元,位地址为00H7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址。,(7)位寻址,例如,指令SETB3DH执行的操作是将内部RAM位寻址区中的3DH位置1。,设内部RAM27H单元的内容是00H,执行SETB3DH后,由于3DH对应内部RAM27H的第6位,因此该位变为1,也就是27H单元的内容变为20H。该指令的执行过程如图3.7所示。,相对寻址是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。例如,指令SJMP54H执行的操作是将PC当前的内容与54H相加,结果再送回PC中,成为下一条将要执行指令的地址。,(7)相对寻址,相对寻址过程,设指令SJMP54H的机器码80H54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。该指令的执行过程如图所示。,指令的书写必须遵守一定的规则,指令描述的约定如下。,指令系统中的符号约定,#data16,4、指令在CPU内部的执行过程,指令是以二进制的形式存放在程序存储器中的,CPU执行指令的过程是不断的从程序存储器取指令,指令译码器对指令进行译码,并发出与指令相应的微操作信号,完成指令的执行。,MCS-51单片机取指时序,5、数据传送指令应用举例,【例3.1】在程序存储器中从而2000H单元开始依次存放置09的平方值:0、1、4、9、81,要求依据累加器A中的值(09)来查找所对应的平方值,分析下述程序的结果。MOVDPTR,#2000HMOVA,#09HMOVCA,A+DPTR执行结果:(DPTR)=2000H,(A)=51H。,【例3.2】仍以上例程序存储器中2000H单元开始存放09的平方值,以PC作为基址寄存器进行查表,设MOVC指令所在地址(PC)=1FF0F。解:偏移量=2000H(1FF0H+1)=0FH相应的程序如下:MOVA,#09HADDA,#0FHMOVCA,A+PC执行结果:(PC)=1FF1H,(A)=51H,【例3.3】若在程序存储器中2000H单元开始依次存放09的平方值,数据指针(DPTR)=3A00H,用查一指令取出2003H单元的数据后,要求保持DPTR中的内容不变,完成以上功能的程序如下:MOVA,#03H;(A)03HPUSHDPH;保护DPTR高8位入栈PUSHDPL;保护DPTR低8位入栈MOVDPTR,#2000H;(DPTR)2000HMOVCA,A+DPTR;(A)(2000H+03H)POPDPL;弹出DPTR低8位POPDPH;弹出DPTR高8位,(先进后出)执行结果:(A)=09H,(DPTR)=3A00H。,小结:1、MCS-51单片机指令系统有哪些数据传送指令?2、什么是指令的寻址方式?MCS-51单片机指令系统采用了哪几种寻址方式?3、指令在CPU内部的执行过程,思考与练习:3.13.5,模拟彩灯实验实训项目功能:8只LED模拟彩灯,形成流水、追逐等效果。要求:课外完成硬件制作、编程、仿真调试,3.2任务三单片机做加、减、乘、除运算,学习目标:通过学习任务三的完成方法,掌握MCS-51单片机的算术运算指令的功能及运算指令对程序状态字的影响。任务描述:利用单片机的算术运算指令进行加、减、乘、除运算,并将结果送P1口发光二极管显示。,3.2.1硬件电路,1、硬件电路,2、工作原理利用P0口、P2口外接的拨动开关设制运算的数据,利用单片机的算术运算指令进行加、减、乘、除运算,并将结果送P1口发光二极管显示。,1)加法运算程序ORG0000HMOVA,P0MOVR0,P2ADDA,R0MOVP1,ASJMP$END,2)减法运算程序ORG0000HMOVA,P0MOVR0,P2SUBBA,R0MOVP1,ASJMP$END,3.2.2程序设计,4)除法运算程序ORG0000HMOVA,P0MOVB,P2DIVABMOVP1,ASJMP$END,3)乘法运算程序ORG0000HMOVA,P0MOVB,P2MULABMOVP1,ASJMP$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中。ADDA,#data;(A)+#data(A)累加器A中的内容与立即数#data相加,结果存在A中ADDA,data;(A)+(data)(A)累加器A中的内容与直接地址单元中的内容相加,结果存在A中ADDA,Rn;(A)+(Rn)(A)累加器A中的内容与工作寄存器Rn中的内容相加,结果存在A中,ADDA,Ri;(A)+(Ri)(A)累加器A中的内容与工作寄存器Ri所指向地址单元中的内容相加,结果存在A中例如:如任务中“加法程序”里MOVA,P0MOVR0,P2ADDA,R0就是将P0口与P2口的内容相加。,(2)带进位的加法指令(4条)这4条指令除与1功能相同外,在进行加法运算时还需考虑进位问题。ADDCA,data;(A)+(data)+(C)(A)累加器A中的内容与直接地址单元的内容连同进位位相加,结果存在A中ADDCA,#data;(A)+#data+(C)(A)累加器A中的内容与立即数连同进位位相加,结果存在A中ADDCA,Rn;(A)+Rn+(C)(A)累加器A中的内容与工作寄存器Rn中的内容、连同进位位相加,结果存在A中ADDCA,Ri;(A)+(Ri)+(C)(A)累加器A中的内容与工作寄存器Ri指向地址单元中的内容、连同进位位相加,结果存在A中,(3)带借位减法指令(4条)这组指令包含立即数、直接地址、间接地址及工作寄存器与累加器A连同借位位C内容相减,结果送回累加器A中。这里我们对借位位C的状态作出说明,在进行减法运算中,CY=1表示有借位,CY=0则无借位。OV=1声明带符号数相减时,从一个正数减去一个负数结果为负数,或者从一个负数中减去一个正数结果为正数的错误情况。在进行减法运算前,如果不知道借位标志位C的状态,则应先对CY进行清零操作。SUBBA,data;(A)-(data)-(C)(A)累加器A中的内容与直接地址单元中的内容、连同借位位相减,结果存在A中。,SUBBA,#data;(A)-#data-(C)(A)累加器A中的内容与立即数、连同借位位相减,结果存在A中。SUBBA,Rn;(A)-(Rn)-(C)(A)累加器A中的内容与工作寄存器中的内容、连同借位位相减,结果存在A中SUBBA,Ri;(A)-(Ri)-(C)(A)累加器A中的内容与工作寄存器Ri指向的地址单元中的内容、连同借位位相减,结果存在A中。例如:任务中“减法程序”里MOVA,P0MOVR0,P2SUBBA,R0就是将P0口与P2口的内容相减。,(4)乘法指令(1条)这个指令的作用是把累加器A和寄存器B中的8位无符号数相乘,所得到的是16位乘积,这个结果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,说明乘积大于FFH,否则OV=0,但进位标志位CY总是等于0。MULAB;(A)(B)(A)和(B)累加器A中的内容与寄存器B中的内容相乘,结果存在A、B中。例如:任务中“加法程序”里MOVA,P0MOVB,P2MULAB就是将P0口与P2口的内容相乘,低字节存于A,高字节存于B。,(5)除法指令(1条)这个指令的作用是把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。除法运算总是使OV和进位标志位CY等于0。DIVAB;(A)(B)(A)和(B)累加器A中的内容除以寄存器B中的内容,所得到的商存在累加器A,而余数存在寄存器B中。例如:任务中“加法程序”里MOVA,P0MOVB,P2DIVAB就是将P0口与P2口的内容相除,商存于A,余数存于B。,(6)加1指令(5条)这5条指令的的功能均为原寄存器的内容加1,结果送回原寄存器。上述提到,加1指令不会对任何标志有影响,如果原寄存器的内容为FFH,执行加1后,结果就会是00H。这组指令共有直接、寄存器、寄存器减间址等寻址方式:INCA;(A)+1(A)累加器A中的内容加1,结果存在A中。INCdata;(data)+1(data)直接地址单元中的内容加1,结果送回原地址单元中。,INCRi;(Ri)+1(Ri)寄存器的内容指向的地址单元中的内容加1,结果送回原地址单元中INCRn;(Rn)+1(Rn)寄存器Rn的内容加1,结果送回原地址单元中INCDPTR;(DPTR)+1(DPTR)数据指针的内容加1,结果送回数据指针中说明:在INCdata这条指令中,如果直接地址是I/O,其功能是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O上,这就是“读修改写”操作。,(7)减1指令(4条)这组指令的作用是把所指的寄存器内容减1,结果送回原寄存器,若原寄存器的内容为00H,减1后即为FFH,运算结果不影响任何标志位。DECA;(A)-1(A)累加器A中的内容减1,结果送回累加器A中DECdata;(data)-1(data)直接地址单元中的内容减1,结果送回直接地址单元中DECRi;(Ri)-1(Ri)寄存器Ri指向的地址单元中的内容减1,结果送回原地址单元中DECRn;(Rn)-1(Rn)寄存器Rn中的内容减1,结果送回寄存器Rn中。,(8)十进制调整指令(1条)在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。DAA,3、算术运算指令应用举例【例3.4】双字节无符号数加法(R0R1)(R2R3)(R4R5)R0、R2、R4中存放16位数的高字节,R1、R3、R5中存放低字节。由于不存在16位数加法指令,所以只能先加低8位,而在加高8位时要连低8沉位相加时产生的进位一起相加。假设其和不超过16位,其编程如下:MOVA,R1;取被加数低字节ADDA,R3;低字节相加MOVR5,A;保存和低字节MOVA,R0;取高字节被加数ADDCA,R2;两高字节之和加低位进位MOVR4,A;保存和高字节,【例3.5】双字节无符号数相减(R0R1)(R2R3)(R4R5)R0、R2、R4存放16位数的高字节,R1、R3、R5存放低字节。先减低8位,后减高8位和低位减借位,所以要先清零。其编程如下:MOVA,R1;取被减数低字节CLRC;清借位位SUBBA,R3;低字节相减MOVR5,A;保存差低字节MOVA,R0;取被减法高字节SUBBA,R2;两高字节之差减低位借位MOVR4,A;保存差高字节,小结:1、任务三的硬件电路与工作原理2、单片机是怎样做加、减、乘、除运算的?3、MCS-51单片机有哪些算术指令?,思考与练习:3.143.15,算术运算实验实训项目功能:加、减、乘、除运算程序。要求:课外完成编程、使用软件和实验板进行仿真调试,3.3任务四单片机作逻辑运算,学习目标:通过学习任务四的完成方法,掌握MCS-51单片机的逻辑运算指令的功能。任务描述:利用单片机的逻辑运算指令进行逻辑与、或、异或等逻辑运算,并将结果送P1口发光二极管显示。,3.3.1硬件电路,1、硬件电路硬件电路仍采用实验开发板上的电路,如图所示。,2、工作原理通过P0口、P2口外接的拨动开关设制运算的数据,利用单片机的逻辑运算指令运算,并将结果送P1口发光二极管显示。,3.2.2程序设计,1.逻辑“与”运算程序ORG0000HMOVA,P0ANLA,P2MOVP1,ASJMP$END,2.逻辑“或”运算程序ORG0000HMOVA,P0ORLA,P2MOVP1,ASJMP$END,3.逻辑“异或”运算程序ORG0000HMOVA,P0XRLA,P2MOVP1,ASJMP$,用“伟福”模拟仿真软件进行程序的编辑、编译。打开“ISP下载软件”将目标文件下载到ISP-4实验开发板上的AT89S51单片机芯片,观察程序运行结果。要解决的问题:1、什么是逻辑运算指令?MCS51有哪些逻辑运算指令?2、取反与清零。3、为什么单片机中要集成逻辑运算部件?4、“与”、“或”、“异或”指令的应用技巧?,3.3.3源程序的编辑、编译、下载,3.3.4相关知识,1、单片机是怎样做逻辑运算的?单片机CPU内部集成的逻辑运算部件(主要有与运算器、或运算器、异或运算器等),可以完成与、或、异或运算等,单片机的逻辑运算指令经过指令译码器译码后产生的控制信号控制逻辑运算部件工作产生运算结果。2、MCS51单片机有哪些逻辑运算指令?逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(PSW)标志。,(1)循环移位指令(4条)这4条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位CY一起移位。RLA;累加器A中的内容左移一位。RRA;累加器A中的内容右移一位。RLCA;累加器A中的内容连同进位位CY左移一位。RRCA;累加器A中的内容连同进位位CY右移一位。,(2)累加器半字节交换指令(1条)这条指令是将累加器中的内容高低半字节互换,这在上一节中内容已有介绍。SWAPA;累加器中的内容高低半字节互换(3)求反指令(1条)这条指令将累加器中的内容按位取反。CPLA;累加器中的内容按位取反(4)清零指令(1条)这条指令将累加器中的内容清0。CLRA;0(A),累加器中的内容清0,(5)逻辑与操作指令(6条)这组指令的作用是将两个单元中的内容执行逻辑与操作。如果直接地址是I/O地址,则为“读修改写”操作。ANLA,data;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。ANLdata,#data;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。,ANLA,#data;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。ANLA,Rn;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。ANLdata,A;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。ANLA,Ri;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。例如:任务中的ANLA,P2指令。,(6)逻辑或操作指令(6条)这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O地址,则为“读修改写”操作。ORLA,data;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。ORLdata,#data;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。,ORLA,#data;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。ORLA,Rn;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。ORLdata,A;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。ORLA,Ri;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。例如:任务中的ORLA,P2指令。,(7)逻辑异或操作指令(6条)这组指令的作用是将两个单元中的内容执行逻辑异或操作。如果直接地址是I/O地址,则为“读修改写”操作。XRLA,data;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。XRLdata,#data;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。XRLA,#data;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。,XRLA,Rn;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。XRLdata,A;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。XRLA,Ri;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中。例如:任务中的XRLA,P2指令。,3、逻辑运算指令应用举例【例3.9】16位数的算术左移。16位数在内存中低8位存放在1单元,高8位存放在1+1单元。解:所谓算术左移就是将操作数左移一位,并使最低位补充0,相当于完成16位数的乘务员操作,故称算术左移。参考程序如下:CLRC;进位CY清零MOVR1,#M1;操作数地址M1送R1,MOVA,R1;低8位数送ARLCA,;低8位左移,最低位补0MOVR1,A;低8位左移后,回送M1存放INCR1;指向16位高8位地址M1+1MOVA,R1;低8位送ARLCA,;高8位带低8位进位左移MOVR1,A;高8位左移后回送M1+1存放说明:若要对16位数进行循环移位,则应首先设法把最高位(D15)的值置入CY,然后再参照以上程序编写即可。利用以后介绍的位操作指令可以很容易地实现将某一位的值置入CY。,小结:1、任务四的硬件电路与工作原理2、单片机是怎样做逻辑运算的?3、MCS-51单片机有哪些逻辑运算指令?,思考与练习:3.203.21,逻辑运算实验实训项目功能:逻辑运算程序。要求:课外完成编程、使用软件和实验板进行仿真调试,3.4任务五按键控制灯,学习目标:通过学习任务五的完成方法,掌握MCS-51单片机的控制转移指令的功能。任务描述:用S1S4组成的键盘分别控制P1口发光二极管发光,按住S1键红色发光二极管(假定为P1.0)亮,按住S2键黄色发光二极(P1.1)管亮,按住S3键绿色发光二极管(假定为P1.2)亮。S4用于控制三组灯之间的切换。,3.4.1硬件电路,硬件电路采用实验开发板上的电路,如图3.6所示。用S1S4组成的键盘分别控制P1口发光二极管发光。,3.4.2程序设计,ORG0000HLJMPMAINORG0030HMAIN:ORLP3,#3CHMOVA,P3ANLA,#3CHMOVR0,ACJNEA,#3CH,MAIN1SJMPMAINMAIN1:MOVR1,#10,PDO:LCALLDELAYDJNZR1,PDOMOVA,P3CJNEA,R0,DODOK_S1:JBP3.2,K_S2LJMPKEY_1K_S2:JBP3.3,K_S3LJMPKEY_2K_S3:JBP3.4,K_S4LJMPKEY_3K_S4:JBP3.5,DODO,3.4.2程序设计,SPK1:CPLP3.2LCALLDELAYDJNZR2,SPK1DJNZR1,SPK2SJMPMAINDELAY:MOVR3,#10DEL:MOVR4,#50DJNZR4,$DJNZR3,DELEND,LJMPKEY_4DODO:SJMPMAINKEY_1:MOVP1,#0FDHSJMPMAINKEY_2:MOVP1,#0FBHSJMPMAINKEY_3:MOVP1,#0FEHSJMPMAINKEY_4:MOVR1,#10SPK2:MOVR2,#50H,3.4.3源程序的编辑、编译、下载,用“伟福”模拟仿真软件进行程序的编辑、编译。打开“ISP下载软件”将目标文件下载到ISP-4实验开发板上的AT89S51单片机芯片,观察程序运行结果。要解决的问题:1、MCS-51有哪些控制转移指令?2、实验开发板上的555振荡电路起什么作用?3、为什么计数脉冲从P3.4引脚输入?4、如何使LED七段数码管显示字符?5、如何实现软件延时?6、如何使计数值按十进制进位,3.4.4相关知识,1、如何用按键控制灯?按键是单片机常用的输人控制设备,用于信息和命令的输人,当按键与灯的对应关系建立后,单片机程序不断轮流检测S1S4按键是否有键按下,当有某键按下时,单片机点亮相应的灯。也就是说,每个按键都对应了一个程序段,按下不同按键,程序就执行相应程序段,怎样才能实现这种转移呢?原来单片机中专门有一类控制转移类指令。,2、MCS-51单片机有哪些控制转移指令?控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。,(1)无条件转移指令(4条)这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。LJMPaddr16;addr16(PC),给程序计数器赋予新值的16位地址。AJMPaddr11;(PC)+2(PC),addr11(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变。,SJMPrel;(PC)+2+rel(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值。JMPA+DPTR;(A)+(DPTR)(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值。例如:任务中的LJMPMAIN指令,就属无条件转移指令。,2、条件转移指令(8条)程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足某种特定的条件,从而控制程序的转向。JZrel;A=0,(PC)+2+rel(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行。JNZrel;A0,(PC)+2+rel(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行。CJNEA,data,rel;A(data),(PC)+3+rel(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行。,CJNEA,#data,rel;A#data,(PC)+3+rel(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行。CJNERn,#data,rel;A#data,(PC)+3+rel(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行。CJNERi,#data,rel;A#data,(PC)+3+rel(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行。DJNZRn,rel;(Rn)-1(Rn),(Rn)0,(PC)+2+rel(PC)工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行。DJNZdata,rel;(Rn)-1(Rn),(Rn)0,(PC)+2+rel(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行。,(3)子程序调用指令(1条)子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。LCALLaddr16;长调用指令,可在64kB空间调用子程序。此时(PC)+3(PC),(SP)+1(SP),(PC7-0)(SP),(SP)+1(SP),(PC15-8)(SP),addr16(PC),即分别从堆栈中弹出调用子程序时压入的返回地址。例如:任务中的LCALLDELAY指令,(4)空操作指令(1条)这条指令将累加器中的内容清0。NOP;这条指令除了使PC加1,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时。,3、控制转移指令应用举例【例3.10】将外部数据RAM的一个数据块传送到内部数据RAM,两者的首址分别为DATA1和DATA2,遇到传送的数据为零时停止。解:外部RAM的数据传送一定要以累加器A作为过渡,利用判零条件转移正好可以判别是否要继续传送或者终止。完成数据传送的参考程序如下:MOVR0,#DATA1;外部数据块首址送R0MOVR1,#DATA2;内部数据块首址送R1,LOOP:MOVA,R0;取外部RAM数据入AHERE:JZHERE;数据为零则终止传送MOVR1,A;数据传送至内部RAM单元INCR0;修改地址指针,指向下一数据地址INCR1SJMPLOOP;循环取数说明:以上程序中,写在指令SJMPLOOP中的LOOP处的8位相对转移偏移量rel,而地址标号LOOP表示MOVX指令的16位单元地址。,【例3.11】将内部数据RAM中从DATA单元开始的10个无符号数相加,相加结果送SUM单元保存。解:设相加结果不超过8位二进制数,则相应的程序如下:MOVR0,#0AH;给R0置计数器初值MOVR1,#DATA;数据块首址送R1CLRA;A清零LOOP:ADDA,R1;加1个数INCR1;修改地址,指向下一个数DJNZR0,LOOP;R0减1,不为零循环MOVSUM,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年绿色出行服务方案可行性研究报告及总结分析
- 2025年旅游行业数字化创新可行性研究报告及总结分析
- 2025年施工员继续教育考试题库及参考答案
- 2025年成人考试升大专试题
- 固定翼驾驶员无人机真题及答案2
- 2025年碳中和产业发展可行性研究报告及总结分析
- 2025年心理学专业资格认证考试试卷及答案解析
- 2025年智慧城市管理系统研发项目可行性研究报告及总结分析
- 2025年网络安全培训与咨询服务项目可行性研究报告及总结分析
- 2025年旅游线路数字化平台建设可行性研究报告及总结分析
- 就业心理教学课件
- DBJ51-T 048-2021 四川省建设工程造价电子数据标准
- 《高分子溶液 》课件
- DL/T 5622-2021 太阳能热发电厂储热系统设计规范
- 《虚拟现实(VR)制作与应用》考试复习题库(汇总)
- 动力学中的临界问题课件
- 山东金岭矿业股份有限公司侯家庄矿区矿山地质环境保护与土地复垦方案
- 高考3500词无中文无音标清晰版自测
- GB/T 2423.1-2008电工电子产品环境试验第2部分:试验方法试验A:低温
- GB/T 18788-2008平板式扫描仪通用规范
- GB 16668-2010干粉灭火系统及部件通用技术条件
评论
0/150
提交评论