您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 单片机 教案 课件 80C51的指令系统
2020/1/291第3章80C51的指令系统指令格式及常用符号3.180C51的寻址方式3.2数据传送指令(29条)3.3算数运算指令(24条)3.4逻辑运算与循环类指令(24条)3.5控制转移类指令(17条)3.6位操作类指令(17条)3.72020/1/2923.1指令格式及常用符号3.1.1指令系统的概述指令是计算机根据人的意图所执行的操作命令,是与计算机内部结构、硬件资源密切联系的。某种计算机所有指令的集合称为指令系统。MCS-51/52系列单片机的指令系统共有111条指令编码少:其中49条是单字节指令,45条是双字节指令,17条是三字节指令。执行周期短:其中有64条指令的执行时间为单机器周期,45条指令的执行时间为双机器周期,乘法和除法指令只需4个机器周期。位操作指令丰富:机器语言:计算机唯一能够识别的指令,由二进制数“0”和“1”编码构成,也成为目标代码,执行速度最快。汇编语言指令是在机器语言基础上,用英文单词或英文单词缩写表示机器语言指令的操作码(助记符)用符号表示操作数或者操作数的地址。将汇编语言翻译为机器语言的目标代码称为汇编。2020/1/2932020/1/294书写格式注意:操作码不能缺少操作数个数可为:1、2、3个2个操作数的指令,目的操作数在左边一般格式[标号]:操作码[目的操作数][,源操作数][;注释]3.1.2符号指令的书写格式2020/1/295描述符号Rn(n=0~7)-当前工作寄存器组中的寄存器R0~R7之一Ri(i=0,1)-当前工作寄存器组中的寄存器R0或R1@----------间址寄存器前缀#data------8位立即数#data16-----16位立即数direct------片内低128个RAM单元地址及SFR地址addr11------11位目的地址addr16------16位目的地址rel---------8位地址偏移量,范围:-128~+127bit---------片内RAM位地址、SFR的位地址(×)------表示×地址单元或寄存器中的内容/----------位操作数的取反操作前缀((×))------表示×所指地址单元的内容←------表示数据传输的方向2020/1/2963.2.1寄存器寻址寻址方式:寻找(源)操作数或指令转移地址的方式80C51单片机有7种寻址方式3.280C51的寻址方式操作数在寄存器中寻址空间:R0~R7、A、B(AB形式)和DPTR30H00HACCSFRR030HMOVA,R0E8HROMRAM操作数在R0特点:传送和执行速度快【例】若(R0)=30H,执行MOVA,R0后,(A)=30H2020/1/2973.2.2直接寻址操作码后字节存放的是操作数的地址寻址空间:片内RAM低128字节SFR(符号形式)3AH50HACCSFR3AHMOVA,50HE5HROMRAM50H操作数在50H单元另一类直接寻址是转移目标地址的寻址。如:LJMPADDR16【例】若(50H)=3AH,执行MOVA,50H后,(A)=3AH2020/1/2983.2.3寄存器间接寻址寄存器中的内容是操作数的地址寻址空间:片内RAM(@Ri、SP)片外RAM(@Ri、@DPTR)5AH30HACCSFR5AHMOVA,@R0E6HROMRAM30HR0R0中的内容为操作数的地址【例】若(R0)=30H,(30H)=5AH执行MOVA,@R0后,(A)=5AH片内:MOV片外:MOVX2020/1/2993.2.4立即寻址操作数在指令编码中寻址空间:ROM00HACCSFR50HMOVA,#50H74HROMRAM50H操作码后紧跟操作数50H对于MOVDPTR,#2100H指令,立即数高8位“21H”装入DPH【例】执行MOVA,#50H结果:(A)=50H2020/1/29103.2.5变址寻址操作数地址:基地址+偏移量寻址空间:ROM00HACCSFR0FHMOVCA,@A+DPTR93HROMRAMDPL00HDPH24H88H240FH240FH240FH单元的内容88H为操作数+88H变址寻址还用于跳转指令,如JMP@A+DPTR【例】(A)=0FH(DPTR)=2400H执行MOVCA,@A+DPTR”后结果:(A)=88H2020/1/29113.2.6相对寻址用于跳转指令,实现程序分支Rel常用符号地址表示,离源地址不要超过(-128~+127)00HPSWSFR10000000ROMRAM1002H=1000H+02H1077HJCrel40H75H1000H75H原PC值字节数当前PC值偏移量注意:此例中CY(PSW.7)为1+跳转到新PC处取指【例】若rel为75H,PSW.7为1,JCrel存于1000H开始的单元。执行JCrel指令后,程序将跳转到1077H单元取指令并执行。2020/1/29123.2.7位寻址寻址位数据寻址空间片内RAM位空间SFR位空间20HSFRMOVC,00HA2HROMRAM00H位地址00H位地址07HPSWPSW.7(或CY)11【例】位地址00H内容为1,MOVC,00H执行后,位地址PSW.7的内容为1。位寻址方式实质属于位的直接寻址。2020/1/29133.3数据传送类指令(29条)一般不影响标志寄存器PSW的状态。传送类指令有两大类一般传送(MOV)特殊传送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP2020/1/29143.3.1一般传送指令16位传送(仅1条)MOVDPTR,#data16;DPTR←data16例:执行指令MOVDPTR,#1234H后(DPH)=12H,(DPL)=34H。8位传送通用格式:MOV目的字节,源字节;2020/1/2915以A为目的dataAdata#RiA@RidirectAdirectRnARnAMOV;))((;)(;)(;,【例3-9】若(R1)=20H,(20H)=55H。执行指令MOVA,@R1后,(A)=55H。1、将R1内容传送至AMOVA,R12、将立即数16H传送至AMOVA,#16H3、将R0指示的内存单元20H单元传送至AMOVR0,#20HMOVA,@R04、将30H的内容传送至AMOVA,30H2020/1/29162020/1/2917以Rn为目的dataRndata#directRndirectA)RnARnMOV;)(;(;,【例3-10】执行指令MOVR6,#50H后,(R6)=50H例:如何将R1的内容传送给R2?MOVA,R1MOVR2,A2020/1/2918以direct为目的datadirectdata#@Ridirect@Ridirect1directdirect1)RndirectRn)AdirectAdirectMOV;))((;)(;(;(;,【例3-11】若(R1)=50H,(50H)=18H,执行指令MOV40H,@R1后,(40H)=18H2020/1/2919以@Ri为目的dataRidata#directRidirect)ARiA@RiMOV);()();(();(,【例3-12】若(R1)=30H,(A)=20H,执行指令MOV@R1,A后,(30H)=20H。1、将20H开始的32个单元全部清0MOVA,#00H;A000HMOVR0,#20H;R020HMOVR7,#20H;R7计数,R732LP1:MOV@R0,A;R0指示单元清0INCR0;R0R0+1DJNZR7,LP1;R7R7-12020/1/29202020/1/29213.3.2特殊传送指令以DPTR内容为基址读ROM中常数表项指令MOVCROM中可以存放程序代码,还经常存放常数表MOVCA,@A+DPTR;A←((A)+(DPTR))以PC内容为基址MOVCA,@A+PC;A←((A)+(PC))常数表存放约束小,称为远程查表指令。占用DPTR常数表存放约束大,称为近程查表指令。不占用DPTR1、LED显示器0~9的字形显示码存放在程序存储器中的情况如下:210AH:0C0H字符“0”210BH:0F9H字符“1”210CH:0A4H字符“2”210DH:0B0H字符“3”从段码表中取出“3”并送LED端口为1200H显示,可用如下指令完成:2100H:MOVA,#0AH2102H:MOVCA,@A+PC2103H:MOVDPTR,#1200H2106H:MOVX@DPTR,A2020/1/29222020/1/2923读片外RAM读片外RAM及接口单元数据的指令MOVX片外RAM中经常存放数据采集与处理的中间数据MOVXA,@DPTR;A←((DPTR))MOVXA,@Ri;A←((Ri))写片外RAMMOVX@DPTR,A;((DPTR))←AMOVX@Ri,A;((Ri))←A注意:用@Ri寻址时,高8位地址由P2口提供1、将74H的内容送到片外RAM3000H单元MOVA,74HMOVDPTR,#3000HMOVX@DPTR,A2、将片外RAM2040H的内容送到片内RAM20H单元。MOVDPTR#2040HMOVXA,@DPTRMOV20H,A2020/1/29242020/1/2925入栈指令PUSH堆栈操作指令PUSH和POP堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指示。80C51的堆栈设在片内RAM低端的128个单元,向上生长。PUSHdirect;SP←(SP)+1,(SP)←(direct)出栈指令POPPOPdirect;(direct)←((SP)),SP←(SP)-1注:堆栈用于子程序调用时保护返回地址,或者用于保护子程序调用之前的某些重要数据(即保护现场),还可以用于数据交换。2020/1/2926利用堆栈完成40H与50H单元内容的交换的示例MOVSP,#6FH;将堆栈设在70H以上RAM空间PUSH40H;①将40H单元的“23H”入栈,之后(SP)=70HPUSH50H;②将50H单元的“45H”入栈,之后(SP)=71HPOP40H;③将SP指向的71H单元的内容弹到40H单元,之后(SP)=70HPOP50H;④将SP指向的70H单元的内容弹到50H单元,之后(SP)=6FH(a)初始状态(b)2条PUSH指令执行后(c)2条POP指令执行后40HSFRRAM23H45H50H6FH栈底70H71H6FHSP生长方向栈顶40HSFRRAM23H45H50H6FH70H71H71HSP23H45H①②栈底40HSFRRAM45H50H6FH70H71H6FHSP23H45H23H③④栈底2020/1/2927字节交换指令XCH数据交换指令XCH、XCHD和SWAP数据交换属于同时进行的双向传送))((;)(;)(;,RiA@RidirectAdirectRnARnAXCH【例3-20】若(R0)=80H,(A)=20H。执行指令XCHA,R0后,(A)=80H,(R0)=20H。80HACCSFRR020HRAM20HACCSFRR080HRAM(a)执行前(b)执行后2020/1/2928半字节交换指令XCHD【例3-21】若(R0)=30H,(30H)=67H,(A)=20H。执行指令XCHDA,@R0指令后,(A)=27H,(30H)=60H。)();()())();((,ACC.0~ACC.3ACC.4~ACC.7ASWAPACC.0~ACC.30.Ri~3.Ri@RiAXCHDXCHD是间址操作数的低半字节与A的低半字节互换。SWAP是累加器的高低4位互换【例3-22】若(A)=30H,执行指令SWAPA后,(A)=03H。1、编程将内部数据存储器20H~30H内容置1.2、试编写8字节外部数据存储器到内部数据
本文标题:单片机 教案 课件 80C51的指令系统
链接地址:https://www.777doc.com/doc-3370812 .html