热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:PIC指令系统

本文由编程笔记#小编为大家整理,主要介绍了PIC指令系统相关的知识,希望对你有一定的参考价值。宏观理解
本文由编程笔记#小编为大家整理,主要介绍了PIC指令系统相关的知识,希望对你有一定的参考价值。



宏观理解

技术分享图片


核心助记符


















































































助记符功能说明英文全称
ADD相加add
SUB相减substract
RL循环左移rotate left
RR循环右移rotate right
ANDand
IORinclusive or
XOR异或exclusive or
COM取反complement
INC加1increase
DEC减1decrease
MOV传送move
CLR清零clear
RET返回return
BTF位测试bit test

指令系统补充字符说明








































































字符功能说明英文全称
W工作寄存器(即累加器)-
f寄存器地址(取7位寄存器地址,00H~7FH)-
b8位寄存器f内位地址(0~7)bit
K立即数(8位常数或11位地址)、常量或标号-
L指令操作数中含有8位立即数K-
d目标地址选择:d=0,结果至W;d=1,结果至fdestination
FSZ寄存器f为0,则间跳skip if 0
FSC寄存器f的b位为0,则间跳skip if clear
FSS寄存器f的b位为1,则间跳skip if set
( )表示寄存器的内容-
(( ))表示寄存器间接寻址的内容-
表示运算结果送入目标寄存器-

常用指令实例


指令没找到?点这里查找芯片手册



标志位寄存器:STATUS

技术分享图片


寄存器加1指令:INCF

【格式】 INCF F,d

【功能】寄存器F加1

【说明】

(1)INCF是Increment F的缩写;

(2)在PIC系列8位单片机中,常用符号F代表片内的各种寄存器和F的序号地址;

(3)d=0时,结果存入W;d=1时,结果存入F。

【实例】

INCF PORTC,1 ;将PORTC加1

寄存器减1指令:DECF

【格式】 DECF F,d

【功能】寄存器F减1

【说明】

(1)DECF是Decrement F的缩写;

(2)d=0时,结果存入W;d=1时,结果存入F。

【实例】

ENCODER EQU 0X21
……
DECF ENCODER,1 ;将ENCODER减1

寄存器清零指令:CLRF

【格式】 CLRF F

【功能】寄存器清零

【说明】

(1)CLRF是Clear F的缩写;

(2)F寄存器被清为全0,使状态位Z=1。

【实例】

CLRF TRISC ;对TRISC 清零

W清零指令:CLRW

【格式】 CLRW

【功能】寄存器W清零

【说明】

(1)CLRW是Clear W的缩写;

(2)W为PIC单片机的工作寄存器;

(3)W寄存器被清为全0,使状态位Z=1。

【实例】

CLRW ;W=00H

F寄存器传送指令:MOVF

【格式】 MOVF F,d

【功能】将F寄存器内容传送到F或W

【说明】

(1)MOVF是Move F的缩写;

(2)当d=1时,传到F本身;当d=0时,传到W;

(3)影响状态位Z

【实例】

MOVF PORTB,0 ;PORTB口内容送W
MOVWF PORTA  ;W内容即PORTB口内容送PORTA

W寄存器传送指令:MOVWF

【格式】 MOVWF F

【功能】 W寄存器传送

【说明】

(1)MOVWF是Move W to F的缩写;

(2)将W寄存器内容传到F,W内容不变;

(3)不影响状态位。

【实例】

MOVLW 0x0B ;送0BH送W
MOVWF PORTB ;送W内容到PORTB口

递增跳转指令:INCFSZ

【格式】 INCFSZ F,d

【功能】 递增跳转

【说明】

(1)INCFSZ是Increment F,Skip if 0的缩写;

(2)F寄存器内容加1后,当d=1时结果存入F,当d=0时存入W;

(3)若结果为0则跳过下一条指令,否则顺序执行;

(4)影响状态位Z。

【实例】

LOOP INCFSZ COUNT1,1 ;COUNT1加1,结果存到COUNT1
GOTO LOOP  ;结果不为零,循环
MOVWF COUNT2 ;结果为零时,执行该语句

递减跳转指令:DECFSZ

【格式】 DECFSZ F,d

【功能】递减跳转

【说明】

(1)DECFSZ是Decrement F,Skip if 0的缩写;

(2)F寄存器内容减1,结果存入F本身(d=1)或W(d=0);

(3)如果结果为0则跳过下一条指令,否则顺序执行;

(4)影响状态位Z;

(5)实际指令中,当d=1时,该项常常被略去。

【实例】

DELAY MOVLW 25 ;延时子程序
MOVWF N ;给N赋值25
LOOP DECFSZ N,1 ;N-1送回N并判结果=0?是!跳出循环
GOTO LOOP ;否!循环回去
RETURN ;返回

位清零指令:BCF

【格式】 BCF F,B

【功能】位清0

【说明】

(1)BCF是Bit Clear F的缩写;

(2)符号B是表示片内某个8位数据寄存器F的位号(或位地址);

(3)指令的意思是:将寄存器的第B位清0。

【实例】

BCF REG1,2 ;把寄存器REG1的第2位清零

位置1指令:BSF

【格式】 BSF F,B

【功能】位置1

【说明】(1)BSF是Bit Set F的缩写;

(2)将寄存器F的第B位置1。

【实例】

BSF STATUS,RP0 ;设置文件寄存器的体1

位测试为零跳转指令:BTFSC

【格式】 BTFSC F,B

【功能】位测试为0跳转

【说明】

(1)BTFSC是Bit Test,Skip if Clear的缩写;

(2)测试F寄存器的第B位,若F(B)=0则调到下一条指令,否则顺序执行。

【实例】

BTFSC PORTB,0 ;检测PORTB口中的第0位是否为0?是!跳过下一条指令
GOTO CHECK ;否!则转到标号为CHECK的语句
CALL DELAY ;PORTB的第0位是1则直接执行该语句,调用延时子程序

位测试为1跳转指令:BTFSS

【格式】 BTFSS F,B

【功能】位测试位1跳转指令

【说明】

(1)BTFSS是Bit Test F,Skip if Set的缩写;

(2)测试F寄存器的第B位,若F(B)=1,则跳转到下一条指令,否则顺序执行。

【实例】

BTFSS PORTB,0 ;检测PORTB口中的第0位是否为1?是!跳过下一条指令
GOTO CHECK ;否!则转到标号为CHECK的语句
CALL DELAY ;PORTB的第0位是1则直接执行该句,调用延时子程序

常数传送指令:MOVLW

【格式】 MOVLW K

【功能】常数传送

【说明】(1)MOVLW是Move literal to W的缩写;

(2)将8位立即数传送到W寄存器,k表示常数、立即数和标号;

(3)不影响状态位

【实例】

MOVLW 0x1E ;常数30送W

子程序调用指令:CALL

【格式】 CALL K

【功能】子程序调用

【说明】

(1)CALL是CALL subroutine的缩写;

(2)K为立即地址;

(3)不影响状态位。

【实例】

CALL DELAY ;调用延时子程序
DELAY …… ;延时子程序DELAY
……
RETURN

无条件跳转指令:GOTO

【格式】 GOTO K

【功能】无条件跳转

【说明】

(1)GOTO是Go to address的缩写;

(2)指令中的K,常与程序中的标号联系起来;

(3)不影响状态位。

【实例】

STOP GOTO STOP ;循环执行GOTO语句,从而停机

子程序返回指令:RETURN

【格式】 RETURN

【功能】子程序返回

【说明】

(1)RETURN是Return from Subroutine的缩写;

(2)将堆栈顶端单元内容弹出并送入PC,从而返回主程序断点处;

(3)不影响状态位。

【实例】

SUB MOVLW 01H ;子程序
……
RETURN ;子程序返回

空操作指令:NOP

【格式】 NOP

【功能】空操作

【说明】

(1)NOP是No Operation的缩写;

(2)不产生任何操作,仅使PC加1,消耗一个指令周期NOP;

(3)不影响状态位。

【实例】

MOVLW 0xOF   ;送OFH到W
    
MOVWF PORTB ;W内容写入B口
    
NOP      ;空操作
MOVF PORTB,W ;读操作

常用伪指令实例


符号名赋值伪指令:EQU

【格式】符号名 EQU nn

【功能】符号名赋值

【说明】

(1)给符号名或寄存器赋值,符号名一旦由EQU赋值,其值就不能再重新定义;

(2)nn是一个长度不同的二进制数值。

【实例】

COUNT EQU 100 ;定义COUNT为常数100

程序起始地址伪指令:ORG

【格式】 ORG nnnn

【功能】程序起始地址

【说明】

(1)用于指定该伪指令后面的源程序存放的起始地址,也就是汇编后的机器码目标程序在单片机的程序存贮器中开始存放的首地址;

(2)nnnn是一个13为长的地址参数。

【实例】

ORG 0x00 ;程序汇编地址从00H开始

程序结束伪指令:END

【格式】 END

【功能】程序结束

【说明】

(1)指令末的伪指令END是通知汇编程序MPASM结束对源程序的汇编,即使后面还有语句,也不再予以汇编;

(2)在一个源程序中必须有END伪指令;

(3)只能有一个END;

(4)放在整个程序的最后。

【实例】直接在程序末尾使用,从而结束程序


调入外部函数伪指令:INCLUDE

【格式】 INCLUDE “文件名”

【功能】调入外部函数

【说明】

(1)用来告诉汇编器,将一个预先编好的外部程序文件包含进来,作为本源程序的一部分;

(2)这样可以减少重复劳动,提高编程效率。


汇编指令速查


汇编指令手册下载
















































































































































































































































































































































































































































































































































































































































































































































































































































































指令功能
AAA调整加
AAD调整除
AAM调整乘
AAS调整减
ADC进位加
ADD
AND
ARPL调整优先级
BOUND检查数组
BSF位右扫描
BSR位左扫描
BSWAP交换字节
BT位测试
BTC位测试求反
BTR位测试清零
BTS位测试置一
CALL过程调用
CBW转换字节
CDQ转换双字
CLC进位清零
CLD方向清零
CLI中断清零
CLTS任务清除
CMC进位求反
CMOVA高于传送
CMOVB低于传送
CMOVE相等传送
CMOVG大于传送
CMOVL小于传送
CMOVNA不高于传送
CMOVNB不低于传送
CMOVNE不等传送
CMOVNG不大于传送
CMOVNL不小于传送
CMOVNO不溢出传送
CMOVNP非奇偶传送
CMOVNS非负传送
CMOVO溢出传送
CMOVP奇偶传送
CMOVS负号传送
CMP比较
CMPSB比较字节串
CMPSD比较双字串
CMPSW比较字串
CMPXCHG比较交换
CMPXCHG486比较交换486
CMPXCHG8B比较交换8字节
CPUIDCPU标识
CWD转换字
CWDE扩展字
DAA调整加十
DAS调整减十
DEC减一
DIV
ENTER建立堆栈帧
HLT
IDIV符号整除
IMUL符号乘法
IN端口输入
INC加一
INSB端口输入字节串
INSD端口输入双字串
INSW端口输入字串
JA高于跳转
JB低于跳转
JBE不高于跳转
JCXZ计数一六零跳转
JE相等跳转
JECXZ计数三二零跳转
JG大于跳转
JL小于跳转
JMP跳转
JMPE跳转扩展
JNB不低于跳转
JNE不等跳转
JNG不大于跳转
JNL不小于跳转
JNO不溢出跳转
JNP非奇偶跳转
JNS非负跳转
JO溢出跳转
JP奇偶跳转
JS负号跳转
LAHF加载标志低八
LAR加载访问权限
LDS加载数据段
LEA加载有效地址
LEAVE清除过程堆栈
LES加载附加段
LFS加载标志段
LGDT加载全局描述符
LGS加载全局段
LIDT加载中断描述符
LMSW加载状态字
LOADALL加载所有
LOADALL286加载所有286
LOCK
LODSB加载源变址字节串
LODSD加载源变址双字串
LODSW加载源变址字串
LOOP计数循环
LOOPE相等循环
LOOPNE不等循环
LOOPNZ非零循环
LOOPZ为零循环
LSL加载段界限
LSS加载堆栈段
LTR加载任务
MONITOR监视
MOV传送
MOVSB传送字节串
MOVSD传送双字串
MOVSW传送字串
MOVSX符号传送
MOVZX零传送
MUL
MWAIT
NEG求补
NOP
NOT
OR
OUT端口输出
OUTSB端口输出字节串
OUTSD端口输出双字串
OUTSW端口输出字串
POP出栈
POPA全部出栈
POPF标志出栈
PUSH压栈
PUSHA全部压栈
PUSHF标志压栈
RCL进位循环左移
RCR进位循环右移
RDMSR读专用模式
RDPMC读执行监视计数
RDSHR
RDTSC读时间戳计数
REP重复
REPE相等重复
REPNE不等重复
RET过程返回
RETF远过程返回
RETN近过程返回
ROL循环左移
ROR循环右移
RSM恢复系统管理
SAHF恢复标志低八
SAL算术左移
SALC
SAR算术右移
SBB借位减
SCASB扫描字节串
SCASD扫描双字串
SCASW扫描字串
SETA高于置位
SETB低于置位
SETE相等置位
SETG大于置位
SETL小于置位
SETNA不高于置位
SETNB不低于置位
SETNE不等置位
SETNG不大于置位
SETNL不小于置位
SETNO不溢出置位
SETNP非奇偶置位
SETNS非负置位
SETO溢出置位
SETP奇偶置位
SETS负号置位
SGDT保存全局描述符
SHL逻辑左移
SHLD双精度左移
SHR逻辑右移
SHRD双精度右移
SIDT保存中断描述符
SLDT保存局部描述符
SMI
SMINT
SMINTOLD
SMSW保存状态字
STC进位设置
STD方向设置
STI中断设置
STOSB保存字节串
STOSD保存双字串
STOSW保存字串
STR保存任务
SUB
SYSCALL系统调用
SYSENTER系统进入
SYSEXIT系统退出
SYSRET系统返回
TEST数测试
UD0未定义指令0
UD1未定义指令1
UD2未定义指令2
UMOV
VERW校验写
WAIT
WBINVD回写无效高速缓存
WRMSR写专用模式
WRSHR
XADD交换加
XBTS
XCHG交换
XLAT换码
XOR异或
XSTORE

更多#8658



推荐阅读
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
author-avatar
郝泓帥_169
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有