您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 7MCS-51单片机指令系统
►数据传送类指令►算术运算类指令►逻辑运算类指令►控制转移类指令►位操作类指令第二节MCS-51单片机指令系统※无条件转移指令※条件转移指令※间接转移指令(1条)※调用子程序及返回指令※空操作指令(1条)长转移指令LJMP(1条)绝对转移指令AJMP(1条)相对转移指令SJMP(1条)累加器判零转移指令JZ、JNZ(2条)比较不相等转移指令CJNE(4条)减1不为0转移指令DJNZ(2条)长调用指令(1条)绝对调用指令(1条)一般子程序返回指令(1条)中断子程序返回指令(1条)控制转移类指令JMP@A+DPTR;A+DPTR→PC功能:把累加器A中8位无符号数与数据指针DPTR的16位数相加,结果作为下一条指令地址送入PC,指令执行后不改变A和DPTR中的内容,也不影响标志位。也称散转指令。3、间接转移指令MOVA,#dataMOVDPTR,#TABLE;表首地址送DPTRJMP@A+DPTR;根据A值转移TABLE:AJMPTAB0AJMPTAB1AJMPTAB2…由于AJMP是双字节指令,所以A中的内容必须是偶数。;当A=0时转TAB0执行;当A=2时转TAB1执行;当A=4时转TAB2执行例:根据累加器A的值,转入不同处理程序的入口。1)长调用指令LCALLaddrl6;PC+3→PC,SP+1→SP;PC.7~PC.0→(SP),SP+1→SP;PC.15~PC.8→(SP),addr16→PC执行时,先将PC加3,指向下条指令地址(即断点地址),然后将断点地址压入堆栈,作为返回地址,然后把指令中的16位子程序入口地址装入PC,转去执行子程序。4、子程序调用与返回指令ACALLaddrl1;PC+2→PC,SP+1→SP;PC.7~PC.0→(SP),SP+1→SP;PC.15~PC.8→(SP),addr11→PC.10~PC.0先将PC加2,指向下条指令地址(即断点地址),然后将断点地址压入堆栈,作为返回地址。接着指令中的11位目标地址(addr11)送入PC的低11位与PC的高5位合成程序要转移的目标地址。限制在2KB的范围内调用。2)绝对调用指令RET;(SP)→PC.15~PC.8,SP-1→SP;(SP)→PC.7~PC.0,SP-1→SP子程序结束需要返回主程序。执行时将堆栈内的断点地址弹出送入PC,使程序返回到原断点地址。4)中断子程序返回指令RETI除具有RET指令的功能外,RETI在返回断点的同时,还要释放中断逻辑以接受新的中断请求。中断服务子程序必须用RETI返回。RET指令和RETI指令为子程序的最后一条指令。3)一般子程序返回指令NOP;PC+1→PC单字节单周期指令功能:空操作指令是惟一的一条不使CPU产生任何操作控制的指令,NOP指令的功能是使程序计数器PC加1,在执行时间上消耗12个时钟周期。这条指令常用于产生一个机器周期的延时。5、空操作指令位操作指令共17条,均采用位寻址方式。位地址是片内RAM位地址00H~7FH,共128位,和部分特殊功能寄存器SFR的字节地址能被8整除的位,在进行位操作时,MCS-51汇编语言中的位地址可用四种方式表示。五、位操作类指令例:程序状态字PSW的RS1位有以下四种表示方法:(1)直接位地址方式,如D4H。(2)点操作符表示方式,如PSW.4,或D0H.4(3)位名称方式,如RS1(4)用户定义名方式,如ABCBITD4H,其中ABC定义为D4H位的位名,BIT为位定义伪指令。※位传送指令(2条)※位修正指令※位逻辑运算指令※位条件转移指令位置位指令(2条)位复位指令(2条)位逻辑非指令(2条)位累加器C状态判断转移指令(2条)位状态判断转移指令(3条)位逻辑与指令(2条)位逻辑或指令(2条)MOVC,bit;bit→CMOVbit,C;C→bit指令中一个操作数必须是位累加器C,bit可表示任何直接位地址。两个可寻址位之间不可互相传送,应使用C作中介。例:将内部RAM中20H单元中的第7位(位地址07H)的内容送到P1口的P1.0中。MOVC,07HMOVP1.0,C当20H=A3H,P1=FEH时,执行上述指令后,C=1,即P1=FFH11111111B1、位传送指令3)位逻辑“非”指令CPLC;C→CCPLbit;bit→bit功能:将指定位取反。2、位修正指令1)位置位指令SETBC;1→CSETBbit;1→bit2)位复位指令CLRC;0→CCLRbit;0→bit2)位逻辑“或”指令ORLC,bit;C∨bit→CORLC,/bit;C∨/bit→C指令的功能:进位标志位C与直接寻址位的内容进行位逻辑“或”运算,结果送入C。3、位逻辑运算指令1)位逻辑“与”指令ANLC,bit;C∧bit→CANLC,/bit;C∧/bit→C指令的功能:进位标志位C与直接寻址位的内容进行位逻辑“与”运算,结果送入C。例:将PSW.0与ACC.7位相或,结果由P1.0输出。MOVC,PSW.0ORLC,ACC.7MOVP1.0,C4、位条件转移指令1)位累加器C状态判断转移指令JCrel;C=1:PC+2+rel→PC;C=0:PC+2→PCJNCrel;C=0:PC+2+rel→PC;C=1:PC+2→PC判断进位位C是1还是0,符合条件转移,否则顺序执行。CJNE指令两操作数相等?分支1YJC或JNCNC=0?Y分支2分支3N前数大后数大该组指令通常与CJNE指令一起用,可比较两数大小,形成大于、小于、等于三个分支。例:比较内部RAM的30H和40H单元中的两个无符号数的大小,将大数存入20H单元,小数存入21H单元,若两数相等,则使内部位地址7FH的内容置1。(30H)→AA和(40H)相等?CJNEYJCNC=0?YN#01H→(7FH)(30H)→(20H)(40H)→(21H)(40H)→(20H)(30H)→(21H)解:MOVA,30HCJNEA,40H,LOOP1SETB7FHSJMP$JCLOOP2;若C=1则跳转到LOOP2MOV20H,AMOV21H,40HSJMP$MOV20H,40HMOV21H,ASJMP$LOOP1:LOOP2:JBbit,rel;bit=1,则转移,PC+3+rel→PC;bit=0,则不转移,PC+3→PCJNBbit,rel;bit=0,则转移,PC+3+rel→PC;bit=1,则不转移,PC+3→PCJBCbit,rel;bit=1,则转移,PC+3+rel→PC,0→bit;bit=0,则不转移,PC+3→PC该组指令为三字节指令。判断直接寻址位是1还是0,条件符合转移,否则顺序执行;最后一条指令当满足条件转移时,执行指令后同时还应将该寻址位清零。2)位状态判断转移指令例:试判断A中数的正负,若为正数,存入20H单元;若为负数则存入21H单元。解:要判断A中数的正负,只需判断A的最高位是否为1,若为1,则为负数,若为0,则为正数。JBACC.7,LOOPMOV20H,ASJMP$MOV21H,ASJMP$判断数的正负RLCAJCANLA,#80HJZLOOP:例:用软件实现下图所示的P1.0~P1.3间的逻辑运算。解:程序如下:MOVC,P1.1ORLC,P1.2ANLC,P1.0MOVP1.3,C&≥1P1.0P1.1P1.2或门P1.3与门课本70页:13,14,18,19下周二交作业:第四章汇编语言程序设计★汇编语言规范(伪指令)★汇编语言程序设计●顺序结构程序设计●分支结构程序设计●循环结构程序设计●查表程序设计●子程序设计★综合应用举例●算术运算类程序●逻辑运算类程序●代码转换运算类程序●输入输出类程序(I/O端口程序)一、汇编语言的特点汇编语言是一种采用助记符表示的面向机器的程序设计语言,与高级语言相比有以下特点:(1)在功能相同的条件下,汇编语言生成的目标程序,所占用的存储单元比较少,而且执行的速度也比较快。(2)由于单片机应用的许多场合主要是输入/输出、检测及控制,而汇编语言具有直接针对输入/输出端口的操作指令,便于自控系统及检测系统中数据的采集与传送。第一节汇编语言概述二、MCS-51伪指令1.ORG(起始地址伪指令)格式:ORG16位地址功能:程序汇编起始地址定位伪指令,用来定义汇编程序的有效起始地址。伪指令是用来告诉汇编程序如何进行汇编的指令,它既不控制机器的操作,也不能被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行,故称“伪指令”。►既规定了标号START的地址是2000H,又规定了汇编语言的第一条指令码从2000H单元开始存放。例:ORG2000HSTART:MOVA,R2︰►ORG可以多次出现在程序的任何地方。当它出现时,下一条指令的地址就由此重新定位。一般情况下,在程序中由ORG定义的地址是从小到大顺序定义,不允许空间重叠。►如果不用ORG规定,则程序存放在程序存储器0000H开始的单元。2.END(汇编结束伪指令)格式:END功能:汇编语言源程序的结束标志,即通知汇编程序不再继续往下汇编。►一个程序只允许出现一条END指令。格式:字符名称EQU数或汇编符号功能:把操作数段中的地址或数据赋值给标号字段中的标号。由EQU赋值的字符名称在源程序中可以做立即数使用,也可以做数据地址或位地址。由EQU伪指令所定义的字符名称必须先定义后使用,故该语句通常放在程序开头。3.EQU(赋值伪指令)例:CAEQUR4;则“MOVA,CA”与“MOVA,R4”相同例:BUFEQU08HBLOCKEQU30HMOVA,#BUF;伪指令定义的字符名称做立即数使用MOVA,BLOCK;伪指令定义的字符名称做地址使用4.DB(字节定义伪指令)格式:DB字节常数或ASCII字符功能:常用于定义数据常数表。从指定单元开始定义(存储)若干字节的数值或ASCII字符。例:ORG2000HDB0A3HDB26H,03HDB‘ABC’(2000H)=(2001H)=(2002H)=(2003H)=(2004H)=(2005H)=A3H26H03H41H42H43H5.DW(字定义伪指令)注:DW的基本定义与DB相同,不同的是DW定义16位数据(即一个字或两个字节),常用来建立地址表。例:ORG1000HTAB:DW324AH,3CH表示从1000H单元开始的地方存放数据32H,4AH,00H,3CH。6.DS(定义空间伪指令)格式:标号:DS数字功能:从标号所指示的单元开始,根据数字的值保留一定数量的字节存储单元,以备源程序用。例:ORG1000HBUF:DS50TAB:DB22H表示从1000H开始预留50个(1000H~1031H)存储字节空间。;22H存放在1032H单元。格式:字符名称BIT位地址功能:将位地址赋以字符名称。例:GABITP1.0GBBITP1.1GCBIT03H汇编后,位地址P1.0、P1.1、03H分别赋给变量GA、GB、GC。7.BIT(地址符号命令)(1)分析问题,明确任务要求,对于复杂的问题,还要将要解决的问题抽象成数学模型。(2)确定算法,即根据实际问题和指令系统的特点确定完成这一任务需经历的步骤。(3)根据所选择的算法,画出程序框图。(4)确定内存单元的分配以利于提高程序的效率和运行速度。(5)根据流程图,编写源程序。(6)上机对源程序进行汇编、调试。三、程序设计步骤第二节汇编语言程序设计一、顺序结构程序设计顺序结构程序是按照程序编写的顺序逐条依次执行的,是程序的最基本的结构。也称简单程序。应用程序编制应力求简洁,占内存少,执行时间短。一个复杂的程序往往是由一些简单的较短的程序段组成,因此,应掌握各种常用基本程序的编制。汇编语言程序按其结构可以分为5类:顺序结构、分支结构、循环结构、查表程序和子程序。例:将44H单元的两个BCD码拆开,存入45H、46H单元;然后变成ASCII码,分别存入47H、48H单元。解:字符0~9的ASCII码编码为30H~39H。把BCD数除以00010000B(=10H),相当于把此数右移了4位,刚好把两个BC
本文标题:7MCS-51单片机指令系统
链接地址:https://www.777doc.com/doc-3886770 .html