指令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指令集
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单片机:从管脚到指令,一看就懂展开全文这个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指令集
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汇编指令集概述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 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常用指令
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 单片机是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汇编指令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 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汇编指令集概述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指令集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指令系统
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的指令详解
伪指令#i nclud e p16f877a.inclistp=16f877a,r=dec__co nfig__idl ocs(用户利用它存放程序版本或日期等) __id locs0x1234err orlev el 0,-302,-305(编译信息输出显示等级及对对某些信息的单独设定)#defi ne/#u ndefi ne #d efine KEY1 PORT B,7e qu w_tempequ 0x20c block+endc: cbl ock 0x20 w_temp buff er:8var1endcorg 0x00d t(定义表格数据代替retl w)tab le a ddwfpcl,fdt 0dt 1,2,'3';ret lw 1;retlw 2 ;ret lw 0x33('3')dt"abc" ;r etlw'a' ;re tlw 'b' ;ret lw 'c'de(源程序中定义片内ee prom的初值其实地址0x2100)org 0x2100de 0,1,2,3de "ABCD";定义8个字节f ill(填充程序空间) fil l 0x0000,5fill(goto $),n ext_b loclk-$ (从当前填充至标号nex t)死循环end宏指令banks el、pa gesel、bank isel、clrc、setc、clrz、setz、clrdc、setd c、skp c、skp nc、sk pdc、s kpndc、bc、b nc、bz、bnz、bdc、b ndcm acro自定义宏1.ADD LITE RAL T O WA DDLWK (W)+K->W加立即数至WADD LW 0X15W=0X10->0X252.AD D W T O FA DDWFF,D ((W)+(F)->W/F)A DDWFREG1,0 ADD WF FS R,13.ADDW AND CARR Y D T O FA DDWFC F,DADDWF C FSR,1 (W+FSR+C->FS R)4.AND L ITERA L AND WAN DLW KANDL W 0x5F((W)并0x5F->W)5.AND W WI TH FANDWF F,DANDWF FSR1 (W并FSR->W/F)6.BIT CLEA R FB CF F,BBCF FLAG_REG,7 将FL AG_RE G的D7清07.B IT SE T FB SF F,BBSF PROT A,0 PROT A的D0置18.BIT T EST,S KIP I F CLE ARBT FSC F,BBT FSC F LAG,1 FALS E TRU E位测试0跳转9.BITTEST,SKIPIF SE TBTF SS F,BBTF SS FL AG,1FALSE TRUE位测试1跳转10.BITTOGGL E FB TG F,BBTG PROT C,4 位取反 PO RTC=0111 0101->0110010111.SU BROUT INE C ALLC ALL 调用子程序12.CL EAR FCLRF FLAG_REG(F清零置Z=1)13.C LEARW REG ISTERCLRW (W清零置Z=1)14.CLEAR WATC HDOGTIMERCLRW DT(监视定时器清零 00h->WDT0->WD T预定标器 1->T O' 1->PD') 15.C OMPLE MENTFCOM F REG1,0(寄存器内容取反->W/F)1P ARE F WITH W,SH IP IF F=WCPFS EQ R EG1P ARE F WITH W,SH IP IF F>WCPFSG T REG18.C OMPAR E F W ITH W,SHIP IF F<WCP FSLTREG19.DEC IMALADJUS T W R EGIST ERD AW RE G1,0(对F中内容进行10进制调整->F/W+F)RE G1=0X A5 C=0 DC=0->0X05 C=1 DC=020.DECRE MENTFDEC F CNT,1(寄存器内容减1->W/F)21.DECRE MENTF,SHI P IF0DEC FSZ C NT,1GOTO...C ONTIN UE ...(减1后为0跳转至CONTI NUE)22.DE CREME NT F,SHIOIF NO T 0D ECFSN Z CNT,0GO TO ...CON TINUE ...(减1后不为0跳转至C ONTIN UE)23.UNC ONDIT IONAL BRAN CH24.I NCREM ENT FINCF CNT,1(指令加1)CN T=0XF F Z=0 ->CN T=0X00 Z=1 C=125.IN CREME NT F,SHIPIF 0INCFS Z F,D26.I NCREM ENT F,SHIP IF N OT 0INCFS NZ F,D27.INCLU SIVEOR LI TERAL WITH WIO RLW 0X35((W)或0X35->W)28.INCLU SIVEOR WWITHFIOR WF RE SULT,1 ((W)或RES ULT->RESUL T)29.LONG CALL长调用指令???和CALL有区别???MOV LW HI GH 高位地址MO VPF W REG,P CLATH存放在P CLATH中LCA LL LO W 调用子程序(指令只含低8位地址)30.MOV E FM OVF R EG,0((REG)->W)31.M OVE F TO PMOVF P F,P (F:00H-FF H P:00H-1F H)MO VFP R EG1,R EG2把数据存储单元传至某外围接口寄存器内容32.MOV E LIT ERALTO LO W NIB BLE I N BSRMOVL B 0XA5 BSR=0X22->0X25(传立即数至BSR寄存器低4位高4位为0) 33.MOV E LIT ERALTO HI GH NI BBLEIN BS RMOV LR 5BSR=0X22->0X52(传至高4位低4位为0)34.MOV E LIT ERALTO WMOVLW 0X5A W=0X5A (立即数传至W)35.MOVEP TOFMOV PF RE G1,RE G2 (F:00H-FFHP:00H-1FH)把某外围接口寄存器内容传至数据存储单元36.M OVE W TO FMOVW F REG ((W)->REG)37.NEGAT E WN EGW R EG 0(REG取反->F/F+W)取反的规则???P25138.NO OP ERATI ONNO P无操作占用一个指令周期PC+139.LO AD OP TIONREGIS TER(W)->O PTION只为可移植至PIC16C6X不建议使用40.RETUR N FRO M INT ERRUP TRET FIE TOS->PC 1->GIE(中断允许位GIE开放中断)指令周期241.RE TURNLITER AL TO WK->W TOS->PC(立即数传至W并返回地址至PC)指令周期2 CAL L TAB LETA BLE ADDW F PCRETL W K1RETL W K2...RETL W KN->W=0X07->W=K7?42.RE TURNFROMSUBRO UTINERETU RN (T OS->P C 指令周期2)43.ROT ATE L EFT F THRO UGH C ARRYRLF F,D/RL CF F,DF(N)->D(N+1)F(7)->C C->D(0)RLFREG1,0RE G1=1110 0110->1110 0110 C=0->1 W=1100 110044.ROTA TE LE FT FNO CA RRYR LNCF F,D无进位循环左移45.ROT ATE R IGHTF THR OUGHCARRYRRFF,D/R RCF F,DRR F REG1,0R EG1=1110 0110->11100110C=1->0 W=0111 001146.ROT ATE R IGHTF NOCARRYRRNC F F,D无进位循环右移47.SE T FS ETF F,SSE TF RE G,0W REG=0X05->0XFFREG=0XDA->0XFF48.SL EEPO OH->W DT 0->WDT预分频器1->TO'(定时时间) 0->PD'掉电状态49.SUBT RACTW FRO M LIT ERALSUBLW KK-(W)->WMOV LW 01HSUB LW 02H W=01H C=1结果为正MOV LW 02HSU BLW 02H W=0 C=1结果为0MOVL W 02HSUBL W 01H W=FF C=0结果为负50.SU BTRAC T W F ROM FSUBW F F,DM OVWFREG1MOVLW 2SU BWF R EG1,0 W=1C=1MOVLW 2MO VWF R EG1M OVLW2SUB WF RE G1,0W=0 C=1M OVLW2MOV WF RE G1MO VLW 3SUBW F REG1,0 W=FF C=051.SUB TRACT W FR OM FWITHBORRO WSUB WFB F,D(F)-(W)-C->F/W带借位F-W减法MOVL W 4M OVWFREG1MOVWF REG1MOVL W 2S UBWFB REG1,0 设C初始为1则W=1C=152.SWA P FS WAPFF,DS WAPFREG1,1REG1=0XA5->0X A5 W=0X5AREG1=0X5A?53.TA BLE R EADT ABLRD T,I,FTAB LRD 1,1,RE GREG=OX53->0XA A TBL ATH=0XAA->0X12TBLAT L=0X55->0X34TB LPTR=0XA356->0X A3567存储单元=0X1234->0X5678传高字节???TBLA T中一个字节传至FT=0传高字节 T=1传低字节;TBLP TR指向的程序存储单元内容传至表锁存器T BLAT;I=1 T BLPTR+1 I=0 TBL PTR不变存储单元的值为何改变?????周期2若F=PC则3周期54.TABLE WRIT ETA BWT T,I,FTABWT 0,1,REGR EG=0X53->0X53 T BLATH=0XAA->0X53 TBL ATL=0X55->0X55TBLP TR=0X A356->0XA357存储单元=0XF FFF->0X5355F值传至16为T BLAT表锁存器T=0传低字节 T=1传至高字节;TBLA T内容写入TBLPT R指向的程序存储器单元;I=1 TBLP TR+1I=0 T BLPTR不变指令周期2若F=PC 这周期355.TAB LE LA TCH R EADT LRD T,F 表锁存读T BLATH=0X00 TBLA TL=0X AF T=0 RAM=0XAF TBLA TH=0X00 TB LATL=0XAF56.TA BLE L ATCHWRITETLWT T,F表锁存写RAM=0XB7 T BLATH=0X00 TBLA TL=0X00 T=0 RAM=0XB7 TBLA TH=0X00 TB LATL=0XB757.LO AD TR IS RE GISTE R I/O控制寄存器TRIS设置指令不建议使用58.T EST F,SKIP IF 0TSTF SZ CN T F等于0跳转G OTO ...(CN T!=0)ZERO (CNT==0)59.EX CLUSI VE OR LITE RAL W ITH WXORL W K (W)异或K->WX ORLW0XAFW=0XB5->0X1A60.EXCL USIVE OR W WITH FXO RWF F D (W)异或(F)->(W)(F)XORWF REG1,1W=0XB5->0XB5 REG1=0XAF->0X1A直观助记符:BCF 3,0(进位位C清零)=CLRCBSF3,0(进位位C置1)=SET CCLR DC BC F 3,1SETD C BSF 3,1CLRZBCF 3,2SE TZ BS F 3,2SKPC(有进位间跳)=BT FSS 3,0SK PNC(无进位间跳)=BTFS C 3,0SKPD C BTF SS 3,1SKP NDC B TFSC3,1S KPZ B TFSS3,2S KPNZBTFS C 3,2影响Z???TS TF F(测试寄存器是否全零)=MOV F F,1影响ZMOVF W F((F)->W) MOV F F,0影响ZNEGFF,D取补码COM F F,1影响ZADDCF F,D内容加进位BTFSC 3,0影响Z ???为0跳转IN CF F,DSUB CF F,D内容减进位BTF SC 3,0DECF F,DADDDC F F,D BTF SC 3,1INCFF,DS UBDCF F,DBTFS C 3,1D ECF F,DB K 无条件转移GOTO KBC K 有进位转移BTFSC 3,0GO TO KBNC K无进位转移BTF SS 3,0GOTOKBDC K BTF SC 3,1GOTO KBN DC KBT FSS 3,1GOTO KBZ K BTFS C 3,2G OTO KBNZK B TFSS3,2GOT O K清零CL RW CL RF CL RWDT算术运算ADDLW K A DDWFF,D S UBLWK SU BWF F,D DE CF F,D INC F F,D逻辑运算ANDL W K ANDWF F,DIORLW K或I ORWFF,D X ORLWK异或XORWF F,DRLF F,D RRF F,D MOVLW K M OVF F,D MO VWF F NOP半字节交换指令SW APF F,D可用于中断现场保护:MOV F W-T EMP S WAPFSTATU S,W MOVWF S-TE MP-->SWAPF S-TE MP,WSWAPF STAT US,WSWAPF W-TE MP,W(W置于后一操作数?)子程序调用CAL L G OTO跳转(CAL L都是无返回值的?C ALL的子程序都是无参数?)取反COM F F,DDECF SZ F,D INC FSZ F,D位操作BSFF,B BCF F,B B TFSSF,B B TFSCF,B返回RETL W K R ETURN SLE EP RE TFIE(RETUR N FRO MINT ERRUP T WIT H ENA BLE)懒得算延时:3X Y+4X+5(x外循环Y内循环)255-->19610020mhz 0.05us T=0.2us1、程序的基本格式先介绍二条伪指令:EQ U ——标号赋值伪指令O RG ——地址定义伪指令PIC16C5X在R ESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1FFH PIC16C56:3FFHP IC16C57/58:7FFH一般来说,PI C的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)
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->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->0X25(传立即数至BSR寄存器低4位 高4位为0)
33.MOVE LITERAL TO HIGH NIBBLE IN BSR
36.MOVE W TO F
MOVWF REG ((W)->REG)
37.NEGATE W
NEGW REG 0 (REG取反->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->1110 0110 C=1->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>W
CPFSGT REG
PARE F WITH W,SHIP IF F<W
CPFSLT REG
19.DECIMAL ADJUST W REGISTER
dt 0
dt 1,2,'3';retlw 1 ;retlw 2
;retlw 0x33('3')
dt "abc" ;retlw 'a' ;retlw 'b'
伪指令
#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->0X25
2.ADD W TO F
ADDWF F,D ((W)+(F)->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->FSR)
RLF F,D/RLCF F,D
F(N)->D(N+1) F(7)->C C->D(0)
RLF REG1,0
REG1=1110 0110->1110 0110 C=0->1 W=1100 1100
44.ROTATE LEFT F NO CARRY
RLNCF F,D
CALL TABLE
TABLE ADDWF PC
RETLW K1
RETLW K2
...
RETLW KN
->W=0X07->W=K7?????
42.RETURN FROM SUBROUTINE
RETURN (TOS->PC 指令周期2)
43.ROTATE LEFT F THROUGH CARRY
无进位循环右移
47.SET F
SETF F,S
SETF REG,0
WREG=0X05->0XFF REG=0XDA->0XFF
48.SLEEP
OOH->WDT 0->WDT预分频器 1->TO'(定时时间) 0->PD'掉电状态
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->W)
5.AND W WITH F
ANDWF F,D
ANDWF FSR 1 (W并FSR->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->W加立即数至W
24.INCREMENT F
INCF CNT,1(指令加1)
CNT=0XFF Z=0 ->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->0X53 TBLATH=0XAA->0X53 TBLATL=0X55->0X55
TBLPTR=0XA356->0XA357存储单元=0XFFFF->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->F/W带借位F-W减法