- 单片机开发从入门到精通(第2版)
- 白林锋 曲培新等编著
- 1743字
- 2024-06-26 16:45:09
1.3.1 单片机系统的工作电路
1.振荡电路
单片机内部的高增益反相放大器与单片机XTAL1、XTAL2引脚外接的晶体构成一个振荡电路,为CPU提供时钟脉冲,如图1-11所示。XTAL1为振荡电路输入端,XTAL2为振荡电路输出端,同时XTAL2还是内部时钟发生器的输入端。片内时钟发生器对振荡脉冲进行二分频,为控制器提供一个两相的时钟信号,产生CPU的操作时序。MCS-51系列单片机时钟电路中常用6MHz、12MHz、11.0592MHz的石英晶体。电容C1和C2为石英晶体振荡器的负载电容,对振荡频率有微调作用,容量范围是5~30pF。在设计印制电路板时,晶振和电容应尽量靠近单片机芯片,以减少寄生电容以及干扰。
图1-11 MCS-51系列单片机的时钟电路
2.复位电路
单片机复位能使CPU和系统中的其他功能单元处在一个特定的初始状态,并从这个状态开始工作。复位后PC为0000H,单片机从ROM的第一个单元取指令。在实际应用中,MCS-51系列单片机在刚接上电源或发生故障时都要复位,所以要掌握单片机的复位电路和复位后的状态。
在复位引脚RST端加上两个机器周期(即24个振荡周期)的高电平脉冲即可让单片机进行复位操作,完成对CPU的初始化处理。如果单片机的时钟频率为12MHz,每个机器周期即为1μs,让RST引脚保持2μs以上的高电平就能完成复位。复位操作是单片机系统正常运行前必须进行的一个环节。如果RST持续为高电平,单片机就处于循环复位状态,无法执行用户程序。
在实际应用中,复位操作通常有上电自动复位、手动复位和看门狗复位3种方式。上电自动复位要求在接通电源后,由电路自动实现复位操作。常用的上电自动复位电路图如图1-12a所示,其中电容和电阻对+5V电源构成微分电路。系统上电后,单片机的RST端会得到一个时间很短的高电平脉冲。在实际应用系统中,一般还要用按键进行手动复位,如图1-12b所示,其中电容为4.7~10μF的电解电容,电阻取1~10kΩ。
图1-12 单片机复位电路
看门狗(Watchdog Timer, WDT)是监视定时器的俗称,部分增强型的MCS-51单片机中集成有WDT。WDT复位是一种程序检测复位方式,可采用编程方法产生复位操作。单片机复位以后,片内RAM状态不受影响,P0~P3口输出高电平,SP为07H,PC被清0,相关特殊功能寄存器的复位状态都被初始化,具体状态见表1-6。
表1-6 特殊功能寄存器复位状态表
3.节拍、状态、机器周期和指令周期
MCS-51系列单片机的工作时序单位有4个,从小到大依次是节拍、状态、机器周期和指令周期。
(1)节拍与状态
晶体振荡信号的一个周期称为节拍,用P表示。振荡脉冲经过二分频后,就是单片机的状态周期,用S表示,即一个状态包含两个节拍,前半周期为节拍1,记作P1,后半周期为节拍2,记作P2,如图1-13所示。CPU以P1、P2为基本节拍,控制单片机的各个部分协调工作。
图1-13 MCS-51系列单片机的指令时序图
(2)机器周期
MCS-51系列单片机采用定时控制方式,具有固定的机器周期。一个机器周期的宽度为6个状态,依次为S1~S6。一个状态包括两个节拍,一个机器周期共有12个节拍,分别记为S1P1,S1P2,…,S6P2。实际上,一个机器周期由12个振荡周期组成,机器周期是振荡脉冲信号的十二分频。
外接的石英晶体频率为12MHz时,一个机器周期为1μs;石英晶体频率为6MHz时,一个机器周期为2μs。
(3)指令周期
单片机执行一条指令所需要的时间称为指令周期。指令周期是单片机最大的工作时序单位,不同的指令所需要的机器周期数也不相同。如果单片机执行一条指令需要一个机器周期,这条指令就是单周期指令,如简单的数据传送指令;如果一条指令执行时需要两个机器周期,则称为双周期指令,如加减运算指令。单片机的运算速度与程序执行所需的指令周期有关,占用机器周期数越少的指令则运行速度越快。在MCS-51系列单片机的111条汇编指令中,共有单周期指令、双周期指令和四周期指令3种。四周期指令只有乘法指令和除法指令两条,其余均为单周期指令和双周期指令。
单片机执行单周期指令的时序如图1-13a和b所示,其中图1-13a为单字节单周期指令,图1-13b为双字节单周期指令。单字节和双字节指令都在S1P1期间由CPU读取指令,将指令码读入指令寄存器,同时PC自动加1。在S4P2期间,单字节指令读取的下一条指令被丢弃,PC值仍加1;如果是双字节指令,CPU在S4P2期间读取指令的第二个字节,同时PC自动加1。两种指令都在S6P2结束时完成。
单片机执行单字节双周期指令的时序如图1-13c所示。双周期指令在两个机器周期内产生4次读操作码操作,第1次读取操作码,PC自动加1,后3次读取都无效,自动丢弃,PC的值不变化。