指令格式 功能简述 字节数 周期
来源:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。
指令格式 功能简述 字节数 周期
来源:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。
cathy 在 提交
cathy 在 提交
cathy 在 提交
我们先普及一个概念,单片机(即Microcontroller Unit;MCU) 里面有什么。一个人最重要的是大脑,身体的各个部分都在大脑的指挥下工作。MCU跟人体很像,简单来说是由一个最重要的内核加其他外设组成,内核就相当于人的大脑,外设就如人体的各个功能器官。下面我们来简单介绍下51单片机和STM32单片机的结构。
1. 51系统结构
我们说的51一般是指51系列的单片机,型号有很多,常见的有STC89C51、AT89S51,其中国内用的最多的是STC89C51/2,下面我们就以STC89C51来讲解,并以51简称。
1)内核
51单片机由一个IP核和片上外设组成,IP核就是上图中的CPU,片上外设就是上图中的:时钟电路、SFR和RAM、ROM、定时/计数器、并行I/O口、串行I/O口、中断系统。IP核跟外设之间由系统总线连接,且是8bit的,速度有限。
51内核是上个世纪70年代Intel公司设计的,速度只有12M,外设是IC厂商(STC)在内核的基础上添加的,不同的IC厂商会在内核上添加不同的外设,从而设计出各具特色的单片机。这里Intel属于IP核厂商,STC属于IC厂商。我们后面要讲的STM32也一样,ARM属于IP核厂商,ARM给ST授权,ST公司在Cortex-M3内核的基础上设计出STM32单片机。
2)外设
我们在学习51的时候,关于内核部分接触的比较少,使用的最多的是片上外设,我们在编程的时候操作的也就是这些外设。
编程的时候操作的寄存器位于SFR和RAM这个部分,其中SFR(特殊功能寄存器)占有 128字节(实际上只用了 26 个字节,只有 26 个寄存器,其他都属于保留区),RAM占有 128 字节,我们在程序中定义的变量就是放在RAM中。其中SFR和RAM在地址上是重合的,都是在80~FF地址区间,但在物理区间上是分开的,所以51的RAM是有256个字节。
编写好的程序是烧写到ROM区。剩下的外设都是我们非常熟悉的IO口,串口、定时器、中断这几个外设。
2. STM32系统结构
1)内核
在系统结构上,STM32和51都属于单片机,都是由内核和片上外设组成。只是STM32使用的Cortex-M3内核比51复杂得多,优秀得多,支持的外设也比51多得多,同时总线宽度也上升到32bit,无论速度、功耗、外设都强于51。
从结构框图上看,对比51内核只有一种总线,取指和取数共用。Cortex-M3内部有若干个总线接口,以使CM3能同时取址和访内(访问内存),它们是:
指令存储区总线(两条)、系统总线、私有外设总线。有两条代码存储区总线负责对代码存储区(即FLASH外设)的访问,分别是I-Code总线和D-Code总线。
I-Code用于取指,D-Code用于查表等操作,它们按最佳执行速度进行优化。
系统总线(System)用于访问内存和外设,覆盖的区域包括SRAM,片上外设,片外RAM,片外扩展设备,以及系统级存储区的部分空间。
私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。
还有一个DMA总线,从字面上看,DMA是data memory access的意思,是一种连接内核和外设的桥梁,它可以访问外设、内存,传输不受CPU的控制,并且是双向通信。简而言之,这个家伙就是一个速度很快的且不受老大控制的数据搬运工,这个在51里面是没有的。
2)外设
从结构框图上看, STM32比51的外设多得多,51有的串口、定时器、IO口等外设 STM32 都有。STM32还多了很多特色外设:如FSMC、SDIO、SPI、I2C等,这些外设按照速度的不同,分别挂载到AHB、APB2、APB1这三条总线上。
本文转载自:程序源Lee
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。
单片机简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入输出设备(串口、并口等)和中断系统处于同一芯片的器件。
在个人电脑中,CPU、RAM、ROM、I/O这些都是单独的芯片,然后这些芯片被安装在一个主板上,这样就构成了我们的PC主板,进而组装成电脑,而单片机将这些都集中在了一个芯片上。
一、51单片机
应用最广泛的8位单片机,当然也是初学者们最容易上手学习的单片机。
最早由Intel推出,由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。
1、51单片机特性
51单片机之所以成为经典,成为易上手的单片机主要有以下特点:
从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。
不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。
同时在片内RAM区间还特别开辟了一个双重功能的地址区间,使用极为灵活,这一功能无疑给使用者提供了极大的方便。
乘法和除法指令,这给编程也带来了便利,很多的八位单片机都不具备乘法功能,做乘法时还得编上一段子程序调用,十分不便。
2、51单片机缺点
AD、EEPROM等功能需要靠扩展,增加了硬件和软件负担。
虽然I/O脚使用简单,但高电平时无输出能力,这也是51系列单片机的最大软肋。
运行速度慢,特别是双数据指针,如能改进能给编程带来很大的便利。
51保护能力很差,很容易烧坏芯片。
3、51单片机应用范围
目前在教学场合和对性能要求不高的场合大量被采用。
使用最多的器件:8051、80C51。
二、STM32单片机
由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。
其基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核;同时具有一流的外设,1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等。
在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度。
由于其简单的结构和易用的工具,再配合其强大的功能,在行业中赫赫有名。
01、STM32单片机特性
内核:ARM 32位Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPS/MHz,单周期乘法和硬件除法。
存储器:片上集成32-512KB的Flash存储器,6-64KB的SRAM存储器。
时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压,POR、PDR和可编程的电压探测器(PVD),4-16MHz的晶振,内嵌出厂前调校的8MHz RC振荡电路,内部40 kHz的RC振荡电路,用于CPU时钟的PLL,带校准用于RTC的32kHz的晶振。
调试模式:串行调试(SWD)和JTAG接口,最多高达112个的快速I/O端口、最多多达11个定时器、最多多达13个通信接口。
02、STM32常用的器件
使用最多的器件:STM32F103系列、STM32 L1系列、STM32W系列。
三、51和STM32的区别
51单片机是对所有兼容Intel8031指令系统的单片机的统称,这一系列的单片机的始祖是Intel的8031单片机。
后来随着flash ROM技术的发展,8031单片机取得了长足的进展成为了应用最广泛的8bit单片机之一,它的代表型号就是ATMEL公司的AT89系列。
STM32单片机则是ST(意法半导体)公司使用ARM公司的cortex-M3为核心生产的32bit系列的单片机。
它的内部资源(寄存器和外设功能)较8051、AVR和PIC都要多的多,基本上接近于计算机的CPU了,适用于手机、路由器等。
本文转载自:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。
助记符 |
指令说明 |
字节数 |
周期数 |
|
(数据传递类指令) |
||||
MOV |
A,Rn |
寄存器传送到累加器 |
1 |
1 |
MOV |
A,direct |
直接地址传送到累加器 |
2 |
1 |
MOV |
A,@Ri |
累加器传送到外部RAM(8 地址) |
1 |
1 |
MOV |
A,#data |
立即数传送到累加器 |
2 |
1 |
MOV |
Rn,A |
累加器传送到寄存器 |
1 |
1 |
MOV |
Rn,direct |
直接地址传送到寄存器 |
2 |
2 |
MOV |
Rn,#data |
累加器传送到直接地址 |
2 |
1 |
MOV |
direct,Rn |
寄存器传送到直接地址 |
2 |
1 |
MOV |
direct,direct |
直接地址传送到直接地址 |
3 |
2 |
MOV |
direct,A |
累加器传送到直接地址 |
2 |
1 |
MOV |
direct,@Ri |
间接RAM 传送到直接地址 |
2 |
2 |
MOV |
direct,#data |
立即数传送到直接地址 |
3 |
2 |
MOV |
@Ri,A |
直接地址传送到直接地址 |
1 |
2 |
MOV |
@Ri,direct |
直接地址传送到间接RAM |
2 |
1 |
MOV |
@Ri,#data |
立即数传送到间接RAM |
2 |
2 |
MOV |
DPTR,#data16 |
16 位常数加载到数据指针 |
3 |
1 |
MOVC |
A,@A+DPTR |
代码字节传送到累加器 |
1 |
2 |
MOVC |
A,@A+PC |
代码字节传送到累加器 |
1 |
2 |
MOVX |
A,@Ri |
外部RAM(8 地址)传送到累加器 |
1 |
2 |
MOVX |
A,@DPTR |
外部RAM(16 地址)传送到累加器 |
1 |
2 |
MOVX |
@Ri,A |
累加器传送到外部RAM(8 地址) |
1 |
2 |
MOVX |
@DPTR,A |
累加器传送到外部RAM(16 地址) |
1 |
2 |
PUSH |
direct |
直接地址压入堆栈 |
2 |
2 |
POP |
direct |
直接地址弹出堆栈 |
2 |
2 |
XCH |
A,Rn |
寄存器和累加器交换 |
1 |
1 |
XCH |
A, direct |
直接地址和累加器交换 |
2 |
1 |
XCH |
A, @Ri |
间接RAM 和累加器交换 |
1 |
1 |
XCHD |
A, @Ri |
间接RAM 和累加器交换低4 位字节 |
1 |
1 |
(算术运算类指令) |
||||
INC |
A |
累加器加1 |
1 |
1 |
INC |
Rn |
寄存器加1 |
1 |
1 |
INC |
direct |
直接地址加1 |
2 |
1 |
INC |
@Ri |
间接RAM 加1 |
1 |
1 |
INC |
DPTR |
数据指针加1 |
1 |
2 |
DEC |
A |
累加器减1 |
1 |
1 |
DEC |
Rn |
寄存器减1 |
1 |
1 |
DEC |
direct |
直接地址减1 |
2 |
2 |
DEC |
@Ri |
间接RAM 减1 |
1 |
1 |
MUL |
AB |
累加器和B 寄存器相乘 |
1 |
4 |
DIV |
AB |
累加器除以B 寄存器 |
1 |
4 |
DA |
A |
累加器十进制调整 |
1 |
1 |
ADD |
A,Rn |
寄存器与累加器求和 |
1 |
1 |
ADD |
A,direct |
直接地址与累加器求和 |
2 |
1 |
ADD |
A,@Ri |
间接RAM 与累加器求和 |
1 |
1 |
ADD |
A,#data |
立即数与累加器求和 |
2 |
1 |
ADDC |
A,Rn |
寄存器与累加器求和(带进位) |
1 |
1 |
ADDC |
A,direct |
直接地址与累加器求和(带进位) |
2 |
1 |
ADDC |
A,@Ri |
间接RAM 与累加器求和(带进位) |
1 |
1 |
ADDC |
A,#data |
立即数与累加器求和(带进位) |
2 |
1 |
SUBB |
A,Rn |
累加器减去寄存器(带借位) |
1 |
1 |
SUBB |
A,direct |
累加器减去直接地址(带借位) |
2 |
1 |
SUBB |
A,@Ri |
累加器减去间接RAM(带借位) |
1 |
1 |
SUBB |
A,#data |
累加器减去立即数(带借位) |
2 |
1 |
(逻辑运算类指令) |
||||
ANL |
A,Rn |
寄存器“与”到累加器 |
1 |
1 |
ANL |
A,direct |
直接地址“与”到累加器 |
2 |
1 |
ANL |
A,@Ri |
间接RAM“与”到累加器 |
1 |
1 |
ANL |
A,#data |
立即数“与”到累加器 |
2 |
1 |
ANL |
direct,A |
累加器“与”到直接地址 |
2 |
1 |
ANL |
direct, #data |
立即数“与”到直接地址 |
3 |
2 |
ORL |
A,Rn |
寄存器“或”到累加器 |
1 |
2 |
ORL |
A,direct |
直接地址“或”到累加器 |
2 |
1 |
ORL |
A,@Ri |
间接RAM“或”到累加器 |
1 |
1 |
ORL |
A,#data |
立即数“或”到累加器 |
2 |
1 |
ORL |
direct,A |
累加器“或”到直接地址 |
2 |
1 |
ORL |
direct, #data |
立即数“或”到直接地址 |
3 |
1 |
XRL |
A,Rn |
寄存器“异或”到累加器 |
1 |
2 |
XRL |
A,direct |
直接地址“异或”到累加器 |
2 |
1 |
XRL |
A,@Ri |
间接RAM“异或”到累加器 |
1 |
1 |
XRL |
A,#data |
立即数“异或”到累加器 |
2 |
1 |
XRL |
direct,A |
累加器“异或”到直接地址 |
2 |
1 |
XRL |
direct, #data |
立即数“异或”到直接地址 |
3 |
1 |
CLR |
A |
累加器清零 |
1 |
2 |
CPL |
A |
累加器求反 |
1 |
1 |
RL |
A |
累加器循环左移 |
1 |
1 |
RLC |
A |
带进位累加器循环左移 |
1 |
1 |
RR |
A |
累加器循环右移 |
1 |
1 |
RRC |
A |
带进位累加器循环右移 |
1 |
1 |
SWAP |
A |
累加器高、低4 位交换 |
1 |
1 |
(控制转移类指令) |
||||
JMP |
@A+DPTR |
相对DPTR 的无条件间接转移 |
1 |
2 |
JZ |
rel |
累加器为0 则转移 |
2 |
2 |
JNZ |
rel |
累加器为1 则转移 |
2 |
2 |
CJNE |
A,direct,rel |
比较直接地址和累加器,不相等转移 |
3 |
2 |
CJNE |
A,#data,rel |
比较立即数和累加器,不相等转移 |
3 |
2 |
CJNE |
Rn,#data,rel |
比较寄存器和立即数,不相等转移 |
2 |
2 |
CJNE |
@Ri,#data,rel |
比较立即数和间接RAM,不相等转移 |
3 |
2 |
DJNZ |
Rn,rel |
寄存器减1,不为0 则转移 |
3 |
2 |
DJNZ |
direct,rel |
直接地址减1,不为0 则转移 |
3 |
2 |
NOP |
|
空操作,用于短暂延时 |
1 |
1 |
ACALL |
add11 |
绝对调用子程序 |
2 |
2 |
LCALL |
add16 |
长调用子程序 |
3 |
2 |
RET |
|
从子程序返回 |
1 |
2 |
RETI |
|
从中断服务子程序返回 |
1 |
2 |
AJMP |
add11 |
无条件绝对转移 |
2 |
2 |
LJMP |
add16 |
无条件长转移 |
3 |
2 |
SJMP |
rel |
无条件相对转移 |
2 |
2 |
(布尔指令) |
||||
CLR |
C |
清进位位 |
1 |
1 |
CLR |
bit |
清直接寻址位 |
2 |
1 |
SETB |
C |
置位进位位 |
1 |
1 |
SETB |
bit |
置位直接寻址位 |
2 |
1 |
CPL |
C |
取反进位位 |
1 |
1 |
CPL |
bit |
取反直接寻址位 |
2 |
1 |
ANL |
C,bit |
直接寻址位“与”到进位位 |
2 |
2 |
ANL |
C,/bit |
直接寻址位的反码“与”到进位位 |
2 |
2 |
ORL |
C,bit |
直接寻址位“或”到进位位 |
2 |
2 |
ORL |
C,/bit |
直接寻址位的反码“或”到进位位 |
2 |
2 |
MOV |
C,bit |
直接寻址位传送到进位位 |
2 |
1 |
MOV |
bit, C |
进位位位传送到直接寻址 |
2 |
2 |
JC |
rel |
如果进位位为1 则转移 |
2 |
2 |
JNC |
rel |
如果进位位为0 则转移 |
2 |
2 |
JB |
bit,rel |
如果直接寻址位为1 则转移 |
3 |
2 |
JNB |
bit,rel |
如果直接寻址位为0 则转移 |
3 |
2 |
JBC |
bit,rel |
直接寻址位为1 则转移并清除该位 |
2 |
2 |
本文转载自:
声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有,如涉及侵权,请联系小编邮箱 demi@eetrend.com 进行处理。