指令PIC的指令详解

合集下载

PIC指令集中文介绍

PIC指令集中文介绍

编译信息的输出显示级别有三种,分别是 0、1 和 2。

级别 0 代表显示所有信息,包括各种错误、警告和提示信息,如图 3-14 所示某些信息单独设定显示或关闭。

每个信息都有一个识别标号,见图 3-14 中信息项“[]”中的数字,打开或关闭某类信息只需在 errorlev
errorlevel 0, -302, -305 ;显示所有信息,但不需要302 和 305 这两类提示信息
errorlevel 1, +305 ;显示错误和警告信息,但同时还要关注 305类的提示信息
,分别是 0、1 和 2。

级别 0 代表显示所有信息,包括各种错误、警告和提示信息,如图 3-14 所示;级别 1 代表显示错误和警告信息,忽略提示信息;个信息都有一个识别标号,见图 3-14 中信息项“[]”中的数字,打开或关闭某类信息只需在 errorlevel 伪指令中引用信息识别标号,并在其前面用“+”或“-”
有信息,但不需要302 和 305 这两类提示信息
警告信息,但同时还要关注 305类的提示信息
示错误和警告信息,忽略提示信息;级别 3代表只显示错误信息而忽略警告和提示信息。

在任何一个大的级别上还可以对信息识别标号,并在其前面用“+”或“-”号,即代表打开或关闭这一类信息,例如:。

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单片机:从管脚到指令,一看就懂展开全文这个8条腿的小螃蟹就是我们的第一顿饭,只要把它吃下去,以后的大餐就好办了。

第1、8条腿接电源 +5V 和地线。

头两条腿是螃蟹钳子,好吃的很。

现在剩下了 6 条腿第2、3条腿使用时外接一个晶振的东西我们接一个 4 MHz的。

第4条腿是复位脚,是一个信号输入脚。

单片机正常运行时接高电平。

当有一个低电平脉冲输入到这个脚时单片机就复位。

所谓复位就是单片机内部所有的工作部件统统回到规定的状态,程序也复位到头一句上开始逐条运行。

例如,你设计的一个报警锁定的LED红灯亮后,当需要解除报警时,用一个按钮给这个脚瞬时接地一下,相当于给它一个夫脉冲,系统就复位了,led灯就熄灭了,程序从头开始。

以上5个脚,几乎所有单片机都有,包括世界上最复杂的,和世界比较简单的单片机-----PIC12CE519轮到第几条腿啦?奥,是第5条腿,这条叫单片机的 I/O 脚。

就是输入输出脚。

你可通过程序动态地控制它作为输入或输出,作为输出时可以程序控制它的输出电平为高1或低0。

所以,他的工作状态有四种:输入0,输入1,输出0,输出1,剩下的两条腿和第5脚功能一个样。

上边我们已经把8条腿消化掉了,其实我们要弄明白的也就3只腿,我们再简单一些,先整明白两条腿,即GP0,GP1.这两条腿低级一点的用法,可以控制继电器,LED灯,高级一些的用法可以进行I2C总线,RS232总线的通信,作为扩展输入可以模拟出来A/D转换器(6--7bit),可以测量一个电阻的粗略值。

作为输出也可以直接推动扬声器奏出音乐。

这是后话暂且不提。

现在要控制使用这两只腿,我这个三脚猫功夫的说书的不得不讲一下软件了,要想讲明白软件又不得不涉及到单片机的内部结构。

那位说啦,你可别提这软件和结构了,以前俺就是让它们打败的,现在听到这个心里就打鼓。

嘿嘿,不要紧,果真如你所说,那你就不妨跟着我再失败一次,反正吗多一次失败又不纳税,嘿嘿。

pic指令集

pic指令集
MUL 无符号乘法
IMUL 整数乘法
AAM 乘法的ASCII码调整
DIV 无法号除法
IDIV 无符号除法 ;商回送AL,余数回送AH 或 商回送ax 余数回送dx
AAD 除法的ASCII 码调整
CBW 字节转换为字
CWD 字转换为双字
CWDE 字转换为双字 把ax中的字符号扩展到EAX中
数据传输指令:
1通用数据传输指令
mov 传输字或者字节
movsx 先符号位扩展,再传送
moczx 先零扩展,在传送
push 压栈
pop 出栈
pusha ax,cx,dx,bx,sp, bp, si, ቤተ መጻሕፍቲ ባይዱi, 依次入栈
popa 类上
pushad 把eax。。。。。。类上
输入输出端口传送指令
in I/O端口输入
out I/O端口输出
输入输出端口由立即方式指定时,其范围是0-255;
由寄存器DX指定时,其范围0-65535
目的地址传送指令
LEA 装入又掉地址
LDS 传送目标指针,把指针内容装入ds LDS SI,STRING把段地址:偏移地址存到DS:si
Z标志 用来控制扫描或比较操作结束
MOVS 串传送
CMPS 串比较
SCAS 串扫描
LODS 装入串
STOS 保存串
REP 当 cx/ecx ><0 时重复
程序转移指令
无条件转移指令
JMP CALL RET/RETF过程返回
条件转移指令
JA/JNBE 不小于或不等于时转移
popad 把edi 。。。。。。类上

PIC汇编指令集概述

PIC汇编指令集概述

PIC汇编指令集概述2010-8-4 16:23:39PIC单片机(Peripheral Interface Controller)是一种用来开发的去控制外围设备的集成电路(IC),翻译为外设接口控制器。

PIC 意思确实有点奇怪,不知道的话第一个P肯定翻译为Programable(可编程)的。

目前我接触的基本都是8位的CPU,包括AVR,PIC等系列,之前我写的程序都是以C语言去写的,也从未出现过什么问题,虽然很多人说道C语言的BUG问题,我一直都不是很在意,就目前为止我从未遇到过这种问题,用AVR-GCC写的时候也曾经出现过问题,也怀疑过C语言和编译器,最终事实证明是错的,一直都是我们没有注意的语法问题的造成的。

接触PIC后我开始用起了他的汇编,原因无它,只是大家都在用汇编。

这是发表的第二篇文章,处女篇给了梦梦哈,首先介绍一下PIC的单片机,PIC单片机是基于哈弗结构的精简指令集(RISC)的单片机,没啥说的,很多单片机都是的。

特殊的地方就是他的指令和存储器结构,一直有个问题到底是他的指令结构决定的他的存储器结构,还是存储器结构决定的指令结构?PIC8位机分为低中高三个档子,低档次的是PIC12系列的,指令是以12BIT结构编码的,对应的指令集有33条指令;中档的CPU是PIC16系列,指令集包含35条指令,并且是以14BIT的结构编码的;高档次的PIC18系列包含58条指令,每条指令是以16BIT结构编码的。

并且所有指令向下兼容。

PIC指令的语法和其他系列的一样,都是有以下几部分组成的:标号操作码助记符操作数1 操作数2 ;注释1。

关于标号,没啥说的,和其他单片机一样,它表示一个地址,标号也是可选的,不是所有的指令都需要的,只有在被其他语句引用时才需的,在没有标号的情况下,操作码助记符前必须保留一个或以上的空格再去写指令助记符,一般使用一个TAB,如果没有标号,而操作码助记符占用了标号的位置,汇编器会把指令助记符当做标号来处理。

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常用指令

GOTO LOOP ;否!循环回去
RETURN ;返回
9.位置1指令:BCF
【格式】 BCF F,B
【功能】位清0
【说明】
(1)BCF是Bit Clear F的缩写;
(2)符号B是表示片内某个8位数据寄存器F的位号(或位地址);
【实例】 INCF PORTC,1 ;将PORTC加1
2.寄存器减1指令:DECF
【格式】 DECF F,d
【功能】寄存器F减1
【说明】
(1)DECF是Decrement F的缩写;
(2)d=0时,结果存入W;d=1时,结果存入F。
【实例】 ENCODER EQU 0X21
(3)不影响状态位
【实例】 MOVLW 0x1E ;常数30送W
14.子程序调用指令:CALL
【格式】 CALL K
【功能】子程序调用
【说明】
(1)CALL是CALL subroutine的缩写;
(2)K为立即地址;
(3)不影响状态位。
【实例】
【实例】 MOVLW 0xOF ;送OFH到W
MOVWF PORTB ;W内容写入B口
NOP ;空操作
MOVF PORTB,W ;读操作
PIC汇编语言常用伪指令
1.符号名赋值伪指令:EQU
CALL DELAY ;PORTB的第0位是1则直接执行该句,调用延时子程序
13.常数传送指令:MOVLW
【格式】 MOVLW K
【功能】常数传送
【说明】(1)MOVLW是Move literal to W的缩写;
(2)将8位立即数传送到W寄存器,k表示常数、立即数和标号;

PIC指令系统小结

PIC指令系统小结

PIC 单片机指令系统总结PIC 单片机是RISC 型单片机,指令系统比较简单,但是PIC 有一个致命的弱点对于PIC12系列,PIC16系列单片机来说它的程序储存器一般是512个字节一页(有的单片机是2K 一页)如果用汇编语言编程的话,特别要注意翻页的问题,十分麻烦。

用C 语言的话可以避免这个麻烦。

对于PIC18系列来说没有这个问题的。

但是我个人认为对于简单的程序用PIC 汇编语言编程还是比较容易的。

一.PIC 低档机系列指令系统(33条指令)1. 指令:ADDWF f, d操作数: 310≤≤f []1,0∈d操作: ()()→+F W 目标寄存器受影响的状态位: C 、DC 和Z说明: 将W 寄存器的内容与寄存器f 的内容相加。

如果d 为0,结果存入W 寄存器。

如果d 为1,结果存回f 寄存器2. 指令:ANDLW操作数 2550≤≤K操作:W K W →&受影响标志位:Z说明:将W 寄存器中的内容与8位立即数相与。

结果存入W 寄存器3. 指令: ANDWF f, d操作数:310≤≤f []1,0∈d操作: →F W &目标寄存器受影响标志位:Z说明:将W寄存器中的内容与F寄存器中的内容相与,如果d=0则结果存入W寄存器,如果d=1,则结果存入f寄存器.4. 指令: BCF f,b操作数: 310≤≤f 70≤≤b操作: ()b f →0受影响标志位: 无说明: 将f 寄存器中的第b 为清05. 指令: BSF f,b操作数: 310≤≤f 70≤≤b操作: ()b f →1受影响标志位: 无说明: 将f 寄存器中的第b 为置16. 指令: BTFSC f, d操作数: 310≤≤f 70≤≤b操作: 如果()b f =0,跳行受影响标志位: 无说明: 如果f 寄存器中的第b 位为0, 则跳一行执行指令,否则执行下一条指令7. 指令:BTFSS f, d操作数: 310≤≤f 70≤≤b操作: 如果()b f =1,跳行受影响标志位: 无说明: 如果f 寄存器中的第b 位为1, 则跳一行执行指令,否则执行下一条指令8. 指令: CALL K操作数: 20470≤≤K操作: →+1PC 压载 0:7PC K → ()9:105:6PC STATUS → 80PC → 受影响标志位: 无说明: 调用子程序.首先,将返回地址PC+1压载保护.8位直接地址被装入PC 的0:7.PC 的高位9:10,从STATUS 5:6装入,PC<8>被清0.CALL 是一条双周期指令9. 指令: CLRF f操作数: 310≤≤f操作: f h →00 Z →1受影响标志位: Z说明: 将寄存器f 中的内容清0,并且Z 标志位被置110 指令: CLRW操作数: 无操作: W h →00 Z →1受影响标志位: Z说明: 将寄存器W 中的内容清0,并且Z 标志位被置111. 指令: CLRWDT操作数: 无操作: WDT h →00说明: 清看门狗指令12. 指令: COMF f , d操作数: 310≤≤f []1,0∈d操作: →f 目标寄存器受影响标志位: Z说明: 将寄存器f 的内容取反.如果d 为0,结果存入W 寄存器.如果d 为1 结果存入f 寄存器.13. 指令: DECF f, d操作数: 310≤≤f []1,0∈d操作: →−1f 目标寄存器受影响标志位: Z说明: 将寄存器F 中的内容减1 .如果d 为0,结果存入W 寄存器,如果d 为1结果存入f 寄存器.14. 指令: DECFSZ f, d操作数: 310≤≤f []1,0∈d操作: →−1f 目标寄存器,结果为0,则跳行执行指令,结果不为0,则执行下一条指令 受影响标志位: 无说明: 将寄存器F 中的内容减1 .如果d 为0,结果存入W 寄存器,如果d 为1结果存入f 寄存器. 如果结果为0则跳行执行指令,结果不为0,则执行下一条指令15. GOTO K操作数: 20470≤≤K操作: 0:PC K → 9:105:PC STATUS →受影响标志位: 无说明: GOTO 是一条无条件转移指令,类似51的AJMP ;AVR 的RJMP 指令16. INCF f, d操作数: 310≤≤f []1,0∈d操作: →+1f 目标寄存器受影响标志位: Z说明: 将寄存器F 中的内容加1 .如果d 为0,结果存入W 寄存器,如果d 为1结果存入f 寄存器.17. INCFSZ f,d操作数: 310≤≤f []1,0∈d操作: →+1f 目标寄存器,如果结果为0,则跳行受影响标志位: Z说明: 将寄存器F 中的内容加1 .如果d 为0,结果存入W 寄存器,如果d 为1结果存入f 寄存器. 如果结果为0则跳行执行指令,结果不为0,则执行下一条指令18. IOLW K操作数: 2550≤≤K操作: W K W →|受影响标志位: Z说明: 将W 寄存器中的内容与8位立即数相或,结果存入W 寄存器.19. IORWF f, d操作数: 310≤≤f []1,0∈d操作: →F W |目标寄存器受影响标志位: Z说明: 将W 中的内容和F 做或运算,d=0时结果存入W 寄存器,d=1时结果存入F 寄存器20.MOVF f , d操作数: 310≤≤f []1,0∈d操作: →F 目标寄存器受影响标志位: Z说明: 如果d=0,F 中的内容送W 寄存器,d=1,F 中的内容送F 寄存器,但是影响Z 标志位21. MOVLW K操作数: 2550≤≤K操作: W K →受影响标志位: 无说明: 将8位立即数装入W 寄存器22. MOVWF F操作数: 310≤≤f操作: F W →受影响标志位: 无说明: 将W 寄存器中的数据传送到F 寄存器23 NOP说明: 空指令,仅仅消耗一个指令周期24 OPTION操作数: 无操作: →W 选项寄存器受影响标志位: 无说明:将W 中的内容送到选项寄存器OPTION 中.25. RETLW K操作数: 2550≤≤K操作: W K → (POP) PC受影响标志位: 无说明: 将8位立即数从K 中装入W 寄存器.将栈顶地址装入程序计数器.26 .RLF f, d操作数: 310≤≤f []1,0∈d操作: 见下受影响标志位: C说明: 将寄存器f 的内容连同进位一起循环左移一位。

PIC汇编指令

PIC汇编指令

PIC汇编指令PIC18F系列d:目标寄存器选择位0表示结果保存至W寄存器中,1表示保存到文件寄存器f中。

a: 快速操作RAM位0表示快速操作RAM内的RAM单元(BSR寄存器被忽略)。

1表示存储区由BSR指定面向字节的操作指令1、ADDWF f,d,a;将f中的内容与W中的内容相加,存储在d 提定的寄存器中.2、ADDWFC f,d,a;将f中的内容与W中的内容带进位相加3、ANDWF f,d,a;将f中的内容与W中的内容逻辑与运算4、CLRF f,a; 将f清零5、COMF f,d,a;将f取反6、CPFSEQ f,a; 将f与w作比较,相等则跳过下一句7、CPFSGT f,a; 将f与w作比较,大于则跳过8、CPFSLT f,a; 将f与w作比较,小于则跳过9、DECF f,d,a; f减110、DECFSZ f,d,a; f减1,为0则跳过11、DCFSNZ f,d,a; f减1,非0则跳过12、INCF f,d,a; f加113、INCFSZ f,d,a; f加1,为0则跳过14、INFSNZ f,d,a; f加1,非0则跳过15、IORWF f,d,a; 将f中的内容与W中的内容逻辑或运算16、MOVF f,d,a; 传送f17、MOVFF fs,fd; 将fs(源地址)传送给fd(目的地址)18、MOVWF f,a;将w传给f19、MULWF f,a;将w乘以f20、NEGF f,a;将f取补21、RLCF f,d,a;将F执行带进位循环左移22、RLNCF f,d,a;将F执行不带进位循环左移23、RRCF f,d,a;将F执行带进位循环右移24、RRNCF f,d,a;将F执行不带进位循环左移25、SETF f,a;将F全部置126、SUBFWB f,d,a;将W减去F(带借位)27、SUBWF f,d,a;将f减去W28、SUBWFB f,d,a;将f减去W(带借位)29、SWAPF f,d,a;将f中的两个半字节进行交换30、TSTFSZ f,a; 测试f,为0则跳过31、XORWF f,d,a; W与f作逻辑异或运算面向位的操作类指令32、BCF f,b,a; 将F寄存器中的某位清零33、BSF f,b,a; 将F寄存器中的某位置134、BTFSC f,b,a; F中的某位为0则跳过35、BTFSS f,b,a; F中的某位为1则跳过36、BTG f,b,a; F中的某位取反控制操作类指令37、BC n; 进位则跳转38、BN n; 为负则跳转39、BNC n;无进位则跳转40、BNN n;不为负则跳转41、BNOV n;不溢出则跳转42、BNZ n;不为零则跳出43、BOV n;溢出则跳转44、BRA n;无条件跳转45、BZ n;为零则跳转46、CALL n,s;调用子程序47、CLRWDT ;清看门狗48、DAW ;将W进行十进制调整49、GOTO n;跳转到地址50、NOP ;空操作51、POP ;出栈52、PUSH;压栈53、RCALL n;相对调用54、RETFIE s;中断返回使能55、RESET ;用软件使器件复位56、RETLW k;返回时将立即数送入W57、RETURN s;从子程序返回58、SLEEP 进入待机模式立即数操作指令59、ADDLW k;W与立即数相加60、ANDLW K;立即数与W作逻辑与运算61、IORLW k;立即数与W作逻辑或运算62、LFSR f,k; 将立即数送给FSR63、MOVLB k;将立即数传送给BSR64、MOVLW k;将立即数传送给W65、MULLW k;立即数与W相乘66、RETLW k;返回时将立即数与W相乘67、SUBLW k;立即数减去W68、XORLW k;立即数与WREG作逻辑异或运算数据存储器---程序存储器操作类指令69、TBLRD* ;表读70、TBLRD* +;后增表读71、TBLRD* -;后减表读72、TBLRD+ *;预增表读73、TBLWT* ;表写74、TBLWT* +;后增表写75、TBLWT* -;后减表写76、TBLWT+ *;预增表写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减17、DECFSZ f,d; f减1,为0则跳过8、INCF f,d; f加19、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传给f13、RLF f,d;将F执行带进位循环左移14、RRF f,d;将F执行带进位循环右移15、SUBWF f,d;将f减去W16、SWAPF f,d;将f中的两个半字节进行交换17、XORWF f,d; W与f作逻辑异或运算面向位的操作类指令18、BCF f,b; 将F寄存器中的某位清零19、BSF f,b; 将F寄存器中的某位置120、BTFSC f,b; F中的某位为0则跳过21、BTFSS f,b; F中的某位为1则跳过立即数操作指令22、ADDLW k;W与立即数相加23、ANDLW K;立即数与W作逻辑与运算24、IORLW k;立即数与W作逻辑或运算25、MOVLW k;将立即数传送给W26、CALL k;调用子程序27、GOTO k;跳转到地址28、RETFIE ;中断返回使能29、RETLW k;返回时将立即数送入W30、RETURN ;从子程序返回31、SLEEP 进入待机模式32、SUBLW k;立即数减去W33、XORLW k;立即数与WREG作逻辑异或运算34、NOP。

PIC指令介绍

PIC指令介绍

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

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

其指令向下兼容。

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

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

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

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

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

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

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

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

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

标号也可以单独占一行。

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

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

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

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

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

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

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

PIC汇编指令集概述

PIC汇编指令集概述

PIC汇编指令集概述2010-8-4 16:23:39PIC单片机(Peripheral Interface Controller)是一种用来开发的去控制外围设备的集成电路(IC),翻译为外设接口控制器。

PIC 意思确实有点奇怪,不知道的话第一个P肯定翻译为Programable(可编程)的。

目前我接触的基本都是8位的CPU,包括AVR,PIC等系列,之前我写的程序都是以C语言去写的,也从未出现过什么问题,虽然很多人说道C语言的BUG问题,我一直都不是很在意,就目前为止我从未遇到过这种问题,用AVR-GCC写的时候也曾经出现过问题,也怀疑过C语言和编译器,最终事实证明是错的,一直都是我们没有注意的语法问题的造成的。

接触PIC后我开始用起了他的汇编,原因无它,只是大家都在用汇编。

这是发表的第二篇文章,处女篇给了梦梦哈,首先介绍一下PIC的单片机,PIC单片机是基于哈弗结构的精简指令集(RISC)的单片机,没啥说的,很多单片机都是的。

特殊的地方就是他的指令和存储器结构,一直有个问题到底是他的指令结构决定的他的存储器结构,还是存储器结构决定的指令结构?PIC8位机分为低中高三个档子,低档次的是PIC12系列的,指令是以12BIT结构编码的,对应的指令集有33条指令;中档的CPU是PIC16系列,指令集包含35条指令,并且是以14BIT的结构编码的;高档次的PIC18系列包含58条指令,每条指令是以16BIT结构编码的。

并且所有指令向下兼容。

PIC指令的语法和其他系列的一样,都是有以下几部分组成的:标号操作码助记符操作数1 操作数2 ;注释1。

关于标号,没啥说的,和其他单片机一样,它表示一个地址,标号也是可选的,不是所有的指令都需要的,只有在被其他语句引用时才需的,在没有标号的情况下,操作码助记符前必须保留一个或以上的空格再去写指令助记符,一般使用一个TAB,如果没有标号,而操作码助记符占用了标号的位置,汇编器会把指令助记符当做标号来处理。

PIC指令集

PIC指令集

PIC指令集NOP 空操作指令执行时间:1个指令周期执行过程:除了消耗单片机一个指令周期外,没有任何其他影响。

说明:NOP指令归属于字节操作是个特例,因为该指令的执行没有任何操作数参与,其结果也不影响任何其他寄存器。

一般用于指令运行过程中的延时。

MOVWF 把W寄存器的内容传送至数据寄存器中语法形式:MOVWF f操作数:f为数据寄存器的低7位地址(0x00~0x7f)执行时间:1个指令周期执行过程:把W寄存器的内容传送至数据寄存器中,W寄存器的内容保持不变说明:该指令是用于对数据寄存器赋值的最主要方式MOVF 把数据寄存器的内容传送至目的寄存器语法形式:MOVF f, d操作数: f为数据寄存器的低7位地址(0x00~0x7f)d=w,把数据寄存器的内容传送至W寄存器d=f,把数据寄存器内容放回自己本身,目的在于判断数据寄存器的内容是否为0执行时间:1个指令周期执行过程:[f] d说明:该指令可以通过W寄存器把数据寄存器的内容传送至它处,或对数据寄存器做判0操作。

如果传送的数据为0,则置位Z标志。

CLRW W寄存器的内容清0语法形式:CLRW执行时间:1个周期执行过程:0x00 W 1 Z状态标志影响:Z说明:该指令对W寄存器清0,同时置位0标志Z另外有一条指令movlw 0x00 也可以使W寄存器清0,但不影响任何状态标志。

指令范例:CLRWCLRF 数据寄存器的内容清0语法形式:CLRF f操作数:f为数据寄存器的低7位地址(0x00~0x7f)指令编码:00 0001 1fff ffff执行时间:1个指令周期执行过程:0x00 f1 Z状态标志影响:Z说明:该指令对数据寄存器清0,同时置位0 标志Z指令范例:CLRF TRISBSUBWF 数据寄存器的内容和W寄存器相减语法形式:SUBWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7f)d=f, 结果放在数据寄存器内,W的内容不变d=w,结果放在W寄存器内,数据寄存器的内容不变指令编码:00 0010 dfff ffff执行时间:1个指令周期执行过程:[f]-[W] d状态标志影响:Z DC C说明:必须特别注意W寄存器在这条减法指令里是减数如果f=W,相减的的结果为零,则Z=1如果f>W,没有借位发生,则C=1如果f<W ,有借位发生,则C=0实际上在PIC单片机内部这条减法指令的执行是先对W寄存器求补码,然后与被减数相加,所以判别是否有借位标志时和其他常见的单片机正好相反,编写程序时要千万小心指令范例:MOVLW 0x23 ;W=0x23MOVWF tmp ;tmp=0x23MOVLW 0x32 ;W=0x32SUBWF tmp,W;W=tmp – W=0xf1,tmp=0x23;tmp< W,所以C=0ADDWF 数据寄存器的内容和W寄存器相加语法形式:ADDWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7f)d=f, 结果放在数据寄存器内,W的内容不变d=w,结果放在W寄存器内,数据寄存器的内容不变指令编码:00 0111 dfff ffff执行时间:1个指令周期执行过程:[f]+[W] d状态标志影响:Z DC C说明:数据寄存器的内容和W寄存器相加,结果按照d指定的目的地存放指令范例:MOVLW 0x55 ;W=0x55,假定Sum=0xaaADDWF Sum,f ;W不变,Sum=0xffIORWF 数据寄存器的内容和W寄存器做逻辑或操作语法形式:IORWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7f)d=f, 结果放在数据寄存器内,W的内容不变d=w,结果放在W寄存器内,数据寄存器的内容不变指令编码:00 0100 dfff ffff执行过程:[f] | [W] d状态标志影响:Z说明:数据寄存器的内容和W寄存器相或,结果按照d指定的目的地存放。

第4章PIC指令系统

第4章PIC指令系统
如果“d”为1,结果存回到寄存器“f”。
PIC单片机原理
例:已知(50H)=5AH,(30H)=60H,(FSR)=50H ,
(40H)=00H MOVF 40H,F ;结果 Z=1
MOVF 50H,W ;结果(W)=5AH,Z=0 MOVLW 20H ;结果(W)=20H,Z=? MOVWF 30H ;结果(30H)=20H,Z= ?
W 和f 异或运算
操作数: 0 ≤ f ≤ 127
d ∈ [0,1]
操作: (W) .XOR. (f) 目标寄存器)
受影响的状态位:Z
说明: W 寄存器与“f”寄存器的内容进行异或运
算。 如果“d”为0,结果存入W。 如果“d”为1,
结果存回到寄存器“f”。
PIC单片机原理
11)
ANDLW k
PIC单片机原理
4)
DECFSZ f,d f
减1,为0 则跳过
操作数: 0 ≤ f ≤ 127
d ∈ [0,1]
操作:(f) - 1 目标寄存器) ;如果结果为0 则跳过 ( 受影响的状态位:无 说明:寄存器“f”的内容递减, 如果“d”为0,结果存入 W 寄存器。如果“d”为1,结果存回到寄存器“f”。如果 结果非0,执行下一个指令。如果结果为0,则执行NOP 指令,使其成为2TCY 的指令。
ADDWF INDF,W ;(W)=5AH,Z=0,C=0 ,DC=0
SUBWF 30H ,F ;(30H)-(W) =06H,Z=0,C= ? ,DC=?
PIC单片机原理
3、逻辑运算类指令
1) CLRF f 操作: 00h (f)
有14条
f 清零 ;1 Z
操作数: 0 ≤ f ≤ 127

指令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的源程‎序并没有要‎求统一的格‎式,大家可‎以根据自己‎的风格来编‎写。

PIC中档单片机汇编指令详解(5)

PIC中档单片机汇编指令详解(5)

PIC中档单片机汇编指令详解(5)
位操作指令详述BCF 数据寄存器指定位清0
语法形式:BCF f,b
操作数:f 为数据寄存器的低7 位地址(0x00~0x7F)
B 为数据位编号(0~7)
执行时间:一个指令周期
执行过程:使数据寄存器f 的的b 位清0
状态标志影响:无
说明:该指令可对任何数据寄存器的任意一个位置清0,常用于标志位的设定和清除,或者把某一管脚置成低电平。

指令范例:BCF STATUS,C ;进位(借位)标志C 清0
BCF PORTD,7 ;PORTD 的第7 位输出低电平
BSF 数据寄存器的指定位b 置1
语法形式:BSF f,b
操作数:f 为数据寄存器的低7 位地址(0x00~0x7F)
b 为数据位编号(0~7)
执行时间:一个指令周期
执行过程:使数据寄存器f 的的b 位置1
状态标志影响:无
说明:该指令可对任何数据寄存器的任意一个位置置1,常用于标志位的设定和清除,或者把某一管脚置成高电平。

指令范例:
BSF INTCON,GIE ;INTCON 寄存器的GIE 位置1,打开全局中断。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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进制调整-&gt;F/W+F)
REG1=0XA5 C=0 DC=0-&gt;0X05 C=1 DC=0
20.DECREMENT F
DECF CNT,1(寄存器内容减1-&gt;W/F)
21.DECREMENT F,SHIP IF 0
DECFSZ CNT,1
LCALL LOW 调用子程序(指令只含低8位地址)
30.MOVE F
MOVF REG,0 ((REG)-&gt;W)
31.MOVE F TO P
MOVFP F,P (F:00H-FFH P:00H-1FH)
55.TABLE L
SUBLW K
K-(W)-&gt;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-&gt;0X52 (传至高4位 低4位为0)
34.MOVE LITERAL TO W
MOVLW 0X5A W=0X5A (立即数传至W)
35.MOVE P TO F
MOVPF REG1,REG2 (F:00H-FFH P:00H-1FH)
把某外围接口寄存器内容传至数据存储单元
10.BIT TOGGLE F
BTG F,B
BTG PROTC,4 位取反 PORTC=0111 0101-&gt;0110 0101
11.SUBROUTINE CALL
CALL 调用子程序
12.CLEAR F
CLRF FLAG_REG (F清零 置Z=1)
13.CLEAR W REGISTER
MOVFP REG1,REG2
把数据存储单元传至某外围接口寄存器内容
32.MOVE LITERAL TO LOW NIBBLE IN BSR
MOVLB 0XA5 BSR=0X22-&gt;0X25(传立即数至BSR寄存器低4位 高4位为0)
33.MOVE LITERAL TO HIGH NIBBLE IN BSR
36.MOVE W TO F
MOVWF REG ((W)-&gt;REG)
37.NEGATE W
NEGW REG 0 (REG取反-&gt;F/F+W)取反的规则???P251
38.NO OPERATION
NOP
无操作 占用一个指令周期 PC+1
39.LOAD OPTION REGISTER
无进位循环左移
45.ROTATE RIGHT F THROUGH CARRY
RRF F,D/RRCF F,D
RRF REG1,0
REG1=1110 0110-&gt;1110 0110 C=1-&gt;0 W=0111 0011
46.ROTATE RIGHT F NO CARRY
RRNCF F,D
PARE F WITH W,SHIP IF F=W
CPFSEQ REG
PARE F WITH W,SHIP IF F&gt;W
CPFSGT REG
PARE F WITH W,SHIP IF F&lt;W
CPFSLT REG
19.DECIMAL ADJUST W REGISTER
dt 0
dt 1,2,&#39;3&#39;;retlw 1 ;retlw 2
;retlw 0x33(&#39;3&#39;)
dt &quot;abc&quot; ;retlw &#39;a&#39; ;retlw &#39;b&#39;
伪指令
#include p16f877a.inc
list p=16f877a,r=dec
__config
__idlocs(用户利用它存放程序版本或日期等) __idlocs 0x1234
errorlevel 0,-302,-305 (编译信息输出显示等级及对对某些信息的单独设定)
TBLAT中一个字节传至F T=0传高字节 T=1传低字节;TBLPTR指向的程序存储单元内容传至表锁存器TBLAT;I=1 TBLPTR+1 I=0 TBLPTR不变 存储单元的值为何改变?????周期2 若F=PC则3周期
54.TABLE WRITE
TABWT T,I,F
TABWT 0,1,REG
ADDLW 0X15
W=0X10-&gt;0X25
2.ADD W TO F
ADDWF F,D ((W)+(F)-&gt;W/F)
ADDWF REG1,0 ADDWF FSR,1
3.ADD W AND CARRY D TO F
ADDWFC F,D
ADDWFC FSR,1 (W+FSR+C-&gt;FSR)
RLF F,D/RLCF F,D
F(N)-&gt;D(N+1) F(7)-&gt;C C-&gt;D(0)
RLF REG1,0
REG1=1110 0110-&gt;1110 0110 C=0-&gt;1 W=1100 1100
44.ROTATE LEFT F NO CARRY
RLNCF F,D
CALL TABLE
TABLE ADDWF PC
RETLW K1
RETLW K2
...
RETLW KN
-&gt;W=0X07-&gt;W=K7?????
42.RETURN FROM SUBROUTINE
RETURN (TOS-&gt;PC 指令周期2)
43.ROTATE LEFT F THROUGH CARRY
无进位循环右移
47.SET F
SETF F,S
SETF REG,0
WREG=0X05-&gt;0XFF REG=0XDA-&gt;0XFF
48.SLEEP
OOH-&gt;WDT 0-&gt;WDT预分频器 1-&gt;TO&#39;(定时时间) 0-&gt;PD&#39;掉电状态
49.SUBTRACT W FROM LITERAL
#define/#undefine #define KEY1 PORTB,7
equ w_temp equ 0x20
cblock+endc: cblock 0x20 w_temp buffer:8 var1 endc
org 0x00
dt(定义表格数据 代替retlw)table addwf pcl,f
4.AND LITERAL AND W
ANDLW K
ANDLW 0x5F((W)并0x5F-&gt;W)
5.AND W WITH F
ANDWF F,D
ANDWF FSR 1 (W并FSR-&gt;W/F)
6.BIT CLEAR F
BCF F,B
BCF FLAG_REG,7 将FLAG_REG的D7清0
end
宏指令
banksel、pagesel、bankisel、clrc、setc、clrz、setz、clrdc、setdc、skpc、skpnc、skpdc、skpndc、bc、bnc、bz、bnz、bdc、bndc
macro自定义宏
1.ADD LITERAL TO W
ADDLW K (W)+K-&gt;W加立即数至W
24.INCREMENT F
INCF CNT,1(指令加1)
CNT=0XFF Z=0 -&gt;CNT=0X00 Z=1 C=1
25.INCREMENT F,SHIP IF 0
INCFSZ F,D
26.INCREMENT F,SHIP IF NOT 0
INCFSNZ F,D
27.INCLUSIVE OR LITERAL WITH W
REG=0X53-&gt;0X53 TBLATH=0XAA-&gt;0X53 TBLATL=0X55-&gt;0X55
TBLPTR=0XA356-&gt;0XA357存储单元=0XFFFF-&gt;0X5355
F值传至16为TBLAT表锁存器 T=0传低字节 T=1传至高字节;TBLAT内容写入TBLPTR指向的程序存储器单元;I=1 TBLPTR+1 I=0 TBLPTR不变 指令周期2若F=PC 这周期3
SUBWFB F,D
(F)-(W)-C-&gt;F/W带借位F-W减法
相关文档
最新文档