[PIC®/AVR®/dsPIC®产品] 8051单片机的指令与PIC单片机的指令集的不同之处

[复制链接]
 楼主| 小明的同学 发表于 2025-2-23 10:42 | 显示全部楼层 |阅读模式
8051单片机和PIC单片机在指令集上有显著差异,主要体现在以下几个方面:

1. 架构
8051单片机:基于CISC(复杂指令集计算机)架构,指令集复杂,指令长度不固定,执行时间各异。

PIC单片机:基于RISC(精简指令集计算机)架构,指令集精简,指令长度固定,执行时间一致。

2. 指令长度
8051单片机:指令长度可变,1到3字节不等。

PIC单片机:指令长度固定,通常为12、14或16位,具体取决于型号。

3. 指令数量
8051单片机:指令数量较多,约111条,涵盖多种操作。

PIC单片机:指令数量较少,通常在35到80条之间,具体取决于型号。

4. 寻址方式
8051单片机:支持多种寻址方式,如立即寻址、直接寻址、寄存器寻址、间接寻址等。

PIC单片机:寻址方式相对较少,常见的有立即寻址、直接寻址和间接寻址。

5. 寄存器结构
8051单片机:有多个专用寄存器,如累加器(A)、B寄存器、程序状态字(PSW)等。

PIC单片机:采用通用寄存器结构,寄存器数量较多且功能通用。

6. 堆栈
8051单片机:堆栈位于内部RAM,深度有限,通常为128字节。

PIC单片机:堆栈深度固定,通常为8级,独立于数据存储器。

7. 中断处理
8051单片机:有5个固定中断源,中断向量表位于程序存储器起始处。

PIC单片机:中断源数量较多,具体取决于型号,中断向量表通常只有一个入口。

8. 开发工具
8051单片机:开发工具多样,如Keil、SDCC等。

PIC单片机:常用开发工具为MPLAB X IDE,支持汇编和C语言编程。


8051单片机指令复杂,功能丰富,适合复杂控制;PIC单片机指令精简,执行效率高,适合实时控制。选择时需根据具体应用需求决定。

 楼主| 小明的同学 发表于 2025-2-23 10:42 | 显示全部楼层
PIC单片机的指令集基于RISC架构,具有精简、高效的特点。以下是其主要特点和一些常见指令:

主要特点
精简指令集:指令数量较少,通常在35到80条之间,具体取决于型号。

固定长度指令:指令长度固定,通常为12、14或16位。

单周期执行:大多数指令在一个时钟周期内完成。

哈佛架构:程序存储器和数据存储器分开,允许同时访问。

丰富的寻址方式:支持立即寻址、直接寻址、间接寻址等。
 楼主| 小明的同学 发表于 2025-2-23 10:43 | 显示全部楼层
小明的同学 发表于 2025-2-23 10:42
PIC单片机的指令集基于RISC架构,具有精简、高效的特点。以下是其主要特点和一些常见指令:

主要特点

PIC单片机的指令集可以分为以下几类:

1. 数据传送指令
MOVF:将文件寄存器的内容传送到W寄存器或自身。

MOVWF:将W寄存器的内容传送到文件寄存器。

MOVLW:将立即数传送到W寄存器。

2. 算术运算指令
ADDWF:将W寄存器和文件寄存器的内容相加,结果存放到W寄存器或文件寄存器。

SUBWF:从文件寄存器中减去W寄存器的内容,结果存放到W寄存器或文件寄存器。

INCF:增加文件寄存器的内容。

DECF:减少文件寄存器的内容。

3. 逻辑运算指令
ANDWF:将W寄存器和文件寄存器的内容进行逻辑与操作,结果存放到W寄存器或文件寄存器。

IORWF:将W寄存器和文件寄存器的内容进行逻辑或操作,结果存放到W寄存器或文件寄存器。

XORWF:将W寄存器和文件寄存器的内容进行逻辑异或操作,结果存放到W寄存器或文件寄存器。

COMF:对文件寄存器的内容取反。

4. 位操作指令
BCF:清除文件寄存器的指定位。

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

BTFSC:测试文件寄存器的指定位,如果为0则跳过下一条指令。

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

5. 控制转移指令
GOTO:无条件跳转到指定地址。

CALL:调用子程序。

RETURN:从子程序返回。

RETFIE:从中断返回。

DECFSZ:减少文件寄存器的内容,如果结果为0则跳过下一条指令。

INCFSZ:增加文件寄存器的内容,如果结果为0则跳过下一条指令。

6. 其他指令
NOP:空操作,用于延时或占位。

SLEEP:进入低功耗模式。

CLRWDT:清除看门狗定时器。
 楼主| 小明的同学 发表于 2025-2-23 10:43 | 显示全部楼层
举个简单的例子
  1.     LIST    P=16F84A
  2.     INCLUDE "P16F84A.INC"

  3.     ORG     0x0000          ; 程序起始地址
  4.     GOTO    START           ; 跳转到主程序

  5. START
  6.     MOVLW   0x0A            ; 将立即数0x0A加载到W寄存器
  7.     MOVWF   PORTB           ; 将W寄存器的内容传送到PORTB
  8.     ADDWF   PORTB, F        ; 将PORTB的内容与W寄存器相加,结果存放到PORTB
  9.     BSF     PORTB, 0        ; 设置PORTB的第0位
  10.     BTFSC   PORTB, 1        ; 测试PORTB的第1位,如果为0则跳过下一条指令
  11.     GOTO    SKIP            ; 跳转到SKIP标签
  12.     NOP                     ; 空操作
  13. SKIP
  14.     SLEEP                   ; 进入低功耗模式

  15.     END                     ; 程序结束


wahahaheihei 发表于 2025-2-26 19:31 | 显示全部楼层
较少的指令能否满足所有的需求呢?
jiekou001 发表于 2025-2-28 11:17 | 显示全部楼层
51上很多特性,精简指令集单片机不支持,好像那个移位的,会将移出来的那个位给一个CY的寄存器,其他的就不行,需要逻辑运算来保存。

评论

道出真谛之一。 我是大声疾呼真相,但总有很多傻叉子在瞎起哄,有些是坏,有些是真傻!  发表于 2025-3-7 06:07
gejigeji521 发表于 2025-2-28 14:55 | 显示全部楼层
汇编是如何编程的,没看懂。
kingTek 发表于 2025-3-2 20:00 来自手机 | 显示全部楼层
减指令是病,是不得已,pic的指令集比51的差远了,51的位操作干脆利索,没有切银行号,中断也不用查询,基本测不到bug!
weifeng90 发表于 2025-3-7 08:14 来自手机 | 显示全部楼层
51核的设计更类似于8086
ewyu 发表于 2025-3-10 16:48 | 显示全部楼层
8051 单片机和 PIC 单片机是两种常见的嵌入式微控制器,它们的指令集在设计理念和架构上有显著差异。
twinkhahale 发表于 2025-3-10 18:56 | 显示全部楼层
寄存器结构这俩完全不一样,比如说8051有 8 个通用寄存器(R0-R7),位于寄存器组中。PIC使用 工作寄存器(WREG) 作为累加器,大多数操作通过 WREG 进行。
gongqijuns 发表于 2025-3-10 20:08 | 显示全部楼层
8051:基于 CISC(复杂指令集计算机)架构。指令集丰富,单条指令可以完成复杂操作。PIC:基于 RISC(精简指令集计算机)架构。指令集精简,大多数指令在一个时钟周期内完成
tiakon 发表于 2025-3-10 21:16 | 显示全部楼层
其实8051具有特殊功能寄存器(SFR)用于控制外设和状态
yuliangren 发表于 2025-3-10 22:24 | 显示全部楼层
PIC的话,其寄存器文件(Register File)包含通用寄存器和特殊功能寄存器。
canfeil 发表于 2025-3-11 09:13 | 显示全部楼层
寻址模式一般来说不一样,8051支持多种寻址模式,包括直接寻址、间接寻址、寄存器寻址、立即寻址等。但PIC得寻址模式相对简单,主要包括直接寻址和间接寻址。
星星点点didi 发表于 2025-3-11 10:23 | 显示全部楼层
堆栈和子程序调用来说,8051堆栈位于内部 RAM 中,深度有限(通常为 128 字节)。使用 CALL 和 RET 指令实现子程序调用和返回。PIC:堆栈是硬件实现的,深度固定(通常为 8 级或更多,具体取决于型号)。用 CALL 和 RETURN 指令实现子程序调用和返回。
eleg34ance 发表于 2025-3-11 11:26 | 显示全部楼层
中断处理的话,8051有 5 个固定中断源(如外部中断、定时器中断、串口中断等)。中断向量表位于程序存储器的固定地址。PIC中断源数量较多,具体取决于型号。
nuan11nuan 发表于 2025-3-11 13:00 | 显示全部楼层
其实中断来说,PIC的话,中断向量表通常只有一个入口,需要在中断服务程序中判断中断源。
hight1light 发表于 2025-3-11 14:12 | 显示全部楼层
外设控制8051外设控制通过特殊功能寄存器(SFR)实现。但是PIC外设控制通过寄存器文件中的特殊功能寄存器实现。
meeagle 发表于 2025-3-14 15:58 | 显示全部楼层
我用汇编做项目的,感觉指令用熟了之后,还是CISC写起来要方便一点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

158

主题

1637

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部