您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 指令系统-利尔达MSP430培训资料
11111111111111111111111111111111MSP430MSP430指令系统指令系统嵌入式研发中心嵌入式研发中心22222222222222222222222222222222单片机是通过执行一系列的指令来完成各种任务的。各种单片机都有各自的一组指令集提供给用户使用,这组指令集就成为该单片机的指令系统。3333333333333333333333333333333333333333333333333333333333333333MSP430CPU结构指令系统—操作码格式指令系统—寻址方式指令系统—MSP430指令集指令系统—指令周期MSP430指令系统4444444416位RISCCPU结构55555555CPU寄存器66666666存储器结构和地址空间77777777存储器结构和地址空间与芯片型号有关88888888CPU结构总结MSP430CPU采用了许多现代新技术,如跳转、表处理、适合高级语言C等,CPU可以对整个地址寻址而无需页机制。CPU的特性包括:9RISC结构包括27条指令和7种寻址模式9全部寄存器访问包括PC、状态寄存器、堆栈指针。9单周期寄存器操作916位地址总线和16位数据总线9常数发生器提供6个最常用的常数9可以byte和word两种模式寻址或操作9直接内存寻址而无需寄存器9999999999999999999999999999999999999999999999999999999999999999MSP430指令系统MSP430CPU结构指令系统—操作码格式指令系统—寻址方式指令系统—MSP430指令集指令系统—指令周期1010指令书写格式标号操作码源操作数,目的操作数;注释RESETmov.w#0A00h,SP;Initialize'449stackpointerInit_Sysmov.w#WDTPW+WDTHOLD,&WDTCTL;StopWDTSetupBTmov.b#BTSSEL+BTIP0,&BTCTL;~244usInt.bis.b#BTIE,&IE2;EnableBasicTimerinterruptSetupP5bis.b#002h,&P5DIR;P5.1outputeint;EnableinterruptsMainloopbis.w#CPUOFF,SR;CPUoffnop;RequiredforC-spyjmpMainloop1111111111111111目的寄存器AsB/WAd源寄存器操作码(4-F)0123456789101112131415双操作数格式1212121212121212目的/源寄存器AdB/W000100xxx0123456789101112131415单操作数格式131313131313131310位PC偏移量转移码操作码xxxxxxxxxxxxxxxx0123456789101112131415跳转格式14141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414MSP430指令系统MSP430CPU结构指令系统—操作码格式指令系统—寻址方式指令系统—MSP430指令集指令系统—指令周期1515151515151515指令后续字含立即数N,使用了间接增量模式的@PC+#N立即寻址11/-Rn为指针指向操作数,然后Rn增加@R+间接增量寻址11/-Rn为指针指向操作数@Rn间接寄存器寻址10/-指令后续字含绝对地址&ADDR绝对寻址01/1(Rn+X)指向操作数,X存于后续字中,使用了变址方式的X(PC)ADDR符号寻址01/1(Rn+X)指向操作数,X存于后续字中X(Rn)变址寻址01/1寄存器内容为操作数Rn寄存器寻址00/0说明语法寻址方式As/Ad寻址方式是指在执行一条指令的过程中,如何找到操作数地址的方法。操作数包括源操作数和目的操作数。MSP430共有7种寻址方式。寻址方式源操作数/目的操作数寻址方式:1616161616161616寄存器寻址(RegisterMode)操作数的地址由寄存器直接给出,寄存器的内容就是指令中的操作数。1717171717171717变址寻址(IndexedMode)操作数在内存中,操作数的地址为寄存器内容加上前面的偏移量。1818181818181818符号寻址(SymbolicMode)一般用于随机访问操作数在内存中,操作数的地址在指令中直接给出。EDE=PC+XTONI=PC+YX,Y存在于指令的后续字中,自动插入偏移量1919191919191919绝对寻址(AbsoluteMode)操作数在内存中,操作数的地址在指令中直接给出。2020202020202020间接寄存器寻址(IndirectRegisterMode)操作数在内存中,操作数的地址在寄存器中。2121212121212121间接增量寻址(IndirectAutoincrementMode)操作数在内存中,操作数的地址在寄存器中。2222222222222222立即寻址(ImmediateMode)操作数在指令中由源操作数直接指出。23232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323MSP430指令系统MSP430CPU结构指令系统—操作码格式指令系统—寻址方式指令系统—MSP430指令集指令系统—指令周期2424242424242424MSP430指令集MSP430指令系统按指令性质可分为:内核指令和仿真指令,其中内核指令27条,仿真指令24条,共51条指令。内核指令是CPU解码生成的独一无二的操作码。仿真指令使指令更容易读和写。但是自己没有操作码,由内核指令生成。三种核心指令格式:1、双操作数指令(12条)2、单操作数指令(7条)3、JUMP(8条)2525252525252525MSP430指令系统按功能可分为:•数据传送类指令•算术运算类指令•逻辑运算类指令•位操作指令•跳转和程序控制类指令2626262626262626MOV[.W];MOV.Bsrc,dst*CLR[.W];CLR.Bdst*POP[.W];POP.BdstPUSH[.W];PUSH.BsrcSWAPdstSXTdst数据传送类指令数据传送是单片机在工作中最基本也是最重要的一种操作,它包括将操作数从源地址送到目的地址单元中,或目的地址中的操作数进行高低字节交换或者将目的地址操作数更新或清为“0”都属于数据传送指令。2727272727272727加法运算指令(内核3条,仿真4条)*ADC[.W];ADC.BdstADD[.W];ADD.Bsrc,dstADDC[.W];ADDC.Bsrc,dst*DADC[.W];DADC.BdstDADD[.W];DADD.Bsrc,dst*INC[.W];INC.Bdst*INCD[.W];INCD.Bdst减法运算指令(内核3条,仿真4条)SUB[.W];SUB.Bsrc,dstSUBC[.W];SUBC.Bsrc,dst*SBC[.W];SBC.BdstCMP[.W];CMP.Bdst*TST[.W];TST.Bdst*DEC[.W];DEC.Bdst*DECD[.W];DECD.Bdst数据运算类指令2828282828282828AND[.W];AND.Bsrc,dstBIC[.W];BIC.Bsrc,dstBIS[.W];BIS.Bsrc,dstBIT[.W];BIT.Bsrc,dstXOR[.W];XOR.Bsrc,dst*RLA[.W];RLA.Bdst*RLC[.W];RLC.BdstRRA[.W];RRA.BdstRRC[.W];RRC.Bdst*INV[.W];INV.Bdst逻辑运算指令2929292929292929*CLRC清除进位位---0*CLRN清除负位-0--*CLRZ清除零位*DINT禁止中断----*EINT使能中断*SETC置进位位*SETZ置零位*SETN置负位位操作指令3030303030303030*brdstCALLdstJC/JHS标号JEQ/JZ标号JGE标号JL标号JMP标号JN标号JNC/JLO标号JNE/JNZ标号*RET从子程序返回RETI从中断返回*NOP空操作跳转与程序流程的控制指令3131313131313131全部指令集3232323232323232核心指令33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333MSP430CPU结构指令系统—操作码格式指令系统—寻址方式指令系统—MSP430指令集指令系统—指令周期MSP430指令系统3434343434343434中断和复位周期3535353535353535单操作数指令周期和长度3636363636363636双操作数指令周期和长度3737373737373737跳转指令周期和长度代码长度:1个字指令周期:2个周期3838383838383838MSP430X结构MSP430X结构的CPU,PC、SP、R3—R15都是20位的,只有SR是16位。3939393939393939MSP430XMSP430X介绍介绍•FLASH大于64K的MSP430单片机用的都是MSP430X结构,F5系列是MSP430Xv2版本。因为MSP430结构的地址总线是16位的最大的寻址范围就是64K,而MSP430X或者MSP430Xv2地址总线是20位的最多可寻址范围是1M。•对于MSP430X结构的单片机如FG4619、F2619,F2418等或者F5系列的单片机如果代码不超过64K,则和MSP430结构的单片机一样,当代码超过64K则就需要用到扩展指令集。代码小于64K时IAR内的DataModel建议选择small,超过64K必须选择Large.•扩展指令集具体可见用户指南介绍。这里只做举例几条比较特殊的指令:•PUSHM.[W]PUSHM.W#6,R14就是把R14、R13、R12、R11、R10、R9这6个SFR全部压栈。但注意这压栈的是各个寄存器的低16位,相当于共消耗的栈区是(2*6=12)个字节。•与之对应的就是POPM.[W]4040404040404040POPM.W#6,R14就是把栈区内的数据重新返回到R14、R13、R12、R11、R10、R9。每弹出一个,SP加2.•PUSHM.APUSHM.A#6,R14同样也是把R14、R13、R12、R11、R10、R9这6个SFR全部压栈。但注意这压栈的是各个寄存器的20位,相当于共消耗的栈区是(4*6=24)个字节。与之对应的就是POPM.APOPM.A#6,R14就是把栈区内的数据重新返回到R14、R13、R12、R11、R10、R9。每弹出一个,SP加4。4141414141414141如果要对单个寄存器或者单元数据进行压栈则可以用PUSHX.A或者PUSHX.W。前者压栈的是20位,后者压栈的是16位。如PUSHX.AR8(对应POPX.AR8)就是把R8内的20位数据压栈,这时SP减4.PUSHX.WR8(对应POPX.WR8)就是把R8内的16位数据压栈,这时SP减24242424242424242•函数返回RET(针对CALL,调用范围64K之内,SP+2)RETA(针对CALLA,调用范围1M之内,SP+4)•中断返回RETI中断服务函数的入口必须在64K之内,即__interruptvoidXX_ISR(void)必须定
本文标题:指令系统-利尔达MSP430培训资料
链接地址:https://www.777doc.com/doc-977882 .html