3.5 MCS-51单片机的辅助电路及时序
MCS-51单片机的辅助电路主要包括两部分:时钟电路与复位电路。
3.5.1 时钟电路
时钟电路是单片机的心脏,它用于产生单片机工作所需要的时钟信号。可以说单片机就是一个复杂的同步时序信号,为了保证同步工作的实现,电路应在统一的时钟信号控制下严格地按时序进行工作。
单片机的时钟产生方法有内部时钟方式和外部时钟方式两种,大多数单片机应用系统采用内部时钟方式。
1.内部时钟方式
最常用的内部时钟方式采用外接晶体和电容来组成并联谐振电路,电路如图3-14所示。
图3-14 采用内部时钟方式的电路
MCS-51单片机允许的振荡晶体M可在1.2~24MHz之间选择,一般为11.0592MHz。电容C1、C2起稳定振荡频率、快速起振的作用,它们的取值对振荡频率输出的稳定性、大小及振荡电路的起振速度有一定的影响,可在20~100pF之间选择,典型值为30pF。内部振荡方式所得到的时钟信号比较稳定,应用较多。
晶体振荡频率越高,则系统的时钟频率也高,单片机运行速度就快。但运行速度越快,存储器的速度要求就越高,对印制电路板的工艺要求也高(线间寄生电容要小)。随着技术的发展,单片机的时钟频率也在提高,现在8位的高速单片机芯片的使用频率已达40MHz。
应该指出,振荡电路产生的振荡脉冲并不直接为系统所用,而是经过二分频后才作为系统时钟信号(在时序分析中常称为状态,用Si表示),在二分频的基础上再三分频产生ALE信号,在二分频的基础上再六分频得到机器周期信号。
2.外部时钟方式
外部时钟方式是利用外部振荡信号源直接接入XTAL1或XTAL2。由于HMOS和CHMOS单片机内部时钟进入的引脚不同,其外部振荡信号源接入的方式也不同。图3-15 是HMOS和CHMOS型单片机的外部信号源接入方法。
图3-15 HMOS和CHMOS单片机的外接信号
3.5.2 复位及复位电路
1.复位状态
计算机在启动运行时都需要复位,这就使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。
单片机的复位都靠外部电路实现。MCS-51单片机有一个复位引脚RST,高电平有效。它是施密特触发输入(对于CMOS单片机,RST引脚的内部有一个拉低电阻),当振荡器起振后,该引脚上出现两个机器周期(即24个时钟周期)以上的高电平,使器件复位,只要RST保持高电平,MCS-51便保持复位状态。此时ALE、PSEN、P0、P1、P2、P3口都输出高电平。RST变为低电平,退出复位状态,CPU从初始状态开始工作。复位操作不影响片内RAM的内容,复位以后内部寄存器的初始状态如表3-7所示。
表3-7 复位后的内部寄存器状态
2.复位电路
MCS-51单片机通常采用上电自动复位和按钮复位两种方式。最简单的上电自动复位电路如图3-16所示。对于CMOS型单片机,因RST引脚的内部有一个拉低电阻,故电阻R可以不接。单片机在上电瞬间,RC电路充电,RST引脚端出现正脉冲,只要RST端保持两个机器周期以上的高电平(因为振荡器从起振到稳定需要大约10ms的时间,故通常定为大于10ms),就能使单片机有效复位。当晶体振荡频率为12MHz时,RC的典型值为C=10μF,R=8.2kΩ。简单复位电路中,干扰信号易串入复位端,可能会引起内部某些寄存器错误复位,这时可在RST引脚上接一去耦电容。
图3-16 上电复位电路
通常,因为系统运行等的需要,常常需要人工按钮复位,如图3-17所示,只需将一个常开按钮并联于上电复位电路,按下开关一定时间就能使RST引脚端为高电平,从而使单片机复位。
图3-17 上电与手动复位电路
3.系统复位
在单片机的实际应用系统中,除单片机本身需要复位以外,外部扩展的I/O接口电路也需要复位,因此需要一个系统的同步复位信号,即单片机复位后,CPU开始工作时,外部的电路一定要复位好,以保证CPU有效地对外部电路进行初始化编程。如上所述,MCS-51的复位端RST是一个施密特触发输入,高电平有效,而I/O接口电路的复位端一般为TTL电平输入,通常也是高电平有效,但这两种复位输入端复位有效的电平完全不同。若将图3-16和图3-17中单片机的复位端和I/O接口电路的复位端简单相连,将使CPU和I/O接口的复位可能不同步,CPU对I/O初始化编程无效,将使系统不能正常工作。这可以通过延时一段时间以后对外部电路进行初始化编程来解决。
图3-18和图3-19为两种实用的系统复位电路(上电复位和按钮复位)。图中将复位电路产生的复位信号经施密特电路整形后作为系统复位信号,加到MCS-51单片机和外部I/O接口电路的复位端。
图3-18(系统)上电复位电路
图3-19(系统)按钮复位电路
3.5.3 CPU的时序
计算机在执行指令时,会将一条指令分解为若干基本的微操作。这些微操作所对应的脉冲信号在时间上的先后次序称为计算机的时序。因此微型计算机中的CPU实质上就是一个复杂的同步时序电路,这个时序电路是在时钟脉冲推动下工作的。
CPU发出的时序信号有两类:一类用于片内各功能部件的控制,这类信号很多,但用户知道它是没有什么意义的,故通常不做专门介绍;另一类用于片外存储器或I/O接口的控制,需要通过器件的控制引脚送到片外,这部分时序对分析硬件电路原理至关重要,也是用户普遍关心的问题。
1.基本时序
MCS-51单片机的时序由下面4种周期构成。
(1)振荡周期
振荡周期是指为单片机提供定时信号的振荡源的周期。
(2)状态周期
两个振荡周期为一个状态周期,用S表示。两个振荡周期作为两个节拍分别称为节拍P1和节拍P2。在状态周期的前半周期P1有效时,通常完成算术逻辑运算;在后半周期P2有效时,一般进行内部寄存器之间的传输。
(3)机器周期
CPU执行一条指令的过程可以划分为若干阶段,每一阶段完成某一项基本操作,如取指令、存储器读/写等。通常把完成一个基本操作所需要的时间称为机器周期。
MCS-51单片机的一个机器周期包含6个状态周期,用S1, S2, …, S6表示;共12个节拍,依次可表示为S1P1, S1P2, S2P1, S2P2, …, S6P1, S6P2,其时序单元如图3-20所示。
图3-20 MCS-51单片机时序单元
(4)指令周期
指令周期是指执行一条指令所占用的全部时间,它以机器周期为单位。MCS-51系列单片机除乘法、除法指令是4机器周期指令外,其余都是单周期指令和双周期指令。若用12MHz晶体振荡器(晶振),则单周期指令和双周期指令的指令周期时间分别是1μs和2μs,乘法和除法指令为4μs。
通过上面的分析,我们可以看出,外部晶振的二分频是MCS-51单片机的内部时钟周期,6个时钟周期构成了单片机的机器周期。如果单片机的外部晶振是12MHz,则其内部的机器周期是1μs,指令周期为1~4μs。
2.典型指令的时序
MCS-51单片机共有111条指令,全部指令按其指令长度可分为单字节指令、双字节指令和三字节指令。执行这些指令所需要的机器周期数是不一样的,概括起来可以有以下几种情况:单字节单机器周期指令、单字节双机器周期指令、双字节单机器周期指令、双字节双机器周期指令、三字节双机器周期指令和单字节四机器周期指令。
一般情况下,算术逻辑操作发生在时相P1期间,而寄存器至寄存器之间的数据传送发生在时相P2期间。图3-21用内部状态和相位表明CPU取指令和执行指令的时序,这些内部时钟信号不能从外部观察到,所以用XTAL2的振荡器输出信号作为参考。引脚ALE输出信号为MCS-51扩展系统的外部存储器地址低8位的锁存信号,在访问外部程序存储器的周期内,ALE信号有效两次(S1P2至S2P1和S4P2至S5P1输出两个正脉冲);而在访问外部数据存储器的机器周期内,ALE信号有效一次(只在S1P2和S2P1期间产生一个正脉冲)。因此,ALE的频率是不恒定的。
图3-21 MCS-51单片机典型指令的时序
对于单周期指令,在把指令码读入指令寄存器时,从S1P2开始执行指令。如果它为双字节指令,则在同一机器周期的S4读入第二字节。如果它为单字节指令,则在S4仍旧进行读,但读入的字节(它应是下一个指令码)被忽略,而且程序计数器不加1。在任何情况下,在S6P2结束指令操作。图3-21(a)和(b)分别为1字节、1周期和2字节、1周期指令的时序。
一般情况下,2个指令码字节在一个机器周期内从程序存储器取出,仅有的例外是MOVX指令。MOVX是访问外部数据存储器的单字节双机器周期指令。在MOVX指令期间,少执行两次取操作,而进行寻址和选通外部数据存储器。图3-21(c)和(d)分别为一般的单字节双机器周期指令和MOVX指令的时序。