基本信息
文件名称:Microchip 系列:PIC16F877A_(6).PIC16F877A的指令集与编程.docx
文件大小:26.71 KB
总页数:35 页
更新时间:2025-06-05
总字数:约2.11万字
文档摘要

PAGE1

PAGE1

PIC16F877A的指令集与编程

1.指令集概述

PIC16F877A是一款8位微控制器,其指令集是基于RISC(精简指令集计算机)架构设计的。RISC架构的特点是指令数量较少,每条指令的执行周期固定,这使得程序执行速度更快,同时也简化了硬件设计。PIC16F877A的指令集包括35条指令,每条指令都是单字节或双字节的,这使得程序更加紧凑高效。

2.指令格式

PIC16F877A的指令格式分为单字节指令和双字节指令两种。单字节指令只包含操作码,而双字节指令除了操作码外,还包含一个操作数。指令的格式如下:

单字节指令:OPCODE

双字节指令:OPCODEOPERAND

其中,OPCODE是操作码,OPERAND是操作数。操作数可以是寄存器地址、立即数或位地址等。

3.寄存器与地址空间

PIC16F877A的寄存器分为文件寄存器(FileRegisters)和特殊功能寄存器(SpecialFunctionRegisters,SFRs)。文件寄存器用于存储用户数据,而SFRs用于控制微控制器的各种功能,如定时器、中断、端口等。

文件寄存器:从0x00到0x7F的地址范围,共128个寄存器。

特殊功能寄存器:从0x80到0xFF的地址范围,包含控制寄存器和状态寄存器。

4.常用指令

4.1数据传输指令

数据传输指令用于在寄存器之间、寄存器与程序计数器之间以及寄存器与立即数之间进行数据的移动。

MOVF:移动文件寄存器中的内容。

;将文件寄存器FILREG1的内容加载到工作寄存器WREG

MOVFFILREG1,W

;将工作寄存器WREG的内容存储到文件寄存器FILREG2

MOVFWREG,FILREG2

MOVLW:移动立即数到工作寄存器WREG。

;将立即数0x12移动到工作寄存器WREG

MOVLW0x12

MOVWF:将工作寄存器WREG的内容存储到文件寄存器。

;将工作寄存器WREG的内容存储到文件寄存器FILREG1

MOVWFFILREG1

4.2算术逻辑指令

算术逻辑指令用于执行基本的算术和逻辑运算。

ADDWF:将文件寄存器中的内容与工作寄存器WREG中的内容相加。

;将文件寄存器FILREG1中的内容与WREG中的内容相加,结果存储在FILREG1

ADDWFFILREG1,F

SUBWF:从文件寄存器中的内容减去工作寄存器WREG中的内容。

;从文件寄存器FILREG1中的内容减去WREG中的内容,结果存储在FILREG1

SUBWFFILREG1,F

ANDWF:将文件寄存器中的内容与工作寄存器WREG中的内容按位与。

;将文件寄存器FILREG1中的内容与WREG中的内容按位与,结果存储在FILREG1

ANDWFFILREG1,F

4.3位操作指令

位操作指令用于对单个位进行操作,如设置、清除、测试等。

BSF:设置文件寄存器中的某个位。

;设置文件寄存器FILREG1的第1位

BSFFILREG1,1

BCF:清除文件寄存器中的某个位。

;清除文件寄存器FILREG1的第1位

BCFFILREG1,1

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

;测试文件寄存器FILREG1的第1位,如果位为1则跳过下一条指令

BTFSSFILREG1,1

GOTOLABEL1

4.4控制指令

控制指令用于控制程序的流程,如跳转、调用子程序等。

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

;无条件跳转到地址0x100

GOTO0x100

CALL:调用子程序。

;调用地址为0x200的子程序

CALL0x200

RETURN:从子程序返回。

;从子程序返回

RETURN

5.指令执行周期

PIC16F877A的每条指令执行时间是固定的,通常为4个振荡周期。这种固定的执行周期使得程序的时序控制更加简单。以下是一些常见指令的执行周期:

MOVF、MOVLW、MOVWF:1个机器周期

ADDWF、SUBWF、ANDWF:1个机器周期

BSF、BCF、BTFSS:1个机器周期

GOTO、CALL、RETURN:2个机器周期

6.汇编语言编程

6.1汇编语言基础

汇编语言是一种低级语言,直接对应于微控制器的机器语言。编写PIC16F877A的汇编程序时,需要使用汇编器(如MPASM)将汇编代码转换为机器码。汇编语言程序通常包含以下部分:

指令:微控制器执行的具体操作。

标签:用于标记程序中的特定位置,方便跳转。

伪指令:用于控制汇编器的行为,如设置数据段、定义常量等。

6.2汇编程序示例

以下是一个简单的汇编程序示例,