单片机的处理器内部具有众多模块,但是要想协调这些模块统一工作并不是一件易事。为了确保各部分能够统一有序工作,因为单片机已经是一个同步时序电路,所以要想让它内部能够有序工作,我们需要从外部输入一个时钟信号。
目录
🐱振荡方式
🦅内部振荡
🦅外部振荡
🚗CPU时序
🚝基本概念
🚝执行过程
🚀复位
🐱振荡方式
🦅内部振荡
单片机的震荡电路往往有两种形式,一种是内部振荡、另外一种是外部振荡。内部震荡是通过单片机内部的高增益反相放大器,将其通过引脚XTAL1和XTAL2与外部的晶体振荡器或者陶瓷谐振器连接,这样就能在内部产生时钟脉冲。
而在内部产生的振荡信号就就可以立即输入到内部的时钟电路。一般情况下,通过内部时钟发生器后常会输出频率范围为2-12MHz(通常为12MHz)的频率和两种节拍的时钟信号,分别是P1和P2:
这两种节拍对应的时刻将完成不同类型的任务,P1节拍通常是回去完成算术逻辑运算,而P2节拍通常去完成寄存器数据传输。
🦅外部振荡
另外还有一种方式就是通过外接一个振荡器,将其产生的时钟信号通过XTAL2输入到单片机内部。
🚗CPU时序
CPU时序是CPU执行各控制指令的时间顺序。CPU时序通常有两种:
对片内功能的控制和对片外扩展外设的控制
🚝基本概念
振荡周期:就是单片机通过振荡器后输出的脉冲信号的周期,单片机通常会选择一个振荡周期为操作的最小时间基准。
时钟周期S:时钟周期是两倍的振荡周期,一个时钟周期分为P1和P2两个节拍。P1周期完成算术逻辑运算,P2节拍完成内部寄存器的数据传送。
机器周期:指令一条指令每一步所需要的时间,单片机的机器周期通常是6个时钟周期组成,即:
1个机器周期=6个时钟周期=12个振荡周期。
指令周期:指令周期是CPU完成一条指令需要的时间,通常情况下为1~4个机器周期。
那么一个晶振频率为12MHz的单片机的振荡周期为1/12MHz=1/12us,那么它一个时钟周期为1/6us,一个机器周期为1us,一个指令周期为1~4us,即晶振频率为12MHz的单片机执行一条指令花费的时间为1-4us
🚝执行过程
单片机执行一个指令通常包括两个过程:取指令和执行指令。
我们知道,单片机的指令存储的位置是ROM程序存储器中,而我们的操作数一般都是放在RAM数据存储器中。
读指令操作依赖于ALE,而ALE地址锁存信号会在一个机器周期内有效两次,有效的宽度称为S的状态周期,只有在ALE有效时间内才进行读指令的操作。
单字节单机器周期指令
在执行单字节单机器周期指令时,当ALE有效时,系统会从ROM中取出指令放到指令寄存器IR中,然后执行指令,在执行过程中APU会在第二次ALE有效信号来的时候将PC+1锁存,让第二次读取1指令操作无效。
双字节单机器周期指令
在执行双字节单机器周期指令时,对应两次ALE信号都是有效的,不会出现锁存的现象。当第一次ALE有效信号来了,就读取指令,并且知道该指令为双字节机器周期指令,那么就会在第二次ALE有效信号来的时候进行读取,同时完成指令执行。
单字节双机器周期指令
对于单字节双机器周期指令,它会选择使用两个机器周期来读取,所以理论上可以产生4次ALE有效信号,但是很明显其中4次无效。当第一次ALE有效信号来时,系统会读取要操作的指令,并且将锁存住后面读操作,即让程序计数器PC不自增,这样就会使得后面三次读操作都无效,同时完成指令。
🚀复位
复位(reset)是单片机中一个很重要的功能,无论系统执行到哪一个状态,按下复位后都要回到初始的状态,类似于重启。而在51单片机中复位电路是外接的,在复位引脚加2个机器周期的的高电平可以让单片机复位。下图所示的就是复位电路,我们可以通过按下按钮来实现复位。
下面我们重点来看复位后各个模块的状态:
首先是CPU的寄存器,首先是PC寄存器里面存储的地址是0000H也就是ROM最开始的单元。而累加器ACC、PSW寄存器、寄存器B和DPTR寄存器都会清0。而SP堆栈指针会指向07H开始。
而IO口都会被置为高电平,而串行口的SBUF寄存器会被置为随机数,大部分的定时器和计数器的寄存器也会被清0。