PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011

合集下载

PIC16F88x指令集

PIC16F88x指令集

f, d W 和 f 相加
f, d W 和 f 作逻辑与运算
f
将 f 清零
- 将 W 寄存器清零
f, d f 取反
f, d f 递减 1
f, d f 递减 1,为 0 则跳过
f, d f 递增 1
f, d f 递增 1,为 0 则跳过
f, d W 和 f 作逻辑或运算
f, d 将 f 的内容传送到目标寄存器
1
00 1110 dfff ffff
1, 2
1
00 0110 dfff ffff
Z
1, 2
针对位的文件寄存器操作
BCF BSF BTFSC BTFSS
f, b 将 f 中的某位清零 f, b 将 f 中的某位置 1 f, b 检测 f 中的某位,为 0 则跳过 f, b 检测 f 中的某位,为 1 则跳过
1
11 1001 kkkk kkkk
Z
2
10 0kkk kkkk kkkk
1
00 0000 0110 0100 TO, PD
2
10 1kkk kkkk kkkk
1
11 1000 kkkk kkkk
Z
1
11 00xx kkkk kkkk
2
00 0000 0000 1001
2
11 01xx kkkk kkkk
2
00 0000 0000 1000
1
00 0000 0110 0011 TO, PD
1
11 110x kkkk kkkk C,DC,Z
1
11 1010 kkkk kkkk
Z
注 1: 当 I/O 寄存器用自身内容修改自身时 (例如:MOVF PORTB, 1),使用的值是出现在引脚上的值。例如,如果将一引脚 配置为输入,虽然其对应数据锁存器中的值为 1,但此时若有外部器件将该引脚驱动为低电平,则被写回的数据值将是 0。

指令PIC的指令详解

指令PIC的指令详解
MOVLW 3
MOVWF REG1
MOVLW 2
SUBWF REG1,0 W=1 C=1
MOVLW 2
MOVWF REG1
MOVLW 2
SUBWF REG1,0 W=0 C=1
MOVLW 2
MOVWF REG1
MOVLW 3
SUBWF REG1,0 W=FF C=0
51.SUBTRACT W FROM F WITH BORROW
DAW REG1,0 (对F中内容进行10进制调整->F/W+F)
REG1=0XA5 C=0 DC=0->0X05 C=1 DC=0
20.DECREMENT F
DECF CNT,1(寄存器内容减1->W/F)
21.DECREMENT F,SHIP IF 0
DECFSZ CNT,1
LCALL LOW 调用子程序(指令只含低8位地址)
30.MOVE F
MOVF REG,0 ((REG)->W)
31.MOVE F TO P
MOVFP F,P (F:00H-FFH P:00H-1FH)
55.TABLE L
SUBLW K
K-(W)->W
MOVLW 01H
SUBLW 02H W=01H C=1结果为正
MOVLW 02H
SUBLW 02H W=0 C=1结果为0
MOVLW 02H
SUBLW 01H W=FF C=0结果为负
50.SUBTRACT W FROM F
SUBWF F,D
MOVLR 5 BSR=0X22->0X52 (传至高4位 低4位为0)

pic16单片机汇编指令集合

pic16单片机汇编指令集合
8、INCF f,d; f加1
9、INCFSZ f,d; f加1,为0则跳过
10、IORWF f,d; 将f中的内容与W中的内容逻辑或运算
11、MOVF f,d; 传送f,d=0则传给W,d=1则传给自已
12、MOVWF f;将w传给f
13、RLF f,d;将F执行带进位循环左移
14、RRF f,d;将F执行带进位循环右移
PIC16系列
1、ADDWF f,d;将f中的内容与W中的内容相加,存储在d提定的寄存器中.
2、ANDWF f,d;将f中的内容与W中的内容逻辑与运算
3、CLRF f;将f清零
4、CLRW ;将W清零
5、COMF f,d;将f取反
6、DECF f,d; f减1
7、DECFSZ f,d; f减1,为0则跳过
28、RETFIE ;中断返回使能
29、RETLW k;返回时将立即数送入W
30、RETURN ;从子程序返回
31、SLEEP 进入待机模式
32、SUBLW k;立即数减去W
33、XORLW k;立即数与WREG作逻辑异或运算
34、NOP
21、BTFSS f,b; F中的ADDLW k;W与立即数相加
23、ANDLW K;立即数与W作逻辑与运算
24、IORLW k;立即数与W作逻辑或运算
25、MOVLW k;将立即数传送给W
26、CALL k;调用子程序
27、GOTO k;跳转到地址
15、SUBWF f,d;将f减去W
16、SWAPF f,d;将f中的两个半字节进行交换
17、XORWF f,d; W与f作逻辑异或运算
面向位的操作类指令

单片机汇编指令集合(中英指令翻译)

单片机汇编指令集合(中英指令翻译)

一、数据传送类指令(8种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;P55PUSH (Push onto Stack) 入栈;PUSH directPOP (Pop from Stack) 出栈;POP directXCH (Exchange) 字节交换;XCH A,源/@RiXCHD (Exchange low-order Digit) 低半字节交换;同上SWAP (Swap) 低4位与高4位交换;SWAP A MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVC A,@A+DPTR/PC MOVX (Move External RAM) 对外部RAM的数据传送;MOVX @DPTR,A MOVX A,@DPTR/@Ri MOVX @Ri,A二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;INC(Increment) 加1;INC A/Rn/direct/@Ri/源/DPTRDA(Decimal Adjust) 十进制调整;SUBB(Subtract with Borrow) 带借位减法;DEC(Decrement) 减1;DEC A/Rn/direct/@Ri/源MUL(Multiplication、Multiply) 乘法;MUL AB 高B,低A。

Cy=0 大于256,OV=1 DIV(Division、Divide) 除法;DIV AB 商A,余B。

Cy=0 OV=B(同上)三、逻辑运算类指令(9种助记符)CLR(Clear) 清零;CLR ACPL(Complement) 取反;CPL ARL(Rotate left) 循环左移;(同上)RLC(Rotate Left throught the Carry flag) 带进位循环左移;(同上)RR(Rotate Right) 循环右移;(同上)RRC (Rotate Right throught the Carry flag) 带进位循环右移;(同上)ANL(AND Logic) 逻辑与;ANL A,#data/Rn/direct/@Ri ANL direct,A/#dataORL(OR Logic) 逻辑或;ORL A,#data/Rn/direct/@Ri ANL direct,A/#dataXRL(Exclusive-OR Logic) 逻辑异或;(同上)四、位操作指令(6种助记符)MOV 位数据传送指令;MOV C,bit MOV bit,CCLR 位清零;C bitSETB(Set Bit)位置1;C bitCPL位取反;(同上)ANL位逻辑运算指令;ANL C,bit//bitORL位逻辑或运算指令;(同上)五、控制转移类指令(18种助记符)AJMP(Absolute Jump)绝对转移;AJMP addr11/ LABELLJMP(Long Jump)长转移;(同上)SJMP(Short Jump)短转移;SJMP rel/ LABELJMP间接转移指令; JMP @A+DPTRJZ (Jump if Zero)结果为0则转移;JZ rel/ LABELJNZ (Jump if Not Zero) 结果不为0则转移;(同上)CJNE (Compare Jump if Not Equal)比较不相等则转移;CJNE A,direct,rel/ LABEL CJNE A/Rn/@Ri,#data,rel/ LABELJC (Jump if the Carry flag is set)有进位则转移;JC rel/ LABELJNC (Jump if Not Carry)无进位则转移;(同上)JB (Jump if the Bit is set)位为1则转移;JB bit, rel/ LABELJNB (Jump if the Bit is Not set) 位为0则转移;(同上)JBC(Jump if the Bit is set and Clear the bit) 为1则转移,并清除该位;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;DJNZ Rn,rel/ LABEL DJNZ direct,rel/ LABELLCALL(Long subroutine Call)子程序长16调用;LCALL addr16/ SUBROUTINEACALL(Absolute subroutine Call)子程序绝对11调用;(同上)RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;NOP (No Operation) 空操作;8种常用伪指令1.ORG 16位地址;此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。

PIC指令集

PIC指令集
MOVLW 0x5A;时执行后W=0x5A
CALL k
子程序调用指令
首先将返回地址((PC)+1)压栈保护,再转入所调用的子程序入口地址执行
HERE CALL THERE;PC=HERE时执行后PC=THERE,TOS=HERE+1
GOTO k
无条件跳转指令
无条件跳转,11个位的k值放PC(10:0),PC(12:11)值从PCLATH(4:3)
INCFSZ f,d
寄存器加1,为零时跳指令
f寄存器中值加1,结果存于目标寄存器,结果为1执行下一条指令,结果为0忽略并用NOP代替.
HERE INCFSZ CNT,1;GOTO LOOP;CONTINUE;PC=HERER执行后, CNT=CNT加1,当CNT=0,PC=CONTINUE,当CNT≠0时PC=HERE加1
PIC16系列指令集
一、字节操作指令(d=0时目标寄存器为W;d=1时目标寄存器为F)
指令
指令名称
指令操作说明
范例
ADDWF f,d
寄存器加法指令
W寄存器中的值和f寄存器中的值相加,结果存于目标寄存器
ADDWF FSR,0;W中的值加FSR的中的值
SUBWF f,d
寄存器减法指令
f寄存器中的值减去W寄存器中的值,运算存于目标寄存中
XORWF REG,1;REG=0xAF,W=0xB5时执行后REG=0x1A, W=0xB5(XOR两个值不相同异或结果为真,反之,为假)
COMF f,d
寄存器取反指令
f寄存器中的值做补码运算后,运算结果存于目标寄存器中
COMF REG1,0;REG1=0x13时执行后REG1=0x13,W=0xEC(CO运算时位补1,其它取反。

PIC单片机之汇编语言

PIC单片机之汇编语言

PIC指令介绍2006-12-24 03:03:05来源:嵌入式技术网关键字: PIC指令系统<a target='_blank' href='/www/delivery/ck.php?n=826cd67'><img border='0' alt='' src='/www/delivery/avw.php?zoneid=212&n=826cd67' /></a>工作以来一直使用ST的单片机,其他的单片机虽大致了解但从未认真看过,近几日恰好无事,决定熟悉一下PIC的单片机,于是想将自己从网上或这书本上的东西转下来,予以同一样的初学者共同参考。

PIC的指令系统PIC 8位单片机共有三个级别,有相对应的指令集。

基本级PIC 系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。

其指令向下兼容。

一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。

1 标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。

在程序汇编时,已赋以指令存储器地址的具体数值。

汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。

标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。

在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。

指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。

书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。

PIC单片机指令集

PIC单片机指令集
容是否为一特定值,用判别键值。影响标志位 z。
DECF f,d; 对f的内容作减1运算,结果按d指定地址存放,结果d=0,则z=0.
INCF f,d; 对f的内容作递增1,结果按d指定地址存放,结果d=0,则z=0
COMF f,d; 对f的内容取反,求某个数的补码即可通过此指令后加1,影响标志位z。
SLEEP ; cpu进入休休眠模式.
end
如果传送的数据为0侧标志z置位
CLRW ;该指令对w寄存器清0,同时标志位z置位0。另外有一条指令movlw 0x00也可以使w寄存器
清0,但不影响任何状态标志。
CLRF ;对数据寄存器f清0,同时标志位z置0.
ADDWF f,d;数据寄存器f的内容与w的内容相加,结果d=f,w的内容不变;d=w,数据寄存器f内容不变,
的13位地址.
RETURN; 子程序结束返回
RETLW ; 子程序ቤተ መጻሕፍቲ ባይዱ束返回并在w寄存器内赋一8位立即数.其他执行同(RETURN...),该指令常用于查表功能
RETFIE ; 中断程序结束并返回,(弹出栈顶内容到PC,同是把INTCON寄存器的第7位GIE置1.
CLRWDT ; 看门狗计数器清0
不影响标志位.
ADDLW k; 把w寄存器的值和立即数(8位)相加,结果存放在w.
影响标志位 z dc c
SUBLW k; 立即数减去w,如果k=w,则z=1;k>w,则c=1;k<w,则c=0
IORLW k; w寄存器与立即数相或,结果存放在w,影响标志位 z.
********字节操作指令*******
NOP - ;空操作
MOVWF f ;把W寄存器的内容传送至数据寄存器中,w寄存器的内容保持不变,不影响标志位

PIC单片机常用指令

PIC单片机常用指令

LIST P=16C71TEMPC EQU0CH;定義通用寄存器TEMPD EQU0DHTEMPE EQU0EHPABUF EQU20HPBBUF EQU21HCOUNT EQU0FH;計數寄存器MSDTIME EQU10H;高2位顯示數寄存器LSDTIME EQU11H;低2位顯示數寄存器;FLAG EQU12H;定義FLAG寄存器位KEYHIT EQU0DEBNCEON EQU1NOENTER EQU2SERVKEY EQU3ADOVER EQU4;A/D轉換溢出標志位;DEBNCE EQU13H;去抖動計數器EQU14HEQU15H;放通道數EQU16H;4通道A/D結果地址(16H-19H);H-BYTE EQU20H;二進制結果高位寄存器L-BYTE EQU21H;二進制結果低位寄存器R0EQU22H;最高位BCD數寄存器R1EQU23HR2EQU24H;最低位BCD數寄存器COUNT EQU26HTEMP EQU27HWBUFFER EQU2FH;W緩沖寄存器SBUFFER EQU2EH;STATUS緩沖寄器PCL EQU2;INCLUDE"P16CXX,EQU";ORG0GOTO START;ORG4;中斷向量MOVWF WBUFFER;將W內容存入緩沖器(保護現場)SWAPF WBUFFERSWAPF STATUS,WMOVWF SBUFFER;將STATUS內容存入緩沖器CALL SERV-INT;進行中斷處理SWAPF SBUFFER,WMOVWF STATUS;恢復STATUS(恢復現場)SWAPF WBUFFER,W;恢復W內容RETFIE;START;主程序開始CALL INPORTS;I/O口初始化CALL INAD;A/D初始化CALL INTIMERS;定時器初始化LOOP BTFSC FLAG,;要進行鍵處理否?CALL SERVICEKEY;是,進行鍵處理BTFSC FLAG,ADOVER;A/D轉換完否?CALL SERVICEAD;是,進行A/D數據處理GOTO LOOP;否,循環等待;SERVICEKEY;鍵處理子程序BCF FLAG,;清按鍵標志MOVF NEWKEY,W;取鍵值SUBLW3;判健值>3否?BTFSS STATUS,C;小於3則跳轉RETURN;大於3返回MOVF NEWKEY,WMOVWF DISPCH;更新通道LOADMOVLW ADTABLE;取A/D結果數據表的首地址ADDWF NEWKEY,W;加偏移量MOVWF FSR;存入FSR寄存器MOVF INDF,W;取A/D值MOVWF L-BYTECLRF H-BYTECALL B2-BCDMOVF R2,W取低兩位顯示值MOVWF LSDTIME;存入低2位顯示數寄存器MOVF R1,W取高兩位顯示值MOVWF MSDTIME;存入高2位顯示數寄存器RETURN;;存A/D結果(0通道->ADTABLE,1通道->工ADTABLE+1,…)SERVICEADMOVF ADCON0,W;讀ADCON0MOVWF TEMPC;存入TEMPCMOVLW B'00001000';選下一個通道ADDWF ADCON0,WBTFSC ADCON0,5;通道數<=3否?MOVLW B'11000000';否,重選0通道MOVWF ADCON0MOVLW ADTABLEMOVWF FSR;A/D結果數據表首址-->FSRRRF TEMPCRRF TEMPCRRF TEMPC,W;通道數-->WANDLW3;屏蔽高6位ADDWF FSR;加偏移量至數據表MOVF ADRES,W;取A/D結果MOVWF INDF;存入FSR指定的寄存器BCF FLAG,ADOVER;清A/D溢出標志CALL LOAD RETURN ;INPORTS;I/O 口初始化BSF STATUS,RP0;選寄存器區1MOVLW 3MOVWF ADCON1;設置RA <0~3>為數字 I /O 口CLRF TRISA ;設置RA <0~4>為輸出CLRF TRISB ;設置RB <0~7>為輸出BCF STATUS,RP0;選寄存器區0CLRF RA CLRF RB ;置所有輸出口為低□電平BSF RA,3;使能最高顯示數字位RETURN ;CLRF MSDTIME ;清高位寄存器CLRF LSDTIME ;清低位寄存器CLRF DISPCH ;選通道0CLRF FLAG ;清標志BSF STATUS,RP0;選寄存器區1MOVLW B'0000100'MOVWF OPTION_R ;設RTCC 分頻比為1:32BCF STATUS,RP0;選寄存器區0MOVLW B'00100000';允許RTCC 中斷MOVWF INTCON MOVLW .96;設RTCC 初值MOVWF RTCC ;開始計時RETFIE ;SERV_INTBTFSC INTCON,RTIF ;是RTCC 中斷否?GOTO SERVRTCC ;是,進行中斷處理CLRF INTCON ;清中斷寄存器BSF INTCON,RTIF RETURN ;SERVRTCCMOVLW .96MOVWF RTCC ;設RTCC 初值BCF INTCON,RTIF ;清中斷標志BTFSC RA,0CALL SCANKEYS ;掃描鍵盤BTFSC RA,3CALL SAMPLEAD CALL DISPLAY ;進行數據顯示RETURN ;BTFSS FLAG,DEBNCEO N ;清抖動否?GOTO SCAN1;否,轉SCAN1INTIMERS ;內部振蕩,RTCC 預分頻比1:32,RTCC 每5ms 中斷一次SCANKEYS ;4*4鍵盤矩陣掃描,鍵值(0~F)-->NEWKEY,掃描速率20ms(4.069MHz)DECFSZDEBNCE ;DEBNCE 內容減1RETURNBSFFLAG,DEBNCEO N ;清DEBNCEON 位RETURNSCAN1CALLSAVEPORTS ;存I/O 口值MOVLWB'11101111'MOVWFTEMPD SCANNEXT MOVFRB,W ;讀RB 口值BCFINTCON,RBIF ;清RB 口中斷標志位RRFTEMPD ;TEMPD 內容右移BTFSSSTATUS,C ;是否有進位位?GOTONOKEY ;無,轉NOKEY MOVFTEMPD,W ;有,讀輸出數MOVWFRB ;送RB 口輸出NOPBTFSSINTCON,RBIF ;RB 口電平變化否?GOTOSCANNEXT ;無,轉SCANNEXT BTFSCFLAG,KEYHIT ;有,鍵釋放否?GOTOSKRETURN ;沒有,轉SKRETURN BSFFLAG,KEYHIT ;是,設釋放標志位SWAPFRB,W ;取RB 口數MOVWFTEMPE ;存入TEMPE 寄存器CALLKEYVALUE ;取健值MOVWFNEWKEY ;鍵值存入NEWKEY 寄存器BSFFLAG,SERVKEY BSFFLAG,DEBNCEO N ;設置FLAG 的標志位MOVLW4MOVWFDEBNCE ;裝入消抖動初值SKRETURN CALLRESPORTS ;存儲 I/O 口值RETURN;NOKEY BCFFLAG,KEYHIT ;清KEYHIT 標志位GOTOSKRETURN KEYVALUECLRFTEMPC BTFSSTEMPD,3;檢測第一列GOTOROWVALEND INCFTEMPC BTFSSTEMP,2;檢測第二列GOTOROWVALEND INCFTEMPC BTFSSTEMPD,1;檢測第三列GOTOROWVALEND INCFTEMPC ROWVALENDBTFSSTEMPE ,0;是第一行否?GOTOGETVALCOM ;是,取0,1,2,3BTFSSTEMP ,1;是第二行否?GOTOGET4567;是,取4,5,6,7BTFSS TEMPE ,2;是第三行否?GOTO GET89AB;是,取8,9,A,BGETCDEF BSF TEMPC,2;設置最高位GET89AB BSF TEMPC,3GOTO GETVALCOMGET4567BSF TEMPC,2GETVALCOM MOVF TEMPC,WADDWF PCLRETLW0HRETLW1HRETLW2HRETLW3HRETLW4HRETLW5HRETLW6HRETLW7HRETLW8HRETLW9HRETLW0AHRETLW0BHRETLW0CHRETLW0DHRETLW0EHRETLW0FHSAVEPORTS ;在鍵盤掃描期間保存RA口和RB口狀態MOVF RA,W;讀RA口數值MOVWF PABUF;存入緩沖器CLRF RA;禁止所有的接收MOVF RB,W;讀RB口數值MOVWF PBBUF;存入緩沖器MOVLW0FFH;使RB口全部輸出高電平MOVWF RBBSF STATUS,RP0;選寄存器區1BCF OPTION R,7;RB口弱上拉使能MOVLW B'11110000'MOVWF TRISB;設置RB口高4位輸入,低4位輸出BCF STATUS,RP0;選寄存器區0RETURNRESPORTS ;在鍵盤掃描後恢復RA口和RB口狀態MOVF PBBUF,W;取RB口數值MOVWF RBMOVF PABUF,W;取RA口數值MOVWF RABSF STATUS,RP0BSF OPTION-R,7;關閉RB口弱上拉CLRF TRISA;設置RA口為輸出CLRF TRISB;設置RB口為輸出BCF STATUS,RP0RETURN;DISPLAY MOVF RA,W;送接收數到WCLRF RA;禁止所有數據接收ANDLW0FH;屏蔽高4位MOVWF TEMPC;存接收值到TEMPCBSF TEMPC,4;預置最低顯示數RRF TEMPC;右移取下一位BTFSS STATUS,C;進位位C=1?BCF TEMPC,3;否,重置低顯示位BTF SCTEMPC,0;是否最高位?GOTO UPDATAMSD;是,取最高位值BTFSC TEMPC,1;是否第3位GOTO UPDATA3LED;是,取第3位值BTFSC TEMPC,2;是否第2位GOTO UPDATA2LED;是,取第2位值UPDATALSDMOVF LSDTIME,W;最低數送WANDLW0FH;屏蔽高4位GOTO DISPLAYOUT;數據顯示UPDATA2LEDSWAPF LSDTIME,W;第2位數送WANDLW0FHGOTO DISPLAYOUTUPDATA3LEDMOVF MSDTIME;第3位數送WANDLW0FHGOTO DISPLAYOUTUPDATAMSDSWAPF MSDTIME,W;最高位數送WANDLW0FHDISPLAYOUTCALL LSDTABLE;取段碼值MOVFWF RB;由RB口輸出顯示MOVF TEMPC,W;取接收值送WMOVFWF RARETURN;LEDTABLEADDWF PCL;加偏移量到PC低位RETLW B'00111111';顯示0的段碼RETLW B'00000110';顯示1的段碼RETLW B'01011011';顯示2的段碼RETLW B'01001111';顯示3的段碼RETLW B'01100110';顯示4的段碼RETLW B'01101101';顯示5的段碼RETLW B'01111101';顯示6的段碼RETLW B'00000111';顯示7的段碼RETLW B'01111111';顯示8的段碼RETLW B'01100111';顯示9的段碼RETLW B'01110111';顯示A的段碼RETLW B'00111100';顯示B的段碼RETLW B'00111001';顯示C的段碼RETLW B'01011110';顯示D的段碼RETLW B'01111001';顯示E的段碼RETLW B'01110001';顯示F的段碼;INAD MOVLW B'11000000';選內部RC振蕩MOVWF ADCON0RETURN;SAMPLEADCALL SAVEPORTSCALL DOAD;進行A/D轉換ADDONE BTFSC ADCON0,2;A/D轉換完否GOTO ADDONE;沒完則循環等待BSF FLAG,ADOVER;設置A/D溢出標志CALL RESPORTS;恢復I/O口狀態RETURN;DOAD CLRF RB;滅LED顯示BSF STATUS,RP0MOVLW0FHMOVWF TRISA;設置RA口低4位輸入BCF STATUS,RP0BSF ADCON0,0;啟動A/DMOVLW0.125CALL WAIT;等待BSF ADCON0,2;置A/D結束標志RETURN;WAIT MOVWFNEXT DECFSZGOTORETURN;B2-BCD BCF STATUS,0;清進位位MOVLW0.16MOVWF COUNT;設計數器初值CLRF R0CLRF R1CLRF R2LOOP16RLF L-BYTERLF H-BYTERLF R2RLF R1RLF R0DECFSZ COUNTGOTO ADJDEC;十進制轉BCD碼RETLW0;ADJDEC MOVLW R2MOVWF FSRCALL ADJBCD;調轉BCD碼子程序;MOVLW R1MOVWF FSRCALL ADJBCD;調轉BCD碼子程序;MOVLW R0MOVWF FSRCALL ADJBCD;調轉BCD碼子程序;GOTO LOOP16;ADJBCD MOVLW3ADDWF INDF,WMOVWF TEMPBTFSC TEMP,3;測試低4位結果>7否?MOVWF INDFMOVLW30ADDWF INDF,WMOVWF TEMPBTFSC TEMP,7;測試高4位結果>7否?MOVWF INDFRETLW0;END。

pic汇编语言格式

pic汇编语言格式

X EQU 10

MOVLW 1
MOVWF X
;1→X(F10),作为初值
LOOP

MOVLW 1
SUBWF X,0
BTFSS STATUS,Z ;X=1 否?
GOTO LOOP
;X=1 继续循环

;X≠1 跳出循环
8) 查表程序
查表是程序中经常用到的一种操作。下例是将十进制 0~9 转换成 7 段 LED 数字显示值。
一般来说,PIC 的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但
这里我们推荐一种清晰明了的格式供参考。
TITLE This is …… ;程序标题
;--------------------------------------
;名称定义和变量定义
;--------------------------------------
下面以“IF X=Y THEN GOTO NEXT”格式为例。
MOVF X,0
;X→W
SUBWF Y,0
;Y—W(X)→W
BTFSC STATUS,Z ;X=Y 否
GOTO NEXT
;X=Y,跳到 NEXT 去执行。

;X≠Y
6)“FOR……NEXT”格式的程序
“FOR……NEXT”程序使循环在某个范围内进行。下例是“FOR X=0 TO 5”格式的程序。
PIC 单片机汇编语言编程基础
1、程序的基本格式
先介绍二条伪指令:
EQU ——标号赋值伪指令
ORG ——地址定义伪指令
PIC16C5X 在 RESET 后指令计算器 PC 被置为全“1”,所以 PIC16C5X 几种型号芯片的复

PIC单片机汇编语言基础

PIC单片机汇编语言基础
2、程序设计基础
1)设置I/O口的输入/输出方向
PIC16C5X勺I/O口皆为双向可编程,即每一根I/O端线都可分 别单独地由程序设置为输入或输出。这个过程由写I/O控制寄存器TRIS f来实现,写入值为“1”,则为输入;写入值为“0”,则为 输出。
MOVLW 0FH ; 0000 1111 (0FH
TITLE This is ……;程序标题

;名称定义和变量定义
;
F0EQU0
RTCCEQU1
PCEQU2
STATUSEQU3
RBEQU 6
RБайду номын сангаасEQU 7
1:
PIC16C54 EQU 1FFH;芯片复位地址
PIC16C56 EQU 3FFH
PIC16C57 EQU 7FFH

ORG PIC16C54 GOTO MAIN;在复位地址处转入主程序
ORG 0;在0000H开始存放程序

;子程序区

DELAY MOVLW 255
1:
RETLW 0

;主程序区

MAIN
MOVLW B00000000'
LOOP
BSF RB 7 CALL DELAY
BCF RB 7 CALL DELAY
1:
GOTO LOOP

END;程序结束
注:MAIN标号一定要处在0页面内。
PIC
1、程序的基本格式
先介绍二条伪指令:
EQU——标号赋值伪指令
OR-一地址定义伪指令
PIC16C5X在RESET后指令计算器PC被置为全“1”,所以
PIC16C5XJI种型号芯片的复位地址为:

PIC汇编语言指令

PIC汇编语言指令

PIC 8位单片机共有三个级别,有相对应的指令集。

基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。

其指令向下兼容。

一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。

1标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。

在程序汇编时,已赋以指令存储器地址的具体数值。

汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。

标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。

在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。

指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。

书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。

再有标号不能用操作码助记符和寄存器的代号表示。

标号也可以单独占一行。

2操作码助记符该字段是指令的必选项。

该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。

3操作数由操作数的数据值或以符号表示的数据或地址值组成。

若操作数有两个,则两个操作数之间用逗号(,)分开。

当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。

还可以是被定义过的标号、字符串和ASCⅡ码等。

具体表示时,规定在二进制数前冠以字母“B”,例如B;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。

单片机编程之汇编语言基础-PIC单片机汇编指令

单片机编程之汇编语言基础-PIC单片机汇编指令

单片机编程之汇编语言基础-PIC单片机汇编指令1、程序的基本格式先介绍二条伪指令:EQU 标号赋值伪指令ORG 地址定义伪指令PIC16C5X在RESET后指令计算器PC被置为全1,所以PIC16C5X几种型号芯片的复位地址为:PIC16C54/55:1FFHPIC16C56:3FFHPIC16C57/58:7FFH一般来说,PIC的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。

但这里我们推荐一种清晰明了的格式供参考。

TITLE This is ;程序标题;--------------------------------------;名称定义和变量定义;--------------------------------------F0 EQU 0RTCC EQU 1PC EQU 2STATUS EQU 3FSR EQU 4RA EQU 5RB EQU 6RC EQU 7┋PIC16C54 EQU 1FFH ;芯片复位地址PIC16C56 EQU 3FFHPIC16C57 EQU 7FFH;-----------------------------------------ORG PIC16C54 GOTO MAIN ;在复位地址处转入主程序ORG 0 ;在0000H开始存放程序;-----------------------------------------;子程序区;-----------------------------------------DELAY MOVLW 255┋RETLW 0;------------------------------------------;主程序区;------------------------------------------MAINMOVLW B00000000TRIS RB ;RB已由伪指令定义为6,即B口┋LOOPBSF RB,7 CALL DELAYBCF RB,7 CALL DELAY┋GOTO LOOP;-------------------------------------------END ;程序结束注:MAIN标号一定要处在0页面内。

PIC指令详解

PIC指令详解

中档PIC单片机汇编指令详解-----老罗整理NOP 空操作指令语法形式:NOP操作数:无执行时间:一个指令周期执行过程:除了消耗一个指令周期之外,无任何其他影响,所以通常被用来作为延时使用状态标志影响:无说明:指令操作没有任何操作数参与,也不影响任何寄存器的内容和状态,所以通常都是被作为延时使用的。

指令范例:BSF PORTB,0 ;PORTB的第0位输出高电平(1)NOP ;延时,使电平稳定MOVWF 将W寄存器的内容传送到数据寄存器语法形式:MOVWF f操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:把W寄存器的内容传送到f数据寄存器,W寄存器的内容保持不变,类似于Copy状态标志影响:无说明:该指令是对数据寄存器赋值的主要方式指令范例:MOVLW 0x55 ;W寄存器赋值MOVWF Data ;W寄存器值传送给Data;此时Data=0x55CLRW W寄存器内容清0语法形式:CLRW操作数:无执行时间:一个指令周期执行过程:0x00→W1→Z状态标志影响:Z说明:该指令对W寄存器内容清零,并置位0标志Z另外使用MOVLW 0x00也可以使W寄存器内容为0,但是这条指令不影响0标志Z 指令范例:CLRW ;W=0,Z=1CLRF 数据寄存器内容清零语法形式:CLRF f操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:0x00→f1→Z状态标志影响:Z说明:指令对数据寄存器清零,并置位0标志Z指令范例:CLRF TRISB ;端口B所有I/O引脚设为输出SUBWF 将数据寄存器的内容减去W寄存器内容语法形式:SUBWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器内容不变当d=W时,结果放在W寄存器中,数据寄存器f内容不变执行时间:一个指令周期执行过程:【f】-【W】→d状态标志影响:Z DC C说明:要特别注意W寄存器在这条指令中是减数当【f】=【W】时,相减的结果为0,则Z=1当【f】>【W】时,没有借位发生,则C=1当【f】<【W】时,有借位发生,则C=0实际上在PIC单片机中这条指令是通过先对W寄存器的内容求补码,然后与被减数相加,所以在判断是否有借位时和其他单片机不同,请注意指令范例:MOVLW 0x23 ;W=0x23MOVWF tmp ;tmp=0x23MOVLW 0x32 ;W=0x32SUBWF tmp,W ;tmp-W将结果存入W中,W=0xF1,tmp=0x23;过程:tmp=0x23,W求补码为0xCD,所以0x23+0xCD=0xF1,又因tmp<W,所以C=0DECF 数据寄存器的内容递减1语法形式:DECF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,f数据寄存器自减1当d=W时,结果放在W寄存器中,W寄存器内容自减1执行时间:一个指令周期执行过程:【f】-1→d状态标志影响:Z说明:该指令对数据寄存器的内容做减1运算。

PIC16系列单片机常用伪指令(汇编)

PIC16系列单片机常用伪指令(汇编)

PIC 单片机端口电平变化中断使用必须注意的问题PICC18使用说明PIC 单片机常用伪指令PIC单片机2009-02-19 11:16:40 阅读8 评论0 字号:大中小订阅3.2.3 MPASM 的伪指令我们在第一章中已经详细介绍了中档PIC 单片机的35 条指令,源程序的编写主要就是用这些基本的指令实现你的控制任务。

但为了增加源程序的可读性和可维护性,我们引入了伪指令的概念。

伪指令本身不会产生可执行的汇编指令,但它们可以帮组“管理”你编写的程序,其实用性和必要性绝不亚于35 条正真的汇编指令。

我们在此着重介绍最常用的几种伪指令。

#include 或include#include 伪指令的作用是把另外一个文件的内容全部包含复制到本伪指令所在的位置。

被包含复制的文件可以是任何形式的文本文件,当然文件中的内容和语法结构必须是MPASM 能够识别的。

最经常被“include”的是针对PIC 单片机内部特殊功能寄存器定义的包含头文件,在MPLAB 安装后它们全部放在路径“ C:\Program Files\MPLAB IDE\MCHIP_Tools”下,每一个型号的PIC 单片机都有一个对应的预定义包含头文件,扩展名是“.inc”。

除了一些符号预定义文件,你也可以把现有的其它程序文件作为一个代码模块直接“包含”进来作为自己程序的一部分。

见例3-01。

#include <p16f877a.inc> ;把预定义的PIC16F877A 寄存器符号包含到此处#include ”math.asm” ;把现有的程序文件包含进来作为自己代码的一部分例3-01请注意被包含文件的引用方式。

一种是<>尖括号引用,这种引用意味着让编译器去默认的路径下寻找该文件,MPASM 默认的寄存器预定义文件存放路径即为上面提及的MPLAB 安装后的目录;另一种是””双引号引用,这种引用方式的意思是指示编译器从引号中指定的全程文件路径下寻找该文件。

PIC16程序设计及应用[1]

PIC16程序设计及应用[1]

PIC16程序设计及应用PIC16程序设计及应用引言PIC16是一种微控制器,它在嵌入式系统中有着广泛的应用。

本文将介绍PIC16程序设计的基本知识和应用场景,帮助读者了解和掌握PIC16的编程技巧和应用方法。

本文将以Markdown文本格式输出,方便读者阅读和理解。

什么是PIC16PIC16是微芯科技(Microchip Technology)推出的一种8位微控制器。

它具有低功耗、高性能和丰富的外设特性,适用于各种嵌入式应用中。

PIC16微控制器可以通过编程实现各种功能,如数据采集、通信、控制等。

因此,学习PIC16程序设计具有重要的意义。

PIC16程序设计基础1. 开发环境搭建在开始PIC16程序设计之前,我们需要搭建PIC16的开发环境。

首先,我们需要安装MPLAB X IDE(Integrated Development Environment),这是用于PIC16开发的集成开发环境。

其次,我们需要选择合适的编译器和调试工具。

最常用的编译器是XC8,它支持C语言编程。

调试工具可以使用MPLAB ICD等。

安装好开发环境后,我们可以开始编写程序了。

2. 程序结构每个PIC16程序都需要遵循一定的程序结构。

一个典型的PIC16程序包含以下几个部分:- 引用库文件:包含一些常用的库文件,以便在编程中使用预定义的函数和变量。

- 定义引脚:定义用于输入输出的引脚。

- 初始化:进行一些初始化工作,如配置引脚功能、初始化外设等。

- 主函数:程序的入口,包含了程序的主要逻辑。

- 中断处理函数(可选):处理来自外部的中断信号。

3. 常用函数和指令PIC16的编程主要使用C语言进行。

在编程过程中,我们会使用到一些常用的函数和指令,如GPIO控制、定时器操作、串口通信等。

这些函数和指令可以通过引用库文件进行调用。

以下是一些常用的函数和指令示例:```cinclude <pic16.h>void mn(){TRISB0 = 0; // 将B0引脚设置为输出PORTB0 = 1; // 将B0引脚输出高电平}```4. 调试和仿真在PIC16程序开发过程中,调试和仿真是非常重要的环节。

指令PIC的指令详解

指令PIC的指令详解

指令PIC的指令详解伪指令#include p16f877a.inclist p=16f877a,r=dec__config__idlocs(用户利用它存放程序版本或日期等) __idlocs 0x1234errorlevel 0,-302,-305 (编译信息输出显示等级及对对某些信息的单独设定)#define/#undefine #define KEY1 PORTB,7equ w_temp equ 0x20cblock+endc: cblock 0x20 w_temp buffer:8 var1 endcorg 0x00dt(定义表格数据代替retlw)table addwf pcl,fdt 0dt 1,2,'3';retlw 1 ;retlw 2;retlw 0x33('3')dt "abc" ;retlw 'a' ;retlw 'b';retlw 'c'de(源程序中定义片内eeprom的初值其实地址0x2100) org 0x2100de 0,1,2,3de "ABCD";定义8个字节fill(填充程序空间) fill 0x0000,5fill (goto $),next_bloclk-$ (从当前填充至标号next)死循环end宏指令banksel、pagesel、bankisel、clrc、setc、clrz、setz、clrdc、setdc、skpc、skpnc、skpdc、skpndc、bc、bnc、bz、bnz、bdc、bndcmacro自定义宏1.ADD LITERAL TO WADDLW K (W)+K->W加立即数至W ADDLW 0X15W=0X10->0X252.ADD W TO FADDWF F,D ((W)+(F)->W/F)ADDWF REG1,0 ADDWF FSR,13.ADD W AND CARRY D TO F ADDWFC F,DADDWFC FSR,1 (W+FSR+C->FSR)4.AND LITERAL AND WANDLW KANDLW 0x5F((W)并0x5F->W)5.AND W WITH FANDWF F,DANDWF FSR 1 (W并FSR->W/F)6.BIT CLEAR FBCF F,BBCF FLAG_REG,7 将FLAG_REG的D7清0 7.BIT SET FBSF F,BBSF PROTA,0 PROTA的D0置18.BIT TEST,SKIP IF CLEARBTFSC F,BBTFSC FLAG,1 FALSE TRUE位测试 0跳转9.BIT TEST,SKIP IF SETBTFSS F,BBTFSS FLAG,1 FALSE TRUE位测试 1跳转10.BIT TOGGLE FBTG F,BBTG PROTC,4 位取反 PORTC=0111 0101->0110 010111.SUBROUTINE CALLCALL 调用子程序12.CLEAR FCLRF FLAG_REG (F清零置Z=1)13.CLEAR W REGISTERCLRW (W清零置Z=1)14.CLEAR WATCHDOG TIMERCLRWDT(监视定时器清零00h->WDT 0->WDT预定标器1->TO' 1->PD')/doc/945763018.html,PLEMENT FCOMF REG1,0(寄存器内容取反->W/F)/doc/945763018.html,PARE F WITH W,SHIP IF F=WCPFSEQ REG/doc/945763018.html,PARE F WITH W,SHIP IF F>WCPFSGT REG/doc/945763018.html,PARE F WITH W,SHIP IF F<wCPFSLT REG19.DECIMAL ADJUST W REGISTERDAW REG1,0 (对F中内容进行10进制调整->F/W+F)REG1=0XA5 C=0 DC=0->0X05 C=1 DC=020.DECREMENT FDECF CNT,1(寄存器内容减1->W/F)21.DECREMENT F,SHIP IF 0DECFSZ CNT,1GOTO ...CONTINUE ...(减1后为0跳转至CONTINUE)22.DECREMENT F,SHIO IF NOT 0DECFSNZ CNT,0GOTO ...CONTINUE ...(减1后不为0跳转至CONTINUE)23.UNCONDITIONAL BRANCHGOTO 地址24.INCREMENT FINCF CNT,1(指令加1)CNT=0XFF Z=0 ->CNT=0X00 Z=1 C=125.INCREMENT F,SHIP IF 0INCFSZ F,D26.INCREMENT F,SHIP IF NOT 0INCFSNZ F,D27.INCLUSIVE OR LITERAL WITH WIORLW 0X35((W)或0X35->W)28.INCLUSIVE OR W WITH FIORWF RESULT,1 ((W)或RESULT->RESULT)29.LONG CALL 长调用指令和CALL有区别MOVLW HIGH 高位地址MOVPF WREG,PCLATH 存放在PCLATH中LCALL LOW 调用子程序(指令只含低8位地址)30.MOVE FMOVF REG,0 ((REG)->W)</w31.MOVE F TO PMOVFP F,P (F:00H-FFH P:00H-1FH)MOVFP REG1,REG2把数据存储单元传至某外围接口寄存器内容32.MOVE LITERAL TO LOW NIBBLE IN BSRMOVLB 0XA5 BSR=0X22->0X25(传立即数至BSR寄存器低4位高4位为0)33.MOVE LITERAL TO HIGH NIBBLE IN BSRMOVLR 5 BSR=0X22->0X52 (传至高4位低4位为0)34.MOVE LITERAL TO WMOVLW 0X5A W=0X5A (立即数传至W)35.MOVE P TO FMOVPF REG1,REG2 (F:00H-FFH P:00H-1FH)把某外围接口寄存器内容传至数据存储单元36.MOVE W TO FMOVWF REG ((W)->REG)37.NEGATE WNEGW REG 0 (REG取反->F/F+W)取反的规则P25138.NO OPERATIONNOP无操作占用一个指令周期 PC+139.LOAD OPTION REGISTER(W)->OPTION 只为可移植至PIC16C6X 不建议使用40.RETURN FROM INTERRUPTRETFIETOS->PC 1->GIE (中断允许位GIE开放中断)指令周期241.RETURN LITERAL TO WRETLW KK->W TOS->PC(立即数传至W 并返回地址至PC)指令周期2CALL TABLETABLE ADDWF PCRETLW K1RETLW K2...RETLW KN->W=0X07->W=K742.RETURN FROM SUBROUTINERETURN (TOS->PC 指令周期2)43.ROTATE LEFT F THROUGH CARRYRLF F,D/RLCF F,DF(N)->D(N+1) F(7)->C C->D(0)RLF REG1,0REG1=1110 0110->1110 0110 C=0->1 W=1100 110044.ROTATE LEFT F NO CARRYRLNCF F,D无进位循环左移45.ROTATE RIGHT F THROUGH CARRYRRF F,D/RRCF F,DRRF REG1,0REG1=1110 0110->1110 0110 C=1->0 W=0111 001146.ROTATE RIGHT F NO CARRYRRNCF F,D无进位循环右移47.SET FSETF F,SSETF REG,0WREG=0X05->0XFF REG=0XDA->0XFF48.SLEEPOOH->WDT 0->WDT预分频器 1->TO'(定时时间) 0->PD'掉电状态49.SUBTRACT W FROM LITERALSUBLW KK-(W)->WMOVLW 01HSUBLW 02H W=01H C=1结果为正MOVLW 02HSUBLW 02H W=0 C=1结果为0MOVLW 02HSUBLW 01H W=FF C=0结果为负50.SUBTRACT W FROM FSUBWF F,DMOVLW 3MOVWF REG1MOVLW 2SUBWF REG1,0 W=1 C=1MOVLW 2MOVWF REG1MOVLW 2SUBWF REG1,0 W=0 C=1MOVLW 2MOVWF REG1MOVLW 3SUBWF REG1,0 W=FF C=051.SUBTRACT W FROM F WITH BORROW SUBWFB F,D(F)-(W)-C->F/W带借位F-W减法MOVLW 4MOVWF REG1MOVWF REG1MOVLW 2SUBWFB REG1,0 设C初始为1 则W=1 C=152.SWAP FSWAPF F,DSWAPF REG1,1REG1=0XA5->0XA5 W=0X5A REG1=0X5A53.TABLE READTABLRD T,I,FTABLRD 1,1,REGREG=OX53->0XAA TBLATH=0XAA->0X12 TBLATL=0X55->0X34 TBLPTR=0XA356->0XA3567 存储单元=0X1234->0X5678传高字节TBLAT中一个字节传至F T=0传高字节T=1传低字节;TBLPTR 指向的程序存储单元内容传至表锁存器TBLAT;I=1 TBLPTR+1 I=0 TBLPTR不变存储单元的值为何改变周期2 若F=PC则3周期54.TABLE WRITETABWT T,I,FTABWT 0,1,REGREG=0X53->0X53 TBLATH=0XAA->0X53 TBLATL=0X55->0X55TBLPTR=0XA356->0XA357存储单元=0XFFFF->0X5355F值传至16为TBLAT表锁存器 T=0传低字节 T=1传至高字节;TBLAT内容写入TBLPTR指向的程序存储器单元;I=1 TBLPTR+1 I=0 TBLPTR不变指令周期2若F=PC 这周期355.TABLE LATCH READTLRD T,F 表锁存读TBLATH=0X00 TBLATL=0XAF T=0 RAM=0XAF TBLATH=0X00 TBLATL=0XAF56.TABLE LATCH WRITETLWT T,F 表锁存写RAM=0XB7 TBLATH=0X00 TBLATL=0X00 T=0 RAM=0XB7 TBLATH=0X00 TBLATL=0XB757.LOAD TRIS REGISTER I/O 控制寄存器TRIS设置指令不建议使用58.TEST F,SKIP IF 0TSTFSZ CNT F等于0跳转GOTO ...(CNT!=0)ZERO (CNT==0)59.EXCLUSIVE OR LITERAL WITH WXORLW K (W)异或K->WXORLW 0XAFW=0XB5->0X1A60.EXCLUSIVE OR W WITH FXORWF F D (W)异或(F)->(W)(F)XORWF REG1,1W=0XB5->0XB5 REG1=0XAF->0X1A直观助记符:BCF 3,0(进位位C清零)=CLRCBSF 3,0(进位位C置1)=SETCCLRDC BCF 3,1SETDC BSF 3,1CLRZ BCF 3,2SETZ BSF 3,2SKPC(有进位间跳)=BTFSS 3,0SKPNC(无进位间跳)=BTFSC 3,0SKPDC BTFSS 3,1SKPNDC BTFSC 3,1SKPZ BTFSS 3,2SKPNZ BTFSC 3,2 影响ZTSTF F(测试寄存器是否全零)=MOVF F,1 影响ZMOVFW F((F)->W) MOVF F,0 影响ZNEGF F,D取补码 COMF F,1 影响ZADDCF F,D内容加进位 BTFSC 3,0 影响Z 为0跳转INCF F,DSUBCF F,D内容减进位 BTFSC 3,0DECF F,DADDDCF F,D BTFSC 3,1INCF F,DSUBDCF F,D BTFSC 3,1DECF F,DB K 无条件转移 GOTO KBC K 有进位转移 BTFSC 3,0GOTO KBNC K 无进位转移 BTFSS 3,0GOTO KBDC K BTFSC 3,1GOTO KBNDC K BTFSS 3,1GOTO KBZ K BTFSC 3,2GOTO KBNZ K BTFSS 3,2GOTO K清零CLRW CLRF CLRWDT算术运算ADDLW K ADDWF F,D SUBLW K SUBWF F,D DECFF,D INCF F,D逻辑运算ANDLW K ANDWF F,D IORLW K或IORWF F,D XORLW K异或 XORWF F,D RLF F,D RRF F,DMOVLW K MOVF F,D MOVWF F NOP半字节交换指令SWAPF F,D可用于中断现场保护:MOVF W-TEMP SWAPF STATUS,W MOVWF S-TEMP-->SWAPF S-TEMP,W SWAPF STATUS,W SWAPF W-TEMP,W(W置于后一操作数?)子程序调用CALL GOTO跳转(CALL都是无返回值的?CALL的子程序都是无参数?)取反COMF F,DDECFSZ F,D INCFSZ F,D位操作BSF F,B BCF F,B BTFSS F,B BTFSC F,B返回RETLW K RETURN SLEEP RETFIE(RETURN FROM INTERRUPT WITH ENABLE)懒得算延时:3XY+4X+5(x外循环Y内循环)255-->19610020mhz 0.05us T=0.2us1、程序的基本格式先介绍二条伪指令:EQU ——标号赋值伪指令ORG ——地址定义伪指令PIC16C5X在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为:PIC16C54/55:1FFHPIC16C56:3FFHPIC16C57/58:7FFH一般来说,PIC的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。

PIC16CXX指令系统

PIC16CXX指令系统

PIC16CXX指令系统
PIC16CXX每条指令长14位,指令由操作码和操作数组成。

PIC16CXX共有35条指令,由操作对象可分为:
1. 面向字节操作类
2. 面向位操作类
3. 常数操作和控制类操作。

全部指令如图所示。

注:(1)PIC16CXX有35条基本指令及二条附加指令,即TRIS和OPTION。

在PIC16CXX中TRIS和OPTION 寄存器是直接可寻址的,所以不必用这二条指令,保留它们只是为了和PIC16C5X向上兼容,即便于PIC16C5X 代码向PIC16CXX的移植,见下节指令详介。

(2)对I/O寄存器操作的指令,如"MOVF 6,1",使用的F6(RB口)的值是RB口脚上的状态值,而非输出锁存器的值。

(3)"f"代表寄存器,"d"代表目的寄存器,当d=0,操作结果放入W寄存器,d=1,则结果放入f寄存器。

"b"代表位(0~7),K代表一个8位或11位的常数。

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011.txt遇事潇洒一点,看世糊涂一点。

相亲是经销,恋爱叫直销,抛绣球招亲则为围标。

没有准备请不要开始,没有能力请不要承诺。

爱情这东西,没得到可能是缺憾,不表白就会有遗憾,可是如果自不量力,就只能抱憾了。

当D不写时默认是放到F中吗?好像是.更新:1,PIC16没有同或指令;面向字节ADDWF F,D ;寄存器加法指令,F+W→D 影响C,DC,Z 进位C为1表示有进位INCF F,D ;寄存器加1指令F+1→DSUBWF F,D ;减法指令F-W→D 影响C,DC,Z 进位C为0表示有借位.则F<W 那么W等于多少呢?DECF F,D ;寄存器减1指令F-1→D 影响ZANDWF F,D ;F里的内容和W里的内容相与结果存入F(d=1)或(d=0),F∧W→d,影响Z 不带进位的加法,在PIC18系列中才有带进位加法指令.IORWF F,D ;F内容和W内容相或,F∨W→d,影响ZXORWF F,D ;F内容与W内容异或F⊕W→D, 位异或,影响Z位即是只要相异就为真0⊕1=1和1异或则取反0⊕0=0和0异或则保持不变1⊕1=01⊕0=1面向常数ADDLW K ;常数加法指令,8位立即数和W内容相加,结果存入W K+W→W,影响C,DC,ZSUBLW K ;8位立即数减掉W内容,存入W, K-W→W,影响C,DC,ZANDLW K ;常数逻辑与K∧W→W 影响ZIORLW K ;常数逻辑或K∨W→W 影响ZXORLW K ;常数逻辑异或K⊕W→W 影响ZCLRW ;寄存器W被清零CLRWDT ;看门狗定时器清零(若已赋值,同时清零预分频器)CLRF F ;寄存器F清零指令BCF F,b ;把寄存器F的第b位清零 Bit Clear FMOVLW K ;传送立即数(或常数,标号)至工作寄存器W MOVE Literal to WTRIS F ;把W的内容送I/O口控制寄存器F Load TRIS Register ;好像没有这个指令;MOVWF ;是MOVE W的内容TO F,(W内容保持不变),如MOVWF 6 (F6表示RB口) 不影响状态位.MOVF F,D ;D=0,F内容送W. D=1,F内容送寄存器影响ZNOP ;空操作,PC加1,占用一个机器周期GOTO K ;无条件跳转指令,将指令转移到指定地址,“K"常与程序中的标号联系起来。

指令PIC的指令详解

指令PIC的指令详解

伪指令#‎i nclu‎d e p1‎6f877‎a.inc‎list‎p=16‎f877a‎,r=de‎c__c‎o nfig‎__id‎l ocs(‎用户利用它‎存放程序版‎本或日期等‎) __i‎d locs‎0x12‎34er‎r orle‎v el 0‎,-302‎,-305‎(编译信‎息输出显示‎等级及对对‎某些信息的‎单独设定)‎#def‎i ne/#‎u ndef‎i ne #‎d efin‎e KEY‎1 POR‎T B,7‎e qu w‎_temp‎equ ‎0x20‎c bloc‎k+end‎c: cb‎l ock ‎0x20 ‎w_tem‎p buf‎f er:8‎var1‎endc‎org ‎0x00‎d t(定义‎表格数据‎代替ret‎l w)ta‎b le ‎a ddwf‎pcl,‎f‎dt ‎0‎dt ‎1,2,'‎3';re‎t lw 1‎‎‎‎;retl‎w 2‎‎‎ ;re‎t lw 0‎x33('‎3')‎d‎t"ab‎c" ;‎r etlw‎'a' ‎‎‎ ;r‎e tlw ‎'b'‎‎‎ ;re‎t lw '‎c'de‎(源程序中‎定义片内e‎e prom‎的初值其‎实地址0x‎2100)‎org ‎0x210‎0‎d‎e 0,‎1,2,3‎‎de ‎"ABC‎D";定义‎8个字节‎f ill(‎填充程序空‎间) fi‎l l 0x‎0000,‎5‎fill‎(got‎o $),‎n ext_‎b locl‎k-$ (‎从当前填充‎至标号ne‎x t)死循‎环end‎宏指令‎bank‎s el、p‎a gese‎l、ban‎k isel‎、clrc‎、setc‎、clrz‎、setz‎、clrd‎c、set‎d c、sk‎p c、sk‎p nc、s‎k pdc、‎s kpnd‎c、bc、‎b nc、b‎z、bnz‎、bdc、‎b ndc‎m acro‎自定义宏‎1.AD‎D LIT‎E RAL ‎T O W‎A DDLW‎K (W‎)+K->‎W加立即数‎至WAD‎D LW 0‎X15W‎=0X10‎->0X2‎52.A‎D D W ‎T O F‎A DDWF‎F,D ‎((W)+‎(F)->‎W/F)‎A DDWF‎REG1‎,0 AD‎D WF F‎S R,1‎3.ADD‎W AN‎D CAR‎R Y D ‎T O F‎A DDWF‎C F,D‎ADDW‎F C FS‎R,1 (‎W+FSR‎+C->F‎S R)4‎.AND ‎L ITER‎A L AN‎D WA‎N DLW ‎KAND‎L W 0x‎5F((W‎)并0x5‎F->W)‎5.AN‎D W W‎I TH F‎ANDW‎F F,D‎ANDW‎F FSR‎1 (W‎并FSR-‎>W/F)‎6.BI‎T CLE‎A R F‎B CF F‎,BBC‎F FLA‎G_REG‎,7 将F‎L AG_R‎E G的D7‎清07.‎B IT S‎E T F‎B SF F‎,BBS‎F PRO‎T A,0 ‎ PRO‎T A的D0‎置18‎.BIT ‎T EST,‎S KIP ‎I F CL‎E ARB‎T FSC ‎F,BB‎T FSC ‎F LAG,‎1 FAL‎S E TR‎U E位测试‎0跳转‎9.BIT‎TEST‎,SKIP‎IF S‎E TBT‎F SS F‎,BBT‎F SS F‎L AG,1‎FALS‎E TRU‎E位测试‎1跳转1‎0.BIT‎TOGG‎L E F‎B TG F‎,BBT‎G PRO‎T C,4 ‎位取反 P‎O RTC=‎0111 ‎0101-‎>0110‎0101‎11.S‎U BROU‎T INE ‎C ALL‎C ALL ‎调用子程序‎12.C‎L EAR ‎FCLR‎F FLA‎G_REG‎(F清零‎置Z=1‎)13.‎C LEAR‎W RE‎G ISTE‎RCLR‎W (W清‎零置Z=‎1)14‎.CLEA‎R WAT‎C HDOG‎TIME‎RCLR‎W DT(监‎视定时器清‎零 00h‎->WDT‎0->W‎D T预定标‎器 1->‎T O' 1‎->PD'‎) 15.‎C OMPL‎E MENT‎FCO‎M F RE‎G1,0(‎寄存器内容‎取反->W‎/F)1‎‎P ARE ‎F WIT‎H W,S‎H IP I‎F F=W‎CPF‎S EQ ‎R EG1‎‎P ARE ‎F WIT‎H W,S‎H IP I‎F F>W‎CPFS‎G T RE‎G18.‎C OMPA‎R E F ‎W ITH ‎W,SHI‎P IF ‎F<WC‎P FSLT‎REG‎19.DE‎C IMAL‎ADJU‎S T W ‎R EGIS‎T ER‎D AW R‎E G1,0‎(对F中‎内容进行1‎0进制调整‎->F/W‎+F)R‎E G1=0‎X A5 C‎=0 DC‎=0->0‎X05 C‎=1 DC‎=020‎.DECR‎E MENT‎FDE‎C F CN‎T,1(寄‎存器内容减‎1->W/‎F)21‎.DECR‎E MENT‎F,SH‎I P IF‎0DE‎C FSZ ‎C NT,1‎GOTO‎...‎C ONTI‎N UE .‎..(减1‎后为0跳转‎至CONT‎I NUE)‎22.D‎E CREM‎E NT F‎,SHIO‎IF N‎O T 0‎D ECFS‎N Z CN‎T,0G‎O TO .‎..CO‎N TINU‎E ...‎(减1后不‎为0跳转至‎C ONTI‎N UE)‎23.UN‎C ONDI‎T IONA‎L BRA‎N CH24.‎I NCRE‎M ENT ‎FINC‎F CNT‎,1(指令‎加1)C‎N T=0X‎F F Z=‎0 ->C‎N T=0X‎00 Z=‎1 C=1‎25.I‎N CREM‎E NT F‎,SHIP‎IF 0‎INCF‎S Z F,‎D26.‎I NCRE‎M ENT ‎F,SHI‎P IF ‎N OT 0‎INCF‎S NZ F‎,D27‎.INCL‎U SIVE‎OR L‎I TERA‎L WIT‎H WI‎O RLW ‎0X35(‎(W)或0‎X35->‎W)28‎.INCL‎U SIVE‎OR W‎WITH‎FIO‎R WF R‎E SULT‎,1 ((‎W)或RE‎S ULT-‎>RESU‎L T)2‎9.LON‎G CAL‎L长调用‎指令??‎?和CAL‎L有区别?‎??MO‎V LW H‎I GH 高‎位地址M‎O VPF ‎W REG,‎P CLAT‎H存放在‎P CLAT‎H中LC‎A LL L‎O W 调用‎子程序(指‎令只含低8‎位地址)‎30.MO‎V E F‎M OVF ‎R EG,0‎((RE‎G)->W‎)31.‎M OVE ‎F TO ‎PMOV‎F P F,‎P (F:‎00H-F‎F H P:‎00H-1‎F H)M‎O VFP ‎R EG1,‎R EG2‎把数据存储‎单元传至某‎外围接口寄‎存器内容‎32.MO‎V E LI‎T ERAL‎TO L‎O W NI‎B BLE ‎I N BS‎RMOV‎L B 0X‎A5 BS‎R=0X2‎2->0X‎25(传立‎即数至BS‎R寄存器低‎4位高4‎位为0) ‎33.MO‎V E LI‎T ERAL‎TO H‎I GH N‎I BBLE‎IN B‎S RMO‎V LR 5‎BSR=‎0X22-‎>0X52‎(传至高‎4位低4‎位为0)‎34.MO‎V E LI‎T ERAL‎TO W‎MOVL‎W 0X5‎A W=0‎X5A (‎立即数传至‎W)35‎.MOVE‎P TO‎FMO‎V PF R‎E G1,R‎E G2 ‎(F:00‎H-FFH‎P:00‎H-1FH‎)把某外‎围接口寄存‎器内容传至‎数据存储单‎元36.‎M OVE ‎W TO ‎FMOV‎W F RE‎G ((W‎)->RE‎G)37‎.NEGA‎T E W‎N EGW ‎R EG 0‎(REG‎取反->F‎/F+W)‎取反的规则‎???P2‎5138‎.NO O‎P ERAT‎I ONN‎O P无操‎作占用一‎个指令周期‎PC+1‎39.L‎O AD O‎P TION‎REGI‎S TER‎(W)->‎O PTIO‎N只为可‎移植至PI‎C16C6‎X不建议‎使用40‎.RETU‎R N FR‎O M IN‎T ERRU‎P TRE‎T FIE ‎TOS-‎>PC 1‎->GIE‎(中断允‎许位GIE‎开放中断)‎指令周期2‎41.R‎E TURN‎LITE‎R AL T‎O WK->‎W TOS‎->PC(‎立即数传至‎W并返回‎地址至PC‎)指令周期‎2 CA‎L L TA‎B LET‎A BLE ‎ ADD‎W F PC‎RET‎L W K1‎RET‎L W K2‎...‎RET‎L W KN‎->W=‎0X07-‎>W=K7‎?‎42.R‎E TURN‎FROM‎SUBR‎O UTIN‎ERET‎U RN (‎T OS->‎P C 指令‎周期2)‎43.RO‎T ATE ‎L EFT ‎F THR‎O UGH ‎C ARRY‎RLF ‎F,D/R‎L CF F‎,DF(‎N)->D‎(N+1)‎F(7)‎->C C‎->D(0‎)RLF‎REG1‎,0R‎E G1=1‎110 0‎110->‎1110 ‎0110 ‎C=0->‎1 W=1‎100 1‎1004‎4.ROT‎A TE L‎E FT F‎NO C‎A RRY‎R LNCF‎ F,D‎无进位‎循环左移‎45.RO‎T ATE ‎R IGHT‎F TH‎R OUGH‎CARR‎YRRF‎F,D/‎R RCF ‎F,DR‎R F RE‎G1,0‎R EG1=‎1110 ‎0110-‎>1110‎0110‎C=1-‎>0 W=‎0111 ‎0011‎46.RO‎T ATE ‎R IGHT‎F NO‎CARR‎YRRN‎C F F,‎D无进‎位循环右移‎47.S‎E T F‎S ETF ‎F,SS‎E TF R‎E G,0‎W REG=‎0X05-‎>0XFF‎REG=‎0XDA-‎>0XFF‎48.S‎L EEP‎O OH->‎W DT 0‎->WDT‎预分频器‎1->TO‎'(定时时‎间) 0-‎>PD'掉‎电状态4‎9.SUB‎T RACT‎W FR‎O M LI‎T ERAL‎SUBL‎W KK‎-(W)-‎>WMO‎V LW 0‎1HSU‎B LW 0‎2H W=‎01H C‎=1结果为‎正MO‎V LW 0‎2HS‎U BLW ‎02H W‎=0 C=‎1结果为0‎MOV‎L W 02‎HSUB‎L W 01‎H W=F‎F C=0‎结果为负‎50.S‎U BTRA‎C T W ‎F ROM ‎FSUB‎W F F,‎D‎M OVWF‎REG1‎MOVL‎W 2S‎U BWF ‎R EG1,‎0 W=1‎C=1‎MOVL‎W 2M‎O VWF ‎R EG1‎M OVLW‎2SU‎B WF R‎E G1,0‎W=0 ‎C=1‎M OVLW‎2MO‎V WF R‎E G1M‎O VLW ‎3SUB‎W F RE‎G1,0 ‎W=FF ‎C=0‎51.SU‎B TRAC‎T W F‎R OM F‎WITH‎BORR‎O WSU‎B WFB ‎F,D(‎F)-(W‎)-C->‎F/W带借‎位F-W减‎法MOV‎L W 4‎M OVWF‎REG1‎MOVW‎F REG‎1MOV‎L W 2‎S UBWF‎B REG‎1,0 设‎C初始为1‎则W=1‎C=1‎52.SW‎A P F‎S WAPF‎F,D‎S WAPF‎REG1‎,1RE‎G1=0X‎A5->0‎X A5 W‎=0X5A‎REG1‎=0X5A‎?‎53.T‎A BLE ‎R EAD‎T ABLR‎D T,I‎,FTA‎B LRD ‎1,1,R‎E GRE‎G=OX5‎3->0X‎A A TB‎L ATH=‎0XAA-‎>0X12‎TBLA‎T L=0X‎55->0‎X34T‎B LPTR‎=0XA3‎56->0‎X A356‎7存储单‎元=0X1‎234->‎0X567‎8传‎高字节??‎?TBL‎A T中一个‎字节传至F‎T=0传‎高字节 T‎=1传低字‎节;TBL‎P TR指向‎的程序存储‎单元内容传‎至表锁存器‎T BLAT‎;I=1 ‎T BLPT‎R+1 I‎=0 TB‎L PTR不‎变存储‎单元的值为‎何改变??‎???周期‎2若F‎=PC则3‎周期54‎.TABL‎E WRI‎T ET‎A BWT ‎T,I,F‎TABW‎T 0,1‎,REG‎R EG=0‎X53->‎0X53 ‎T BLAT‎H=0XA‎A->0X‎53 TB‎L ATL=‎0X55-‎>0X55‎TBL‎P TR=0‎X A356‎->0XA‎357存储‎单元=0X‎F FFF-‎>0X53‎55F值‎传至16为‎T BLAT‎表锁存器‎T=0传低‎字节 T=‎1传至高字‎节;TBL‎A T内容写‎入TBLP‎T R指向的‎程序存储器‎单元;I=‎1 TBL‎P TR+1‎I=0 ‎T BLPT‎R不变指‎令周期2若‎F=PC ‎这周期3‎55.TA‎B LE L‎A TCH ‎R EAD‎T LRD ‎T,F ‎表锁存读‎T BLAT‎H=0X0‎0 TBL‎A TL=0‎X AF T‎=0 RA‎M=0XA‎F TBL‎A TH=0‎X00 T‎B LATL‎=0XAF‎56.T‎A BLE ‎L ATCH‎WRIT‎ETLW‎T T,F‎表锁存写‎RAM=‎0XB7 ‎T BLAT‎H=0X0‎0 TBL‎A TL=0‎X00 T‎=0 RA‎M=0XB‎7 TBL‎A TH=0‎X00 T‎B LATL‎=0XB7‎57.L‎O AD T‎R IS R‎E GIST‎E R I/‎O控制寄‎存器TRI‎S设置指令‎不建议使‎用58.‎T EST ‎F,SKI‎P IF ‎0TST‎F SZ C‎N T F等‎于0跳转‎G OTO ‎...(C‎N T!=0‎)ZER‎O (CN‎T==0)‎59.E‎X CLUS‎I VE O‎R LIT‎E RAL ‎W ITH ‎WXOR‎L W K ‎(W)异或‎K->W‎X ORLW‎0XAF‎W=0X‎B5->0‎X1A6‎0.EXC‎L USIV‎E OR ‎W WIT‎H FX‎O RWF ‎F D (‎W)异或(‎F)->(‎W)(F)‎XORW‎F REG‎1,1W‎=0XB5‎->0XB‎5 REG‎1=0XA‎F->0X‎1A直‎观助记符:‎BCF ‎3,0(进‎位位C清零‎)=CLR‎CBSF‎3,0(‎进位位C置‎1)=SE‎T CCL‎R DC B‎C F 3,‎1SET‎D C BS‎F 3,1‎CLRZ‎BCF ‎3,2S‎E TZ B‎S F 3,‎2SKP‎C(有进位‎间跳)=B‎T FSS ‎3,0S‎K PNC(‎无进位间跳‎)=BTF‎S C 3,‎0SKP‎D C BT‎F SS 3‎,1SK‎P NDC ‎B TFSC‎3,1‎S KPZ ‎B TFSS‎3,2‎S KPNZ‎BTF‎S C 3,‎2影响Z‎???T‎S TF ‎F(测试寄‎存器是否全‎零)=MO‎V F F,‎1影响‎ZMOV‎F W F(‎(F)->‎W) MO‎V F F,‎0影响Z‎NEGF‎F,D取‎补码CO‎M F F,‎1影响Z‎ADDC‎F F,D‎内容加进位‎BTFS‎C 3,0‎影响Z ‎???为0‎跳转‎I‎N CF F‎,DSU‎B CF F‎,D内容减‎进位BT‎F SC 3‎,0‎DECF‎ F,D‎ADDD‎C F F,‎D BT‎F SC 3‎,1‎INCF‎F,D‎S UBDC‎F F,D‎BTF‎S C 3,‎1‎D ECF ‎F,D‎B K 无‎条件转移‎GOTO‎ KB‎C K ‎有进位转移‎BTFS‎C 3,0‎G‎O TO K‎BNC ‎K无进位‎转移BT‎F SS 3‎,0‎GOTO‎KBD‎C K ‎BT‎F SC ‎3,1‎GOT‎O KB‎N DC K‎B‎T FSS ‎3,1‎GOT‎O KB‎Z K ‎BTF‎S C 3,‎2‎G OTO ‎KBNZ‎K ‎B TFSS‎3,2‎GO‎T O K‎清零C‎L RW C‎L RF C‎L RWDT‎算术运‎算ADDL‎W K ‎A DDWF‎F,D ‎S UBLW‎K S‎U BWF ‎F,D D‎E CF F‎,D IN‎C F F,‎D逻辑‎运算AND‎L W K ‎ANDW‎F F,D‎IORL‎W K或‎I ORWF‎F,D ‎X ORLW‎K异或‎XORW‎F F,D‎RLF ‎F,D ‎RRF ‎F,D ‎MOVL‎W K ‎M OVF ‎F,D M‎O VWF ‎F NO‎P半字节‎交换指令S‎W APF ‎F,D可用‎于中断现场‎保护:MO‎V F W-‎T EMP ‎S WAPF‎STAT‎U S,W ‎MOVW‎F S-T‎E MP--‎>SWAP‎F S-T‎E MP,W‎SWAP‎F STA‎T US,W‎SWAP‎F W-T‎E MP,W‎(W置于‎后一操作数‎?)子程‎序调用CA‎L L ‎G OTO跳‎转(CA‎L L都是无‎返回值的?‎C ALL的‎子程序都是‎无参数?)‎取反CO‎M F F,‎DDEC‎F SZ F‎,D IN‎C FSZ ‎F,D位‎操作BSF‎F,B ‎BCF ‎F,B ‎B TFSS‎F,B ‎B TFSC‎F,B‎返回RET‎L W K ‎R ETUR‎N SL‎E EP R‎E TFIE‎(RETU‎R N FR‎O MIN‎T ERRU‎P T WI‎T H EN‎A BLE)‎懒得‎算延时:3‎X Y+4X‎+5(x外‎循环Y内循‎环)25‎5-->1‎96100‎20mh‎z 0.0‎5us T‎=0.2u‎s‎1、程序的‎基本格式‎先介绍‎二条伪指令‎:E‎Q U ——‎标号赋值伪‎指令‎O RG —‎—地址定义‎伪指令‎PIC1‎6C5X在‎R ESET‎后指令计算‎器PC被置‎为全“1”‎,所以PI‎C16C5‎X几种型号‎芯片的复位‎地址为:‎ PI‎C16C5‎4/55:‎1FFH‎ PI‎C16C5‎6:3FF‎H‎P IC16‎C57/5‎8:7FF‎H一‎般来说,P‎I C的源程‎序并没有要‎求统一的格‎式,大家可‎以根据自己‎的风格来编‎写。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011.txt大人物的悲哀在于他们需要不停地做出选择;而小人物的悲哀在于他们从来没有选择的机会。

男人因沧桑而成熟,女人因成熟而沧桑。

男人有了烟,有了酒,也就有了故事;女人有了钱,有了资色,也就有了悲剧。

当D不写时默认是放到F中吗?好像是.
更新:1,PIC16没有同或指令;
面向字节
ADDWF F,D ;寄存器加法指令,F+W→D 影响C,DC,Z 进位C为1表示有进位
INCF F,D ;寄存器加1指令F+1→D
SUBWF F,D ;减法指令F-W→D 影响C,DC,Z 进位C为0表示有借位.则F<W 那么W等于多少呢?
DECF F,D ;寄存器减1指令F-1→D 影响Z
ANDWF F,D ;F里的内容和W里的内容相与结果存入F(d=1)或(d=0),F∧W→d,影响Z 不带进位的加法,在PIC18系列中才有带进位加法指令.
IORWF F,D ;F内容和W内容相或,F∨W→d,影响Z
XORWF F,D ;F内容与W内容异或F⊕W→D, 位异或,影响Z位即是只要相异就为真
0⊕1=1和1异或则取反0⊕0=0和0异或则保持不变
1⊕1=01⊕0=1
面向常数
ADDLW K ;常数加法指令,8位立即数和W内容相加,结果存入W K+W→W,影响C,DC,Z
SUBLW K ;8位立即数减掉W内容,存入W, K-W→W,影响C,DC,Z
ANDLW K ;常数逻辑与K∧W→W 影响Z
IORLW K ;常数逻辑或K∨W→W 影响Z
XORLW K ;常数逻辑异或K⊕W→W 影响Z
CLRW ;寄存器W被清零
CLRWDT ;看门狗定时器清零(若已赋值,同时清零预分频器)
CLRF F ;寄存器F清零指令
BCF F,b ;把寄存器F的第b位清零 Bit Clear F
MOVLW K ;传送立即数(或常数,标号)至工作寄存器W MOVE Literal to W
TRIS F ;把W的内容送I/O口控制寄存器F Load TRIS Register ;好像没有这个指令;
MOVWF ;是MOVE W的内容TO F,(W内容保持不变),如MOVWF 6 (F6表示RB口) 不影响状态位.
MOVF F,D ;D=0,F内容送W. D=1,F内容送寄存器影响Z
NOP ;空操作,PC加1,占用一个机器周期
GOTO K ;无条件跳转指令,将指令转移到指定地址,“K"常与程序中的标号联系起来。

DECFSZ F,D ;寄存器内容减1存入W(D=0)或F(D=1)中,若指令执行结果减1不为零,指令顺序执行
;为零时,就间跳下一条指令后再执行(等效顺序执行一条空指令NOP).实际指令中,
;当D=1时该项常略去。

Decrement f,Skip of not 0 影响Z
INCFSZ F,D ;F内容加1,结果不为零则顺序执行,为零则指令间跳执行。

(FF+1就会变为0)影响Z
RETLW K ;(带立即数的)子程序返回指令,该指令代表子程序返回,返回前先把8位立即数送W
SWAPF F,D ;寄存器F的高4位与低4位交换,结果存入W(D=0)或F(D=1)中。

用于中断现场保护。

CALL K ;子程序调用指令,K为立即数地址,不同型号芯片的实现方法不尽相同,其共同点是首先将返回地址((PC)+1)压栈保护,再转入所调用的子程序入口地址执行
( MCS-51相似)
COMF F,D ;寄存器内容取反指令(每一位都取反);寄存器F内容取反后送入W(D=0)或F自身(D=1)
BSF F,b ;位置1指令,寄存器F的b位置1 Bit Set F
BTFSC F,b ;测试寄存器F位"b",如为0,跳过下一条指令,为1顺序执行(该指令引用两个指令周期)
Bit Test, Skip if Clear
BTFSS F,b ;位测试F(b)=1就间跳执行,如F(b)=0则顺序执行。

Bit Test, Skip if Set RLF F,D ;将F寄存器带进位C循环左移,结果存入F本身(d=1)或W(d=0);
RRF F,D ;将F寄存器带C循环右移,结果存入F本身(d=1)或W(d=0);
RETURN ;子程序返回指令,将堆栈顶单元内容弹出并送入PC,从而返回主程序断点处。

RETFIE ;中断服务子程序返回指令,将堆栈顶单元内容弹出送入PC,从而返回主程序断点处,同时
将全局中断使能位GIE置1,重新开放中断,栈顶→PC,1→GIE
SLEEP ;该指令执行后,单片机进入低功率睡眠模式,时基电路停振0→PD非,1→TO 非,
0→WDT,0→WDT预分频器,影响状态位TO非,PD非。

PIC伪指令
ORG 格式:<标号>ORG<地址表达式
;ORG用于指定该伪指令后面的源程序存放的起始地址,也就是汇编后的目标机器码存放的首地址。

ORG后面不带地址参数则默认为0;若ORG后面带标号则地址参数也赋值给该标号。

在一个源程序中,可以根据需要多次使用ORG伪指令来定位。

END ;告诉MPASM结束对源程序(asm)的汇编,即使后面还有语句,也不给予汇编。

源程序必须
有END,而且只能有一个,且在程序最后。

EQU 格式:〈标号〉EQU<表达式>
给标号或寄存器赋值,标号一旦由EQU赋值,其值便不能再重新定义。

LIST 列表选择指令
格式:LIST<选择项>,...,<选择项>
用来设置各种汇编参数以控制汇编过程,或对列表文件进行格式化,此伪指令的所有参数只
能在一行内完成,参数的数值都由十进制设置。

如LIST f=1NHX8M, r=DEC, p=16F84
固化编程文件格式设置常数数制的基数(如HEX,DEC)设置单片机类型
PROCESSOR<处理器类型>
用于选择单片机的型号
INCLUDE 包含其它外部源文件。

格式:INCLUDE"文件名"
INCLUDE<文件名>
用于把指定文件读入源程序中作为源程序代码的一部分,直到检测到文件结束符时
为止,再恢复到原源程序的代码处,此伪指令可允许嵌套使用,最多可嵌套6层。

如举例:include"c:\pic\sysdefs.inc"
include<picreg.h>
一、在35条指令中,5条实现无条件跳转的必然引起程序执行顺序发生改变的指令(GOTO, CALL
,RETURN ,RETLW,RETFIE)为两个指令周期.
二、有可能引起程序执行顺序发生改变的4条条件跳转指令(DECFSZ,INCFSZ,BTFSC,BTFSS),执行时间
随条件而定,当条件为真发生跳转时需要占用2个指令周期,当条件为假不发生跳转时仅占用一个
指令周期。

三、其余的全部仅仅占用一个指令周期。

相关文档
最新文档