1.3 任务3 单灯闪烁电路的设计与制作
任务描述
在P1.0端口上接一个发光二极管D1,使D1不停地一亮一灭,一亮一灭的时间间隔为0.2秒。根据该任务构建单片机最小系统,单片机最小系统是单片机应用系统硬件设计的基础设计,所有应用系统都是在单片机最小系统基础上的应用扩展。
任务分析
1.硬件电路
如图1.7所示,该电路由复位电路和晶振电路组成,由P1口作为输入输出端口来控制LED灯的闪烁。
图1.7 闪烁的LED灯电路图
2.软件分析
(1)输出控制。如图1.7所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管D1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管D1亮。我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
(2)延时程序的设计方法。作为单片机的指令的执行时间是很短的,数量级在微秒级,因此我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时需插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理。
假设石英晶振频率为12MHz,则1个机器周期为1微秒,
机器周期 微秒 MOV R6, #201个 1 D1:MOV R7,#250 1个 1 DJNZ R7,$ 2个 2×250=500 DJNZ R6,D1 2个 20×(1+2×250)=10020μs
因此上面的延时程序时间为10.02ms,约为10ms。
由以上可知,当R6=10、R7=250时,延时5ms;R6=20、R7=250时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:
DELAY: MOV R5, #20 D1:MOV R6,#20 D2:MOVR7,#250 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET
(3)源程序如下:
ORG 0000H ;定义下面程序在程序存储空间的存放首地址 START:CLR P1.0 ;点亮LED LCALL DELAY ;调用延时0.2秒子程序 SETB P1.0 ;熄灭LED LCALL DELAY ;调用延时0.2秒子程序 LJMP START ;转到START,循环执行 ;延时子程序,延时0.2秒 DELAY:MOV R5,#20 ;源操作数20送R5 D1:MOV R6,#20 ;源操作数20送R6 D2:MOV R7,#250 ;源操作数250送R7 DJNZ R7,$;R7内容减1结果不为0执行本条指令,否则执行下一条指令 DJNZ R6,D2 ;R6内容减1结果不为0转到D2,否则执行下一条指令 DJNZ R5,D1 ;R5内容减1结果不为0转到D1,否则执行下一条指令 RET ;子程序返回 END ;程序结束
任务讨论
(1)怎样构造单片机的最小系统?
(2)什么是单片机的复位电路和时钟电路?
(3)单片机的时序是什么?
任务实施
(1)在Proteus中绘制闪烁LED灯的硬件电路图如图1.7所示。
(2)在Keil中编写花样流水灯的源程序.asm,并编译、链接,生成.hex文件。
(3)所得的.hex格式文件在Proteus中指定到MCU芯片中。
(4)运行仿真,观察仿真结果。
(5)Proteus中结果正常后,用实际硬件搭接并调试电路,通过编程器将.hex格式文件下载到AT89C51中,通电验证实验结果(有系统板的同学按照硬件电路图连线,无系统板的同学可以采用万用板按照硬件电路图搭接即可)。
1.3.1 单片机的复位状态
单片机在开机时都需要复位,以便使中央处理器CPU及其他功能部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机的复位信号从RST引脚输入,高电平有效,要求持续时间大于2个机器周期。
1.复位电路
图1.8(a)所示为开机复位电路,也称上电复位电路,由电容C1和电阻R1组成,一般C1取10μF,R1取8.2kΩ。上电复位电路是利用电容两端电压不能突变的原理实现的。当断电时,电容C1经放电后电荷为0;当上电时,由于电容两端电压不能突变,RST端的电平为高电平,随着电容的充电,RST端的电位逐渐降低,最终变为0。从上电到电容充电结束,RST端的电平由高电平到低电平,只要选择合适的电容、电阻参数,就能够保证两个以上机器周期的复位高电平时间,从而保证复位的实现。
图1.8(b)所示为开机复位/人工复位电路,也称按键复位电路。在系统运行过程中,只要按下按键K1就可以复位。一般R1=1kΩ,R2=200Ω,C1=22μF,按下按键K1,可以简单看成两个电阻串联,因为R1的电阻大,因而RST分压为高电平,系统复位,松开按键K1后RST电压给C1充电,随着电容的充电,RST端的电位逐渐降低,最终变为0,系统开始工作。
图1.8 MCS-51单片机的复位电路
2.复位状态
单片机在开机复位后或运行过程中被人工复位后,程序计数器PC的初值为0000H(所以单片机总是从0000H处开始运行程序)。片内RAM低端128个字节单元中的数据为随机值,单片机运行过程中的人工复位操作对它们的内容没有影响。21个特殊功能寄存器复位状态是P0~P3为FFH;SP为07H;SBUF不确定;IP、IE和PCON的有效位为0,非有效位为任意值;其余的特殊功能寄存器的状态均为00H。21个特殊功能寄存器的复位状态如表1.3所示。
表1.3 21个特殊功能寄存器的复位状态
(1)单片机复位后,PC里面的值为00H,也就是指向第一个程序存储单元,从这个存储单元开始执行程序指令。
(2)21个特殊功能寄存器会在项目3中详细介绍。
1.3.2 时钟电路
时钟电路用于产生MCS-51单片机工作所必需的时钟控制信号。时钟频率直接影响单片机的速度,电路的质量直接影响系统的稳定性。常用的时钟电路有两种方式:内部时钟方式和外部时钟方式。
1.内部时钟方式
利用芯片内部的振荡器,然后在引脚XTAL1和XTAL2两端跨接晶体振荡器(简称晶振),就构成了稳定的自激振荡器,发出的脉冲直接送入内部时钟电路。具体的接线方法如图1.9所示。外接晶振时,C1和C2的值通常选择为30pF左右,C1、C2对频率有微调作用,晶振或陶瓷谐振器的频率范围可在1.2~12MHz之间选择,其典型值为12MHz或6MHz。某些高速单片机芯片的时钟频率已达40MHz。
2.外部时钟
外部时钟信号由外部振荡器产生,它的波形应为方波,频率应符合所用的MCS-51单片机的具体要求。接入外部时钟时,应根据不同类型的单片机,选择相应的连线方式,如图1.10所示。
外部时钟方式常用于多片MCS-51单片机同时工作。
图1.9 MCS-51采用内部时钟的接线图
图1.10 MCS-51单片机与外部时钟的连接方式
1.3.3 单片机的时序
1.时序
时序是用定时单位来说明的。MCS-51的时序定时单位共有4个,从小到大依次是:时钟周期(节拍)、状态周期(状态)、机器周期和指令周期。下面分别加以说明。
(1)时钟周期。也称振荡周期、晶振周期或节拍,用P表示,采用内部时钟方式时,时钟周期就是石英晶体的振荡周期Fosc的倒数,即。采用外部时钟信号时时钟周期就是外部振荡器产生的振荡脉冲的振荡周期。
(2)状态周期。振荡脉冲经过二分频后,就是单片机的时钟信号的周期,定义为状态周期,也称为状态(用S表示)。一个状态就包含两个节拍,其前半周期对应的节拍称为P1,后半周期对应的节拍称为名。一个状态周期=2个时钟周期。
(3)机器周期。机器周期是指单片机完成一个基本操作所需要的时间,用T表示。MCS-51采用定时控制方式,因此它有固定的机器周期,规定一个机器周期的宽度为6个状态,并依次表示为S1~S6。由于一个状态又包括两个节拍,因此一个机器周期总共有12个节拍,分别记为S1P1、S1P2、S2P1、S2P2……S6P1、S6P2。由于一个机器周期共有12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频,即1个机器周期=12个时钟周期=6个状态周期。如图1.11所示,当振荡脉冲频率为12MHz时,一个机器周期为1μs;当振荡脉冲频率为6MHz时,一个机器周期为2μs。即
(4)指令周期。指令周期是最大的时序定时单位,执行一条指令所需要的时间称指令周期,它一般由若干个机器周期组成。不同的指令,所需要的机器周期数也不相同。通常包含一个机器周期的指令称为单周期指令,包含二个机器周期的指令称为双周期指令,等等。
指令的运算速度与指令所包含的机器周期有关,机器周期数越少的指令执行速度越快。MCS-51单片机通常可以分为单周期指令、双周期指令和四周期指令等三种。四周期指令只有乘法和除法指令两条,其余均为单周期和双周期指令。
图1.11 8051单片机的时序示意图
单片机执行任何一条指令时都可以分为取指令阶段和执行指令阶段。MCS-51的取指/执行时序如图1.12所示。
图1.12 MCS-51 单片机的取指/执行时序
由图可见,ALE引脚上出现的信号是周期性的,在每个机器周期内两次出现高电平。第一次出现在S1P2和S2P1期间,第二次出现在S4P2和S5P1期间。ALE信号每出现一次,CPU就进行一次取指操作,但由于不同指令的字节数和机器周期数不同,因此取指令操作也随指令不同而有小的差异。
按照指令字节数和机器周期数,8051的111条指令可分为六类,分别是:单字节单周期指令、单字节双周期指令、单字节四周期指令、双字节单周期指令、双字节双周期指令、三字节双周期指令,可以参见附录A。
图1.12(a)、(b)所示分别给出了单字节单周期和双字节单周期指令的时序。单周期指令的执行始于S1P2,这时操作码被锁存到指令寄存器内。若是双字节则在同一机器周期的S4读第二字节。若是单字节指令,则在S4仍有读出操作,但被读入的字节无效,且程序计数器PC并不增量。
图1.12(c)所示给出了单字节双周期指令的时序,两个机器周期内进行4次读操作码操作,因为是单字节指令,后三次读操作都是无效的。
1.3.4 单片机最小系统的设计
如图1.13所示,当单片机配置上合适的复位电路和时钟电路,就构成了单片机最小系统。加电,单片机就可从程序存储器0000H处开始运行程序了。
图1.13 单片机最小系统
X1晶振采用12MHz的石英晶体,C1、C2采用22pF电容,X1、C1、C2构成单片机的时钟电路,C3、R1、BUTTON构成复位电路,C3为10μF,R1为10kΩ,接电源,单片机采用片内程序存储器。
1.3.5 想一想,做一做:制作闪烁的LED灯
能否用面包板自制单片机最小系统,并且把任务3制成实际的电路。