51单片机学习笔记(2)

单片机指令系统(1)

2.1单片机时钟系统

1.时钟电路
在这里插入图片描述

电容C1和C2对振荡频率起稳定微调作用。C1、C2必须相等,一般取30pF左右

2.时序与工作周期

8051 MCU内部具有时钟电路,在引脚XTAL1、XTAL2外接晶体振荡器、电容,为时钟电路提供振荡源,就会产生MCU工作所需要的时钟信号。

   时钟频率=外接晶振频率

MCU的时钟电路产生基准的时钟信号,还有如下几个工作周期:

时钟周期
状态周期
机器周期
指令周期

时钟周期T0

也称为振荡周期,是晶振频率的倒数;是MCU中最基本、最小的时间单位。若振荡源频率为f ,则时钟周期为T0=1/ f ;
1个时钟周期定义为一个节拍P。

若晶振频率f为6MHz,则时钟周期为1/ f即1/6us;若晶振频率为f为12MHz,则时钟周期为1/ f即1/12us。

状态周期S

是时钟周期的两倍S =2T0=2/ f ,即由连续的2个节拍P1和P2组成。

机器周期TM

CPU执行一个基本操作所需要的时间。1个机器周期由6个状态周期(S1-S6)即12个时钟周期组成。
在这里插入图片描述1个机器周期TM =6个状态周期S=12个时钟周期(振荡周期)T0

指令周期

执行一条指令所需要的时间。
通常每条指令的执行可划分为1-4个基本操作,完成一个基本操作需要1个机器周期TM。所以指令周期有1-4个机器周期组成。

2.2特殊寄存器简介

   特殊功能寄存器SFR(Special  Function Register),也称专用寄存器。
   SFR主要用于内部硬件功能模块(如定时器/计数器、串行口、中断系统等)的管理和控制,用来存放功能模块的控制命令、状态或数据。

在我上一篇文章中已经将各特殊寄存器的地址列出,可作为参考,这里就不赘述。在本节中将简单讲解一些常用特殊寄存器。

1.程序计数器PC(特殊)

也称为程序指针,具有如下特点:

PC是一个16位的专用寄存器,作为程序指针则其寻址范围为0~64KB。

PC用于存放下一条要执行的指令地址,复位后PC的内容为0000H,即指向ROM的0000H单元,表示CPU将从0000H取指令执行。

PC不属于特殊功能寄存器。因此不占用SFR地址空间,是不可寻址的,在程序中不能直接访问。

PC可以通过LJMP、SJMP等转移指令来间接修改PC的值,也可通过变址寻址方式访问,例如:MOVC A,@A+PC。

2.累加器A

累加器A(或ACC)是CPU中使用最频繁8位专用寄存器。

它的地址和可寻址位如下:

字节地址:E0H;
位地址: E0H~E7H,分别对应ACC.7~ACC.0。

3.B寄存器

B寄存器是一个8位寄存器,一般用于乘除指令中:
MUL AB A乘B
DIV AB A除以B
它的地址和可寻址位如下:
字节地址: F0H;
位地址: F0H~F7H;

在其它情况下,B寄存器可以作为内部RAM中的一个单元来使用。

3.程序状态字PSW。

程序状态字PSW (Program Status Word)用来存放程序状态信息,表征指令的执行状态,供程序查询和判别之用。其字节地址: D0H

在这里插入图片描述

其各位地址如上图所示

对于C、AC、OV、P,根据指令执行结果,由硬件置位或清除,称为状态位。对于RS1、RS0、 F1、F0,根据使用需要,用指令设定,称为控制位。

RS1、RS0为工作寄存器组选择位, F1、F0由用户自定义。

C(CY):进位标志。在加、减法运算时,若高位(D7)发生进位或借位则被置1(即C=1),否则被清0(C=0);

AC:辅助进位标志。在加、减法运算时,若低4位向高4位发生进位或借位则AC=1,否则AC=0;AC标志在十进制调整指令DA A中要用到。

F0、F1:软件标志。由软件置位或复位,由用户定义使用;

RS1、RS0:工作寄存器组选择位。由软件置位或复位,用来选择4组工作寄存器中的一组;

OV: 溢出标志 。一般用于加减语句中,当两个数相加时第6以及第7位发生借位或者进位时,取这两位的进位情况的异或结果。

P:奇偶校验。用于标志语句中的数据中1的奇偶个数。

4.堆栈指针SP

1.堆栈指针简介
堆栈指针SP(Stack Pointer):地址81H,是存放当前堆栈栈顶地址的一个8位寄存器。8051 MCU的堆栈是向上生成的:进栈时栈顶向高地址生长,SP的内容增加;出栈时栈顶向下回落,SP的内容减少。所以SP总是指向堆栈的栈顶。

堆栈的设置:8051微控制器复位后,堆栈指针SP的内容为07H,即默认堆栈区为08H开始向上的存储区。

因为08H-1FH单元为工作寄存器区,20H-2FH为位寻址区。通常是通过对SP赋值重新设置堆栈区域,将堆栈区设置到用户RAM区。

2.堆栈的方式

2.1指令方式:使用堆栈操作指令进行数据的“进栈”和“出栈”,实现一些数据的暂存,以及对现场的保护和恢复。

堆栈操作指令:
进栈指令:PUSH direct ( direct 范围: 00H-FFH)
出栈指令:POP direct

2.2自动方式:调用子程序或响应中断时,CPU会自动将返回地址或断点地址,压入堆栈保护;程序返回时,自动将断点地址弹回PC。操作由硬件自动完成的

5.数据指针DPTR

数据指针DPTR,是一个16位的SFR。主要功能是作为外部RAM的地址指针。

DPTR也可以分为两个8位寄存器使用,高8位用DPH表示,低8位用DPL表示。地址如下:
DPH地址:83H
DPL地址: 82H

6.端口0-3及其它SFR

P0、P1、P2、P3:分别是I/O端口P0~P3的锁存器,地址分别为:80H、90H、A0H、B0H,可以位寻址。

对于端口即引脚的操作实际上是对这些寄存器的操作,其端口引脚与端口寄存器的位具有映射关系。

其它SFR:SBUF、T0、T1、IP、IE、TMOD、TCON、SCON、PCON等。

微控制器复位后,除SP为07H,P0~P3为FFH外,其余均为0。

2.3单片机指令

1.指令格式:操作码 操作数,按指令长度又可分为单字节指令,双字节指令,三字节指令。

在这里插入图片描述

汇编语言基本格式
在这里插入图片描述

2.不同寻址方式

2.1立即寻址:操作数直接写在指令中
例如 MOV DPTR,#2345H,(其中2345H前面有一个#号,代表“#2345H”是一个数字,如果没有#,代表这是一个地址)。

2.2寄存器寻址:以寄存器里的内容作为操作数
例如 MOV A,R0就是将寄存器R0里的内容作为操作数的。

2.3直接寻址:直接写出操作数的地址
例如 MOV A,31H,其中31这个地址里就装着所需的操作数。

2.4寄存器间接寻址:操作数为存在该地址里的内容所表示的地址里
例如 MOV A,@R0,在本句中,R0为一个地址,假设它内部装的数为32H,那么32H这个地址里装的数才是本句的操作数。

2.5变址寻址:以某个寄存器的基本地址加上偏移量作为地址(51单片机里没有专用的变址寻址寄存器,采用DPTR,PC指针的值作为基本地址,将累加器A作为偏移量)
例如MOV A,@A+PC,就是将A里的内容作为偏移地址,PC里的内容作为基本地址,加在一起后,把这个数作为地址,取里面的数据作为操作数。

2.6相对寻址,以PC作为基本地址,加上偏移量rel形成有效的转移地址

注:图片来源于网络,转载请注明出处
图片地址:
https://studyh5.zhihuishu.com/videoStudy.html

发布了2 篇原创文章 · 获赞 1 · 访问量 574

猜你喜欢

转载自blog.csdn.net/qq_35525141/article/details/104740736