单片机电子钟设计

上传人:F****n 文档编号:88033713 上传时间:2019-04-17 格式:PPT 页数:55 大小:567KB
返回 下载 相关 举报
单片机电子钟设计_第1页
第1页 / 共55页
单片机电子钟设计_第2页
第2页 / 共55页
单片机电子钟设计_第3页
第3页 / 共55页
单片机电子钟设计_第4页
第4页 / 共55页
单片机电子钟设计_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《单片机电子钟设计》由会员分享,可在线阅读,更多相关《单片机电子钟设计(55页珍藏版)》请在金锄头文库上搜索。

1、项目三 电子钟的设计 能力目标 1、能够使用单片机的定时/计数器实现定时、计 数等应用。 2、能够完成电子钟硬件电路与控制程序的设计、 制作与调试。 知识目标 1、了解单片机定时器/计数器的内部结构。 2、掌握单片机定时器的各种工作方式及特点、 应用场合。 3、掌握定时器中断服务程序的编写。,任务一、认识单片机的定时器/计数器,一、定时器/计数器及其应用 在单片机应用系统中,定时或计数是必不可少的。例如:测量一个脉冲信号的频率、周期,或者统计一段时间里电机转动了多少圈等。常用的定时方法有:,1、软件定时 软件定时是依靠执行一段程序来实现的,这段程序本身没有具体的意义,通过选择恰当的指令及循环次

2、数实现所需的定时,由于执行每条指令都需一定的时间,执行这段程序所需总的时间就是定时时间。 软件定时的特点是无需硬件电路,但定时期间CPU被占用,增加了CPU的开销,因此定时时间不宜过长,而且定时期间如果发生中断,定时时间就会出现误差。,3、可编程定时器定时 这种定时方法是通过对系统时钟脉冲的计数来实现的。通过程序来设置计数初值,改变计数初值也就改变了定时时间,使用起来非常灵活。由于定时器可以与CPU并行工作,因此不影响CPU的效率,且定时时间精确。,2、硬件定时 硬件定时通常由小规模集成电路555外加电阻、电容构成,电路简单,不占CPU资源,但定时时间的调节不够灵活方便。,(一)定时器/计数器

3、概述 在51系列单片机中有两个16位的加法计数器,分别叫做T0和T1。在计数脉冲的作用下,其计数值不断加1,在此过程中,计数器可能产生溢出,产生溢出后,可以向CPU发出中断请求。,如果计数脉冲来自系统时钟,称之为“定时器”,每个机器周期计数器加1;,如果计数脉冲来自外部电路,称之为“计数器”,一旦计数器产生溢出,TF0变为1 ,向CPU发出中断请求,二、定时器/计数器的控制寄存器 1、定时器控制寄存器TCON,TF0/TF1:定时器/计数器T1和T0的溢出中断标志。为1,表示定时器/计数器的计数值已由全1变为全0,正向CPU发中断请求。,TR0/TR1:定时器/计数器T0和T1的启停控制位:为

4、0时,定时器/计数器停止工作;为1时,启动定时器/计数器工作。,2、定时方式寄存器TMOD,选择定时/计数器的工作方式,M1M0= 00,方式0 01,方式1 10,方式2 11,方式3,定时方式/计数方式的选择控制位。为0,选定时方式,计数脉冲来自系统时钟的12分频;为 1,选计数方式,计数脉冲来自外部电路,当GATE=0时,只要TR0=1,与门的输出就为1,计数开始。 如果GATE为1,只有TR0=1,并且/INT0=1时,才允许计数。,C/T=0,选择定时方式,C/T=1,选择计数方式,GATE=0时,由TR0控制计数器启停 GATE=1时,由TR0和INT0一同控制启停,TR0=1时,

5、启动定时器,定时器溢出时,TF0置1,三、T0、T1的工作方式,1、方式0 方式0的计数器由13位构成,其中高8位在TH中,低5位在TL中。当计数器产生溢出时,TF位被置1,向CPU发出中断请求。在方式0下,计数器产生溢出时,不能进行初始计数值的自动重装(有关自动重装的问题参见方式2),所以方式0不能用于精确定时。 方式0的所有功能都可以用方式1代替,方式0的存在,是因为兼容早期的MCS-48单片机的原因,所以一般不使用方式0。,2、方式1 方式1与方式0工作形态基本相同,只是方式1的计数器由16位构成,其中高8位在TH中,低8位在TL中,当计数器产生溢出时,TF位被置1,向CPU发出中断请求

6、。在方式1下,计数器产生溢出时,也不能进行初始计数值的自动重装所以方式1也不能用于精确定时。,3、方式2 方式2是可以自动重装的工作方式:初始化时一般将8位计数初值同时放入TH、TL中,其中,TH存放的是初值的备份,TL用来计数,当8位计数器TL产生溢出时,除了可以向CPU发中断请求外,单片机的硬件部分还立即把TH中的备份送入TL中。 由于重新赋值是硬件自动进行的,所以避免了重新赋值的时间不一,所以方式2可以用于精确定时。,4、方式3 T1经常用于串行口的波特率发生器,为了让系统中保持两个计数器,可以让T0工作在方式3,这时,T0被分成两个8位计数器,分别位于TH0和TL0中,其中TL0使用T

7、0的中断、启动控制资源,而TH0则借用T1的中断、启动控制资源,而且TH0只能工作在定时方式下,不能工作在计数方式下。,(四)时间常数的计算 如果单片机需要进行周期性的工作,就应该让定时器/计数器T0或T1工作在定时方式,并且给T0或T1赋以一个初始计数值,在T0或T1被启动后,每个机器周期使计数器中的计数值加1,计数器产生溢出后,将再次给计数器赋值(该值被称为时间常数)。 显然计数器溢出时间(又称定时时间)与时间常数直接相关:时间常数越大,定时时间就越短;时间常数越小,定时时间就越长。同时系统时钟的频率也直接影响定时时间的长短,时钟的频率越高,定时时间越短;时钟的频率越低,定时时间越长。,设

8、系统时钟的频率为fosc,计数器的初始值为N,定时器工作于方式1,则定时时间: T=(216-N)12/fosc (1) 如果定时器工作于方式2或方式3,定时时间为: T=(28-N)12/fosc (2),当初始值N=0时,如果fosc=12MHZ,最大定时时间为: 方式1为: Tmax=21612/fosc=65536us=65.536ms 方式2、方式3为:Tmax=2812/fosc=256us,根据定时时间T,及公式(1)、(2)分别可以求出初值N为: 方式1: N=216-Tfosc/12 (3) 方式2、方式3 :N=28-Tfosc/12 (4) 如果fosc=12MHZ,以上

9、公式可简化为 方式1: N=216-T 方式2、方式3 :N=28-T,例如:系统的时钟频率是12MHz,在方式1下,如果希望定时器/计数器T0的定时时间T为10ms,则初值N =216-T=65536-10000=55536 如何将55536给两个8位寄存器TH0、TL0赋值呢?可将十进制数55536转换成四位十六进制数,将高2位送TH0,低2位送TL0。 更简单的方法是:对于16位计数器来讲, 216等效为0,对于8位计数器,28等效为0,这样公式(3)、(4) 可简化为 N=-T,直接用下面两条语句就可以完成计数器初值的设置: TH0=-10000/256; /取-N的高8位 TL0=-

10、10000%256; /取-N的低8位 例如:设系统的时钟频率是12MHz,定时器工作于方式2,定时时间200us。 根据前面分析,N=-T=-200,可直接用以下语句实现: TH0=-200; TL0=-200;,任务二、定时器应用,案例1 设时钟频率fosc=12MHz,用定时器T0在P1.0脚产生频率为20Hz的方波。,设计思想:在使用定时器/计数器时,首先应根据要求对工作方式进行初始化,然后计算出初始值。初始化的步骤通常是:,(1)向TMOD寄存器写入工作方式控制字。,(2)将计数器的初值写入TH0、TL0/TH1、TL1。,(3)启动定时器/计数器:将TR0/TR1置1。,(4)如果

11、采用中断方式,还应将ET0/ET1、EA置1。,本题中,方波的频率为20HZ,对应的周期为50ms,如果将定时时间设置为25ms,每隔25ms将P1.0脚取反即可产生如图3-3所示的方波。因为定时时间为25ms,如果采用方式2或方式3,其定时的最大时间不超过256us,因此选方式1比较恰当,根据前面的分析,计数器初值N=-25000。本例题是定时而非计数,且无需脚参与启停控制,故C/ =0,GATE为0,这样TMOD取0x01。,void main(void) TMOD=0x01; TH0=-25000/256; TL0=-25000%256; TR0=1; ET0=1; EA=1; whil

12、e(1); void timer0(void) interrupt 1 TH0=-25000/256; TL0=-25000%256; P10=P10; ,T0工作于定时方式1,定时时间为25ms,启动定时器T0,允许定时器T0中断,单片机开中断,定时器T0中断服务程序,重新装入时间常数,P1.0求反,案例2 如图所示,P0口接8只发光二极管,编程使发光管轮流点亮,点亮时间为500ms,要求使用定时器T0来控制,设晶振为12MHz,设计思想 我们可将P0口的初值设置为0xFE,对应于发光管D1亮,每隔500ms将P0的值循环左移一位,这一周期性的定时作业用T0来完成。 当时钟频率为12MHZ时

13、,在定时器的4种工作方式中,方式1的最大溢出时间最长,但即使在方式1,最大的溢出时间也只有65.536ms,所以我们不能在每次中断时都执行上述移位操作,可以这样处理:将定时器T0的溢出时间设定为50ms,累计满10次中断正好500ms,才允许程序执行1次移位动作,,主函数 uchar count=0; /50ms定时中断次数计数器 void main(void) led=0xfe; TMOD=0x01; /T0工作于方式1 TH0=-50000/256; /定时时间为50ms TL0=-50000%256; ET0=1; /允许T0中断 TR0=1; /启动T0定时 EA=1; /CPU开中断

14、 while (1); ,void time0(void) interrupt 1 TH0=-50000/256; TL0=-50000%256; count+; if(count=10) count=0; led=_crol_(led,1); P0=led; ,定时器T0中断服务程序,重新装入时间常数,每中断一次,计数器加1,10次中断为0.5秒,满10次变量led左移1位送P0口,案例3 用定时器的计数方式实现外部中断。如图所示,P0口控制8只发光管轮流点亮,发光管点亮时间为500ms,单脉冲电路控制发光管的移动方向,按下单脉冲按钮,发光管左移,再按下发光管右移 。,设计思想: 当定时器/

15、计数器工作于计数方式2时,如果将计数器的初值设置为全1,只要在计数输入端(T0或T1)送入一个计数脉冲,就可使计数器产生溢出中断。 如果将外部中断请求作为计数脉冲输入,就可利用计数中断的名义去完成外部中断服务。 当应用中外部中断请求较多时,而单片机内部的定时器/计数器还有富余时,可采用这种方法来扩展外部断。因此本例的实质是将定时器的计数输入端T1扩展为外部中断请求输入,来控制发光管的移动方向。,具体方法:,1、初始化定时器/计数器T1计数工作方式2,即每 次溢出中断后能自动装入计数初值。,2、计数器TH1、TL1的初值预置为0FFH。,3、程序中设置一个位变量,每当计数器T1产生溢 出中断时求

16、反,发光管左移还是右移取决于该 变量是0还是1 。,void main(void) DIR=0; led=0xfe; TMOD=0x61; TH0=-50000/256; TL0=-50000%256; TH1=0xff; TL1=0xff; ET0=1; ET1=1; TR0=1; TR1=1; EA=1; while (1); ,T0为定时方式0,T1为计数方式2,定时时间为50ms,T1的初值为0xff,允许T0、T1中断,启动T0定时,启动T1计数,CPU开中断,void time0(void) interrupt 1 TH0=-50000/256; TL0=-50000%256; count+; if(count=10) count=0; if(DIR=1) led=_crol_(led,1); else led=_cror_(

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号