第四章-PIC指令系统课件_第1页
第四章-PIC指令系统课件_第2页
第四章-PIC指令系统课件_第3页
第四章-PIC指令系统课件_第4页
第四章-PIC指令系统课件_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

指令是单片机的领导核心,就是指挥CPU按要求进行一系列操作的命令。一般来说,单片机都具有自己特有的指令系统,相互之间大都互不兼容。PIC单片机系列按照不同用户的要求分成三个不同的应用档次。第4章PIC指令系统

指令的执行时间总是分解成两部分:取指过程和执行过程,取指的快慢直接与指令的字节数有关,而指令的执行快慢与时钟的振荡频率有关。在以往的单片机结构中,程序存储器和数据存储器的地址空间和数据传输通道都相互并用,必须采用分时操作顺序执行。而PIC单片机指令的执行过程是遵循着一种全新哈佛总线体系结构的原则,充分利用计算机系统在程序存储器和数据存储器之间地址空间的相互独立性,取指过程和执行程序可以流水线操作同时进行。

4.1指令流水线操作原则

FlushFetch4FetchSUB_1

Tcy0Tcy1Tcy2Tcy3Tcy4

PIC单片机指令流水线示意

Execute1Fetch31.MOVLW55h

Fetch1Execute3Fetch2Execute2

Fetch42.MOVWFPORTB3.CALLSUB_14.BSFPORTA,BIT3在这种寻址方式中,操作数或其中之一(另一个是W)是立即数,随指令码携带,而无需再到其他地方去寻找。指令中的操作数为8-位常数.使用立即数寻址方式的指令有:

movlw,addlw,retlw,etc.如:ADDLW 16H指令寻址方式说明1.寄存器立即寻址14-位立即寻址指令OPCODEkkkkkkkk2.寄存器直接寻址7-位直接从指令中获取2-位从‘STATUS’寄存器中获取如:IORWF 26H,09-位有效寄存器地址IRPRP1RP0OPCODETOPDZDCCSTATUS寄存器14-位指令fffffffRP1RP0fffffff7-位来自指令字2-位来自STATUS寄存器3.寄存器间接寻址8-位间接地址来自FSR(选择寄存器).1-位来自STATUS寄存器.例如:MOVWFINDFIRPfffffffffIRPRP1RP0TOPDZDCCfffffffSTATUS寄存器8-位FSR寄存器有效的9-位寄存器地址8-位来自FSR1-位来自STATUS寄存器

这是一种比较特别的寻址方式,是通过两个寄存器INDF和FSR的组合而实现功能的。操作数是FSR寄存器内容为指针,所指向寄存器单元的内容。

间接寻址FSR和INDF用于间接寻址FSR

是地址指针INDF

保存移动的值522FSRINDFWritingReading521222324522FSRINDF521222324movlw 22movwf FSRmovlw 5movwf INDFmovlw 22movwf FSRmovf INDF,Wmovwf 5间接寻址实例运行机制:

a)清从0x20to0x7F所有的RAM区域

b)间接地址载入FSRc)每一次对‘INDF’运行,由FSR指向的寄存器被使用例子:

movlw 0x20

movwf FSRLOOP clrf INDF

incf FSR,F

btfss FSR,7

goto LOOP <nextinstruction>0000000000000000FSR=20hINDF00h04h20h7Fh数据记忆区这是PIC单片机的特色之一,它可以对所有的RAM数据存储器进行位寻址,即置位和清零等。如:BSF26H,4 ;(26H原为26H)4.位寻址每条指令的字节长度为14位,主要由说明指令功能的操作码和参与指令处理的操作数组成。操作码部分,简称助记符,如表4-2核心助记符,是借用英语单词来间接表达和定义其操作功能。

操作数部分,是按照操作码的操作功能,对操作数进行处理。根据操作数的源地址和目标地址的访问性质,可以有多种表现形式:主要有直接寻址、间接寻址、立即寻址和位寻址四类。4.2指令集说明

核心助记符

指令系统补充字符说明

数据传送类指令共有4条指令,主要功能是将数据从源地址(或立即数)传送至目标地址中。4.2.1数据传送类指令

【例题4-1】请利用数据传送类指令编写一段子程序,将立即数20H传送到通用寄存器20H中。

【例题4-2】请利用数据传送类指令编写一段子程序,将通用寄存器20H和30H中的内容进行交换。算术运算类指令是PIC单片机指令系统中,承担运算功能的重要部分,共有6条指令。主要有加减指令、增量和减量指令4.2.2算术运算类指令

【例题4-3】请将通用寄存器20H、30H构成的16位数据与通用寄存器40H、50H构成的16位数据相加后放入40H、50H中,已知其和不会超出65535。

逻辑运算类指令是一组比较复杂的指令,形式较多,可以对位和字节进行逻辑操作。主要有与、或、异或、清零、置位、取反和左右移位等14条指令4.2.3逻辑运算类指令

【例题4-4】请将数据存储器20H和30H中的数据分别与立即数20H、30H相与和相或后相加,结果放入40H存储器中,请编写相应的程序。

【例题4-5】请编写一个完整的程序,将数据存储器20H低4位和30H高4位组合成一个八位二进制数据,并从RC端口输出。

控制转移类指令,是在指令系统中形式灵活、功能较强的一组指令,共11条。它们是构成程序循环和跳转的关键要素,一般可以分为有条件跳转和无条件跳转两大类。

4.2.4控制转移类指令

这是一种比较特殊的转移形式,根据位测试或加减1后的内容判断条件的成立与否,而决定程序继续执行还是间跳执行指令。 当前判断语句A

下一条语句B再下一条语句C1.相对转移间跳

PIC指令系统的绝对转移,主要由CALL和GOTO语句引出。在指令机器码内部本身并没有携带完整的转移目标地址,只包含低11位地址,而高2位将由PCLATH寄存器给出。 【例题4-6】请将通用寄存器单元20H-2FH,分别对应赋值20H-2FH,请编写相应的软件程序。

2.绝对转移和调用

【例题4-7】请分析以下程序片段,并指出当程序执行完后,涉及到的所有存储器单元的结果。

MOVLW 22H MOVWF 22H MOVWF FSR ADDWF INDF,F INCF INDF SWAPF 22H,W RLF 22H,W DECF FSR,F MOVWFINDF BSF INDF,7【例题4-6】编写散转指令程序PICmicro指令集

14位内核之字节操作指令构成OPCODEdfffffffd=DestinationBit

d=0fordestinationW d=1fordestinationFf=7-bitRegisterAddressExample:ADDWF REG,WADDWF f,dNOP - MOVWF f CLRW - CLRF f SUBWF f,d

DECF f,d

IORWF f,d

ANDWF f,d

XORWF f,d

ADDWF f,d

MOVF f,d

COMF f,d

INCF f,d

DECFSZ f,d

RRF f,d

RLF f,d

SWAPF f,d

INCFSZ f,d

字节操作121

移动数据:立即数,WandFMyVarmovf

MyVar,Wincf

MyVar,FWorWREGFileRegistersmovwf

MyVar21立即数movlw 1PICmicro指令集

汇总ADDWF f,d AddWandfANDWF f,d ANDWandfCLRF f ClearfCLRW - ClearWCOMF f,d ComplementfDECF f,d DecrementfDECFSZ f,d Decrementf,skipifzeroINCF f,d IncrementfINCFSZ f,d Incrementf,skipifzeroIORWF f,d InclusiveORWandfMOVF f,d MovefMOVWF f MoveWtofNOP - NoOperationRRF f,d RotaterightfthroughcarryRLF f,d RotateleftfthroughcarrySUBWF f,d SubtractWfromfSWAPF f,d SwapnibblesoffXORWF f,d ExclusiveORWandfBCF f,b BitclearfBSF f,b BitsetfBTFSC f,b Bittestf,skipifclearBTFSS f,b Bittestf,skipifsetSLEEP - GointostandbymodeCLRWDT - ClearwatchdogtimerRETLW k Return,placeliteralinWRETFIE - ReturnfrominterruptRETURN - ReturnfromsubroutineCALL k CallsubroutineGOTO k Gotoaddress(kis9-bit)MOVLW k MoveliteraltoWIORLW k InclusiveORliteralwithWADDLW k AddliteralwithWSUBLW k SubtractWfromliteralANDLW k ANDliteralwithWXORLW k ExclusiveORliteralwithWByte-OrientedOperationsBit-OrientedOperationsLiteralandControlOperationsf=FileRegister,k=literalvalue(8-bit),b=bitaddress<0to7>,d=destination(Worfileregister)PICmicro指令集

位操作14位内核之位操作指令构成OPCODEbfffffffb=3-BitAddress(BitNumber)

f=7-bitRegisterAddressbb例:BTFSC STATUS,CBTFSC f,bBCF f,b

BSF f,b

BTFSC f,b

BTFSS f,b

位操作00000000Bit7Bit0PICmicro指令集

立即数和控制操作k14位内核之立即数和控制指令构成OPCODEkkkkkkkk=8-bitImmediateValue例:MOVLW 0x2FMOVLW kSLEEP - CLRWDT - RETLW k RETFIE - RETURN - CALL k GOTO k MOVLW k IORLW k ADDLW k SUBLW k ANDLW k XORLW k 立即数和控制操作14-bit单片机指令集

操作实例NOP NoOperationSyntax: NOPOperands: NoneOperation: NooperationStatus: NoneEncoding: 0000000000

0000Words: 1Cycles: 1

例:

NOP14-bit核指令集

字节操作14位内核之字节操作指令构成OPCODEdfffffffd=DestinationBit

d=0fordestinationW d=1fordestinationFf=7-bitRegisterAddressExample:ADDWF REG,WADDWF f,dNOP - MOVWF f CLRW - CLRF f SUBWF f,d

DECF f,d

IORWF f,d

ANDWF f,d

XORWF f,d

ADDWF f,d

MOVF f,d

COMF f,d

INCF f,d

DECFSZ f,d

RRF f,d

RLF f,d

SWAPF f,d

INCFSZ f,d

Byte-OrientedOperationsPICmicroMCU指令集

字节操作MOVWF MoveWtofSyntax: MOVWFfOperands: 0<=f<=127Operation: (W)->(f)Status: NoneEncoding: 0000001fff

ffffWords: 1Cycles: 1

例:

MOVWF FSR

执行前 FSR =0xFF W =0x4F

执行后 FSR =0x4F W =0x4FPICmicroMCU指令集

字节操作CLRW ClearWSyntax: CLRWOperands: NoneOperation: 00h->(W) 1->ZStatus: ZEncoding: 00000100000000Words: 1Cycles: 1

例:

CLRW

执行前 W =0x4F

执行后 W =0x00 Z =1PICmicroMCU指令集

字节操作CLRF ClearfSyntax: CLRFfOperands: 0<=f<=127Operation: 00h->(f) 1->ZStatus: ZEncoding: 0000011fff

ffffWords: 1Cycles: 1

例:

CLRFFSR

执行前 FSR =0x4F

执行后 FSR =0x00 Z =1PICmicroMCU指令集

字节操作SUBWF SubtractWfromfSyntax: SUBWFf,dOperands: 0<=f<=127 d={0,1}Operation: (f)-(W)->destStatus: C,DC,ZEncoding: 000010dfff

ffffWords: 1Cycles: 1

例:

SUBWFFSR,W

执行前 FSR =0x03 W =0x02 C =? Z =?

执行后 FSR =0x03 W =0x01 C =1 Z =0PICmicroMCU指令集

字节操作DECF DecrementfSyntax: DECFf,dOperands: 0<=f<=127 d={0,1}Operation: (f)-1->destStatus: ZEncoding: 000011dfff

ffffWords: 1Cycles: 1

例:

DECFFSR,F

执行前 FSR =0x01 Z =0

执行后 FSR =0x00 Z =1PICmicroMCU指令集

字节操作MOVF MovefSyntax: MOVFf,dOperands: 0<=f<=127 d={0,1}Operation: (f)->destStatus: ZEncoding: 001000dfff

ffffWords: 1Cycles: 1

例:

MOVFFSR,F

执行前 FSR =0x00 Z =0

执行后 FSR =0x00 Z =1PICmicroMCU指令集

字节操作DECFSZ Dec.f,Skipif0Syntax: DECFSZf,dOperands: 0<=f<=127 d={0,1}Operation: (f)-1->dest skipifresult=0Status: NoneEncoding: 001011dfff

ffffWords: 1Cycles: 1(2)例:Loop

DECFSZCNT,F GOTO LoopContinue

执行前 PC=addressLoop

执行后 CNT =CNT-1 ifCNT=0, PC=addressContinue elseCNT!=0, PC=addressLoop+1PICmicroMCU指令集

字节操作RRF RotateRightf->CSyntax: RRFf,dOperands: 0<=f<=127 d={0,1}Operation:Status: CEncoding: 001100dfff

ffffWords: 1Cycles: 1例: RRF CNT,W

执行前 CNT =11100110 C =0

执行后 CNT =11100110 W =01110011 C =0CRegisterfPICmicroMCU指令集

14位内核之位操作指令构成OPCODEbfffffffb=3-BitAddress(BitNumber)

f=7-bitRegisterAddressbbExample:BTFSC STATUS,CBTFSC f,bBCF f,b

BSF f,b

BTFSC f,b

BTFSS f,b

位操作PICmicroMCU指令集

位操作BCF BitClearfSyntax: BCFf,bOperands: 0<=f<=127 0<=b<=7Operation: 0->(f<b>)Status: NoneEncoding: 0100bb

bfff

ffffWords: 1Cycles: 1

例:

BCFFSR,4

执行前 FSR =00110000

执行后 FSR =00100000PICmicroMCU指令集

位操作BTFSS BitTestf,Skipif1Syntax: BTFSSf,bOperands: 0<=f<=127 0<=b<=7Operation: skipif(f<b>)=1Status: NoneEncoding: 0111bb

bfff

ffffWords: 1Cycles: 1(2)例:Here

BTFSSCNT,2False GOTO ElsewhereTrue

执行前 PC=addressHere

执行后 ifCNT<2>=1, PC=addressTrue ifCNT<2>=0, PC=addressFalsePICmicroMCU指令集

立即数操作k14位内核之立即数操作指令构成OPCODEkkkkkkkk=8-bitImmediateValue例:MOVLW 0x2FMOVLW kMOVLW k IORLW k ADDLW k SUBLW k ANDLW k XORLW k 立即数操作PICmicroMCU指令集

立即数操作MOVLW 立即数送给WSyntax: MOVLWkOperands: 0<=k<=255Operation: k->(W)Status: NoneEncoding: 110000kkkk

kkkkWords: 1Cycles: 1

例:

MOVLW0x5A

执行后 W =0x5APICmicroMCU指令集

立即数操作ADDLWW与立即数相加Syntax: ADDLWkOperands: 0<=k<=255Operation: (W)+k->(W)Status: C,DC,ZEncoding: 111110kkkk

kkkkWords: 1Cycles: 1

例:

ADDLW0x15

执行前

W =0x10

执行后 W =0x25PICmicroMCU指令集

立即数操作ANDLW W与立即数相与Syntax: ANDLWkOperands: 0<=k<=255Operation: (W)ANDk->(W)Status: ZEncoding: 111001kkkk

kkkkWords: 1Cycles: 1

例:

ANDLW0x5F

执行前

W =0xA3

执行后 W =0x03PICmicroMCU指令集

控制类操作k14位内核之RETLW指令构成OPCODEkkkkkkkk=8-bitImmediateValueSLEEP - CLRWDT - RETLW kRETFIE - RETURN - CALL k GOTO k 控制类操作14位内核之CALL/GOTO指令构成OPCODEk=11-bitImmediateValuekkkkkkkkkkkPICmicroMCU指令集

控制类操作SLEEP 进入SLEEPSyntax: SLEEPOperands: NoneOperation: 00h->WDT 1->TO 0->PDStatus: TO,PDEncoding: 00000001100011Words: 1Cycles: 1

例:

SLE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论