基本信息
文件名称:Microchip 系列:PIC18 系列_(3).PIC18系列的指令集和编程.docx
文件大小:22.28 KB
总页数:23 页
更新时间:2025-06-18
总字数:约7.71千字
文档摘要

PAGE1

PAGE1

PIC18系列的指令集和编程

指令集概述

PIC18系列单片机的指令集是其核心功能之一,了解和掌握这些指令对于编写高效、可靠的嵌入式程序至关重要。PIC18系列单片机采用增强型RISC(精简指令集计算机)架构,具有丰富的指令集,能够支持多种编程模式和数据操作。PIC18系列的指令集分为基本指令和扩展指令两大类,基本指令包括数据传输、算术逻辑运算、位操作、程序控制等,而扩展指令主要涉及乘法和除法操作。

指令格式

PIC18系列单片机的指令格式非常简洁,每条指令占用14位或16位。指令格式分为以下几种:

14位指令格式:

操作码(Opcode):7位,用于指定指令的类型。

操作数(Operand):7位,用于指定指令的操作对象。

16位指令格式:

操作码(Opcode):10位,用于指定指令的类型。

操作数(Operand):6位,用于指定指令的操作对象。

寻址模式

PIC18系列单片机支持多种寻址模式,包括直接寻址、间接寻址、立即寻址和相对寻址。这些寻址模式使得单片机在处理数据时更加灵活和高效。

直接寻址:操作数直接给出寄存器的地址。

间接寻址:操作数通过寄存器中的地址来访问数据。

立即寻址:操作数直接给出数据值。

相对寻址:操作数给出相对于当前指令地址的偏移量。

基本指令

数据传输指令

数据传输指令用于在寄存器、存储器和I/O端口之间移动数据。常见的数据传输指令包括:

MOVWF:将WREG中的数据移动到指定的文件寄存器。

MOVFW:将文件寄存器中的数据移动到WREG。

CLRF:清除指定的文件寄存器。

CLRW:清除WREG。

SWAPF:交换文件寄存器中的高4位和低4位。

示例

;将WREG中的数据移动到文件寄存器0x10

MOVWF0x10

;将文件寄存器0x10中的数据移动到WREG

MOVFW0x10

;清除文件寄存器0x10

CLRF0x10

;清除WREG

CLRW

;交换文件寄存器0x10中的高4位和低4位

SWAPF0x10,0

算术逻辑指令

算术逻辑指令用于执行基本的数学和逻辑运算。常见的算术逻辑指令包括:

ADDWF:将WREG中的数据与指定文件寄存器中的数据相加,结果存入文件寄存器。

SUBWF:将指定文件寄存器中的数据减去WREG中的数据,结果存入文件寄存器。

ANDWF:将WREG中的数据与指定文件寄存器中的数据进行逻辑与运算,结果存入文件寄存器。

IORWF:将WREG中的数据与指定文件寄存器中的数据进行逻辑或运算,结果存入文件寄存器。

XORWF:将WREG中的数据与指定文件寄存器中的数据进行逻辑异或运算,结果存入文件寄存器。

示例

;将WREG中的数据与文件寄存器0x10中的数据相加,结果存入文件寄存器0x10

ADDWF0x10,1

;将文件寄存器0x10中的数据减去WREG中的数据,结果存入文件寄存器0x10

SUBWF0x10,1

;将WREG中的数据与文件寄存器0x10中的数据进行逻辑与运算,结果存入文件寄存器0x10

ANDWF0x10,1

;将WREG中的数据与文件寄存器0x10中的数据进行逻辑或运算,结果存入文件寄存器0x10

IORWF0x10,1

;将WREG中的数据与文件寄存器0x10中的数据进行逻辑异或运算,结果存入文件寄存器0x10

XORWF0x10,1

位操作指令

位操作指令用于对单个位或多个位进行操作。常见的位操作指令包括:

BSF:设置指定文件寄存器中的某一位。

BCF:清除指定文件寄存器中的某一位。

BTFSC:如果指定文件寄存器中的某一位为1,则跳过下一条指令。

BTFSS:如果指定文件寄存器中的某一位为0,则跳过下一条指令。

示例

;设置文件寄存器0x10中的第1位

BSF0x10,1

;清除文件寄存器0x10中的第3位

BCF0x10,3

;如果文件寄存器0x10中的第4位为1,则跳过下一条指令

BTFSC0x10,4

GOTONEXT

;如果文件寄存器0x10中的第5位为0,则跳过下一条指令

BTFSS0x10,5

GOTONEXT

NEXT:

;下一条指令

程序控制指令

程序控制指令用于控制程序的执行流程。常见的程序控制指令包括:

GOTO:无条件跳转到指定地址。

CALL:调用子程序。

RETURN:从子程序返回。

RETFIE:从中断子程序返回。

RETLW:从子程序返回并加载立即数到WREG。

BRANCH:条件跳转。

示例

;无条件跳转到地址0x100

GOTO0x100

;调用子程序

CALL