电容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个机器周期组成。
特殊功能寄存器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。
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