PAGE1
PAGE1
PIC18系列指令集
1.指令集概述
PIC18系列单片机的指令集是基于RISC(ReducedInstructionSetComputer)架构的,旨在提供高效的执行速度和简洁的编程模型。PIC18系列的指令集包含了一系列用于控制和管理CPU、存储器、I/O端口以及各种外设的指令。这些指令被分类为不同的类型,每种类型都有其特定的功能和用途。
1.1指令格式
PIC18系列单片机的指令格式分为两种:14位和16位。14位指令主要用于简单的操作,而16位指令则提供了更多的功能和更复杂的操作。指令格式的详细说明如下:
14位指令格式:
位13-12:操作码(Opcode)
位11-8:目标寄存器(FileRegister)
位7-4:源寄存器或立即数(FileRegisterorLiteral)
位3:目标寄存器的访问模式(AccessMode)
位2:源寄存器的访问模式(AccessMode)
位1-0:操作类型(OperationType)
16位指令格式:
位15-14:操作码(Opcode)
位13-12:目标寄存器(FileRegister)
位11-8:目标寄存器的扩展地址(ExtendedAddress)
位7-4:源寄存器或立即数(FileRegisterorLiteral)
位3:目标寄存器的访问模式(AccessMode)
位2:源寄存器的访问模式(AccessMode)
位1-0:操作类型(OperationType)
1.2指令分类
PIC18系列的指令集可以分为以下几类:
数据传输指令:用于在寄存器、存储器和I/O端口之间传输数据。
算术和逻辑指令:用于执行基本的算术和逻辑运算。
控制转移指令:用于改变程序的执行流程。
位操作指令:用于对特定的位进行操作。
特殊功能指令:用于执行特定的硬件操作。
2.数据传输指令
数据传输指令是PIC18系列中最常用的一类指令,它们用于在寄存器、存储器和I/O端口之间移动数据。这些指令包括MOV、MOVF、MOVWF等。
2.1MOV指令
MOV指令用于将一个寄存器或立即数的值移动到另一个寄存器或存储器地址中。它有以下几种形式:
MOVWF:将WREG寄存器的值移动到指定的文件寄存器。
MOVFW:将指定文件寄存器的值移动到WREG寄存器。
MOVF:将指定文件寄存器的值移动到另一个文件寄存器或WREG寄存器。
MOVLF:将立即数移动到指定的文件寄存器。
2.1.1MOVWF指令
MOVWF指令的作用是将WREG寄存器的值移动到指定的文件寄存器中。
语法:
MOVWFf
参数:
f:目标文件寄存器地址。
示例:
假设我们需要将WREG寄存器的值(0x12)移动到文件寄存器0x20中:
;将立即数0x12加载到WREG寄存器
MOVLW0x12
;将WREG寄存器的值移动到文件寄存器0x20
MOVWF0x20
2.1.2MOVFW指令
MOVFW指令的作用是将指定文件寄存器的值移动到WREG寄存器中。
语法:
MOVFWf
参数:
f:源文件寄存器地址。
示例:
假设我们需要将文件寄存器0x20的值移动到WREG寄存器中:
;将文件寄存器0x20的值移动到WREG寄存器
MOVFW0x20
2.1.3MOVLW指令
MOVLW指令用于将立即数加载到WREG寄存器中。
语法:
MOVLWk
参数:
k:8位立即数。
示例:
假设我们需要将立即数0x34加载到WREG寄存器中:
;将立即数0x34加载到WREG寄存器
MOVLW0x34
2.1.4MOVLF指令
MOVLF指令用于将立即数移动到指定的文件寄存器中。
语法:
MOVLFk,f
参数:
k:8位立即数。
f:目标文件寄存器地址。
示例:
假设我们需要将立即数0x56移动到文件寄存器0x21中:
;将立即数0x56移动到文件寄存器0x21
MOVLF0x56,0x21
3.算术和逻辑指令
算术和逻辑指令用于执行基本的算术和逻辑运算,如加法、减法、位与、位或等。这些指令包括ADD、SUB、AND、OR等。
3.1ADD指令
ADD指令用于将WREG寄存器的值与指定文件寄存器的值相加,并将结果存储在WREG寄存器或指定文件寄存器中。
语法:
ADDWFf,d
参数:
f:源文件寄存器地址。
d:目标选择,0表示结果存储在WREG寄存器,1表示结果存储在f寄存器。
示例:
假设我们需要将文件寄存器0x20的值与WREG寄存器的值相加,并将结果存储在文件寄存器0x20中:
;假设0x20的值为0x12,WREG的值为0x34
;将0x20的值与WREG