找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 9112|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

PIC16系列指令集

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-22 20:47 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

PIC16系列指令集

一、字節(jié)操作指令(d=0時(shí)目標(biāo)寄存器為W;d=1時(shí)目標(biāo)寄存器為F)

指令

指令名稱

指令操作說明

范例

ADDWF f,d

寄存器加法指令

W寄存器中的值和f寄存器中的值相加,結(jié)果存于目標(biāo)寄存器

ADDWF  FSR,0 ;W中的值加FSR的中的值

SUBWF f,d

寄存器減法指令

f寄存器中的值減去W寄存器中的值,運(yùn)算存于目標(biāo)寄存中

SUBWF  REG1,1;REG1減去W中的值(結(jié)果為正C=1、Z=0;結(jié)果為零C=1,Z=0;結(jié)果為負(fù)時(shí)C=0、Z=0

INCF f,D

寄存器加1指令

f寄存器中的值遞增1,操作算存于目標(biāo)寄存中

INCF CNT,1 ;CNT=0xFF(Z=0)時(shí)執(zhí)行后CNT=0x00(Z=1)

DECF f,d

寄存器減1指令

f寄存器中的值遞減1,操作算存于目標(biāo)寄存中

DECF CNT,1 ;CNT=0x01(Z=0)時(shí)執(zhí)行后CNT=0x00(Z=1)

ANDWF f,d

寄存器與指令

W寄存器中的值和f寄存器中的值做AND運(yùn)算,結(jié)果存于目標(biāo)寄存器中

ANDWF FSR,1 ;W=0x17,FSR=0xC2時(shí)執(zhí)行后W=0x17,FSR=0x02(做運(yùn)算時(shí)要把十六進(jìn)制轉(zhuǎn)成二進(jìn)制)(全真為真,有假為假)

IORWF f,d

寄存器或指令

W寄存器中的值和f寄存器中的值做OR運(yùn)算,結(jié)果存于目標(biāo)寄存器中

IORWF RESULT,0;RESULT=0x13,W=0x91時(shí)執(zhí)行后RESUL=0x13,W=0x93(有真為真,全假為假)

XORWF f,d

寄存器異或指令

W寄存器中的值和f寄存器中的值做XOR運(yùn)算,結(jié)果存于目標(biāo)寄存器中

XORWF REG,1;REG=0xAF,W=0xB5時(shí)執(zhí)行后REG=0x1A, W=0xB5(XOR兩個(gè)值不相同異或結(jié)果為真,反之,為假)

COMF f,d

寄存器取反指令

f寄存器中的值做補(bǔ)碼運(yùn)算后,運(yùn)算結(jié)果存于目標(biāo)寄存器中

COMF REG1,0;REG1=0x13時(shí)執(zhí)行后REG1=0x13,W=0xEC(CO運(yùn)算時(shí)位補(bǔ)1,其它取反。

CLRF Clear f

寄存器清零指今

f寄存器中的值清0,Z標(biāo)志位值1

XCLRF FLAG_REG ;FLAG_REG =0x5時(shí)執(zhí)行后FLAG_REG =0x00,Z=1

CLRW

W清零指令

f寄存器中的值清0,Z標(biāo)志位值1

CLRW  ;W=0x1D時(shí)執(zhí)行后W=0x00,Z=1

MOVF f,d

f寄存器傳送指令

把f寄存器中的值存于目標(biāo)寄存器中,當(dāng)目標(biāo)寄存器也是f時(shí),可以用來測(cè)試f內(nèi)容是否為零

MOVF FSR,0 FSR=0x1A時(shí)執(zhí)行后W=0x1A

MOVWF f

W寄存器傳送指令

把W寄存器中的值傳送到目標(biāo)寄存器f中

MOVWF OPTION ;OPTION=0xFF,W=0xE5時(shí)執(zhí)行后OPTION=0xE5,W=0xE5

INCFSZ f,d

寄存器加1,為零時(shí)跳指令

f寄存器中值加1,結(jié)果存于目標(biāo)寄存器,結(jié)果為1執(zhí)行下一條指令,結(jié)果為0忽略并用NOP代替.

HERE INCFSZ CNT,1;GOTO LOOP;CONTINUE;PC=HERER執(zhí)行后, CNT=CNT加1,當(dāng)CNT=0,PC=CONTINUE,當(dāng)CNT≠0時(shí)PC=HERE加1

DECFSZ f,d

寄存器減1,為零時(shí)跳指令

f寄存器中值減1,結(jié)果存于目標(biāo)寄存器,結(jié)果為1執(zhí)行下一條指令,結(jié)果為0忽略并用NOP代替.

HERE DECFSZ CNT,1;GOTO LOOP;CONTINUE;PC=HERER執(zhí)行后, CNT=CNT減1,當(dāng)CNT=0,PC=CONTINUE,當(dāng)CNT≠0時(shí)PC=HERE減1

RLF f,d

帶進(jìn)位左移指令

C位放在f值的MSB之前當(dāng)作9位,然后每個(gè)位向左移,C位移到0,結(jié)果存于目標(biāo)寄儲(chǔ)器

RLF REG1,0;REG1=1110 0110,C=0時(shí)執(zhí)行后                    REG1=1110 0110,W=11001100,C=1

RRF f,d

帶進(jìn)位左移指令

C位放在f值的MSB之前當(dāng)作9位,然后每個(gè)位向左移,0位移到C,結(jié)果存于目標(biāo)寄儲(chǔ)器

RRF REG1,0;REG1=1110 0110,C=0時(shí)執(zhí)行后                    REG1=1110 0110,W=0111 0011,C=0

SWAPF f,d

寄存器交換指令

F寄存器中的上半字節(jié)與下半字節(jié)內(nèi)容調(diào)換,運(yùn)算結(jié)果存于目標(biāo)寄存器

SWAPF REG,0;REG=0x1F時(shí)執(zhí)行后REG=0x1F,W=0xF1

二、位操作指令

指令

指令名稱

指令操作說明

范例

BCF f,b

位清0指令

f寄存器中位b清0

BCF REG,7;REG=0xF1時(shí)執(zhí)行后REG=0xF1,W=71

BSF f,b

位置1指令

f寄存器中位b置1

BSF REG,7;REG=0x04K時(shí)執(zhí)行后REG=0x84

BTFSC f,b

位測(cè)試,為0則跳指令

查f寄存器b位,為1時(shí)執(zhí)行下一條,為0時(shí)跳過下一條并執(zhí)行NOP代替

HERE BTFSC FLAG,1;FALSE GOTO PE;TRUE:  ;PC=HERE時(shí)執(zhí)行后,當(dāng)FLAG=0時(shí),PC=TRUE;當(dāng)FLAG=1,PC=FALSE

BTFSS f,b

位測(cè)試,為1則跳指令

查f寄存器b位,為0時(shí)執(zhí)行下一條,為1時(shí)跳過下一條并執(zhí)行NOP代替

HERE BTFSS FLAG,1;FALSE GOTO PE;TRUE:  ;PC=HERE時(shí)執(zhí)行后,當(dāng)FLAG=1時(shí),PC=TRUE;當(dāng)FLAG=0,PC=FALSE

三、常數(shù)和控制操作類指令

指令

指令名稱

指令操作說明

范例

ADDLW k

常數(shù)加法指令

W寄存器中的值和k相加,結(jié)果存W寄存器中

ADDLW 0xD1;W=0x11時(shí)執(zhí)行后W=0xE2

SUBLW k

常數(shù)減法指令

W寄存器中的值和k相減,結(jié)果存W寄存器中

SUBLW 0xD1;W=0x11時(shí)執(zhí)行后W=0xC0

ANDLW k

常數(shù)與指令

W寄存器中的值和k做與運(yùn)算,結(jié)果存W寄存器中

ANDLW 0x5F;W=0xA3時(shí)執(zhí)行后W=0x03

IORLW k

常數(shù)或指令

W寄存器中的值和k做或運(yùn)算,結(jié)果存W寄存器中

IORLW 0x35;w=0x9A時(shí)執(zhí)行后W=0xBF

XORLW k

常數(shù)異或指令

W寄存器中的值和k做異或運(yùn)算,結(jié)果存W寄存器中

XORLW 0xAF;W=0xB5時(shí)執(zhí)行后W=0x1A

CLRWDT

看門狗計(jì)數(shù)器清0令

復(fù)位看門狗定時(shí)器、WDT預(yù)分頻(清0),TO、PD位置1

CLRWDT ;WDT Counter=?時(shí)執(zhí)行后WDT Counter=0x00,WDT Prescaler=0,TO=1,PD=1

MOVLW k

常數(shù)傳送指令

把k值傳送到W寄存器中

MOVLW 0x5A ;時(shí)執(zhí)行后W=0x5A

CALL k

子程序調(diào)用指令

首先將返回地址((PC)+1)壓棧保護(hù),再轉(zhuǎn)入所調(diào)用的子程序入口地址執(zhí)行

HERE CALL THERE;PC=HERE時(shí)執(zhí)行后PC=THERE,TOS=HERE+1

GOTO k

無(wú)條件跳轉(zhuǎn)指令

無(wú)條件跳轉(zhuǎn),11個(gè)位的k值放PC(10:0),PC(12:11)值從PCLATH(4:3)

GOTO HERE 執(zhí)行后PC=HERE

RETURN

子程序返回指令

從子程序中返回,堆棧頂端的值會(huì)存放PC中

RETURN ;執(zhí)行后PC從子程序返回

RETLW k

子程序帶參數(shù)返回指令

W寄存器中會(huì)放入k值,堆棧中彈出值放入PC

CALL ABC;ABC:ADDWF PC;RETLW k1;RETLW k2…;W=0x07時(shí)執(zhí)行后W=K?

RETFIE

中斷服務(wù)子程序返回指令

從中斷程序中返回,堆棧頂?shù)闹禃?huì)存入PC中,全局中斷位置1

RETFIE ;PC從中斷子程序返回,GIE=1

SLEEP

睡眠指令

省電狀態(tài)清0超時(shí)位置1,看門狗、預(yù)分頻清0,振蕩器無(wú)輸出

SLEEP

NOP

空操作指令

不做任何操作

NOP

 

 

 

 

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:116389 發(fā)表于 2016-5-25 10:58 | 只看該作者
我是一樓,我坐沙發(fā),樓下?lián)尠宓?br />
回復(fù)

使用道具 舉報(bào)

板凳
ID:160143 發(fā)表于 2017-1-5 15:35 來自觸屏版 | 只看該作者
感謝,太辛苦了…
回復(fù)

使用道具 舉報(bào)

地板
ID:162136 發(fā)表于 2017-4-11 15:37 | 只看該作者
CLRW
W清零指令
f寄存器中的值清0,Z標(biāo)志位值1
CLRW  ;W=0x1D時(shí)執(zhí)行后W=0x00,Z=1
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表