文档库 最新最全的文档下载
当前位置:文档库 › 定时器

定时器

定时器
定时器

桂林电子科技大学

单片机实训Ⅱ报告

定时器

学院(系):电子信息工程系专业:电子信息工程技术学号:

学生姓名:哥叫大明星

指导教师:

目录

1、引言 (2)

2、摘要 (3)

3、课题的要求和意义 (5)

3、电子定时器的应用 (5)

4、芯片AT89C51的介绍 (5)

5、芯片DS1302的简介 (8)

6、定时器设计原理 (8)

7、定时器设计心得体会 (11)

8、谢辞 (11)

9、参考文献 (11)

10、附录 (12)

引言

我们在日常生活中,经常碰到一些需要定时的事情,例如:印相或放大照片,需要定在零点几秒的时间,洗衣机洗涤衣物需要定在几分钟到几十分钟的时间,电风扇需要定在数十分钟的时间。完成这种定时的定时器有多种多样,在家用电器中采用机械定时器就是根据一般上弦钟表原理设计的,这种定时器虽然结构简单,成本低,维修也比较方便,但是它的触头频繁接触和断开,大大的缩减了它的使用寿命,也不利于进一步全自动化。在电子技术突飞猛进的今天,电子定时器一定会逐步取而代之,这是不言而喻的。

摘要

单片机,是集CPU ,RAM ,ROM ,计数和多种接口于一体的微控制器。自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注。它体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。本课题通过MCS-51单片机来设计电子时钟,采用汇编语言进行编程,可以实现以下一些功能:小时,分,秒和年,月,的显示、定时报警功能。本次设计的电子时钟系统由时钟电路,LCD显示电路,定时报警电路,按键调整电路四部分组成。51单片机通过软件编程,在LCD1602液晶屏上实现小时,分,秒和年,月,的显示;利用时钟芯片DS1302来实现计时,定时功能;通过两个按键开关,一个用于时钟的调节,一个用于闹钟的调节,来实现参数设置和调节功能;到达设置的闹钟时间时,由蜂鸣器发声,起报警作用。本次设计的电子时钟,经过对比测试,发现实际计时的走时精度较高,可满足多种场合的应用需求。

本文详细介绍了AT89C51单片机的基本原理,分析了AT89C51各个管脚的功能及它在设计电路中的作用。本文论述了LCD1602液晶屏和时钟芯片DS1302的工作原理及其软件设计过程。关键词:单片机电子时钟时钟芯片

关键词:定时器;单片机;AT89C2051;

【Abstract】

Progress , development of electron industry , the timer application are also more and more broad with the times. But, the tradition timer all is to use spring to drive machinery timers such as style , electric motor drive style or electric clock style. Come the electron timer to say volume is small , weight is light , cost of construction is low , accuracy is high , life-span is long, and safety is reliable , adjust to be suitable for being frequently put into use conveniently relatively painful timer of product. Have designed that the monolithic machine is core originally adopt AT89C2051 , have set forth system operating principle , have given a software out technological process. The power source go along being the electron timer's turn to be satisfied with electrical equipment is controlled , is wants the convenience of customers operation to electron timer at the same time. Maximal time can reach 30 hs , by all means maximal accuracy can arrive at a minute

Keywords: Timer; Monolithic machine; AT89C2051; Development is scanned; Relay

课题的要求和意义

本课题是通过导师筛选提出的,电子设计课题不一定很大,只要通过亲手做一遍全过程,完成一个产品制作,收获是很大的。

要求:①、LCM1602液晶显示②、按键加调时功能

③、6组以上闹铃定时功能④、蜂鸣器报警

本课题的意义在于通过设计和制作本课题把在学校学习到的知识融会贯通并应用到实际当中。做到学有所成,学有所用。并且希望通过本设计为节能减排做出贡献。

电子定时器的应用

电子定时器在家用电器中经常用于延时自动关机、定时。延时自动关机可用于:收音机、电视机、录音机、催眠器、门灯、路灯、汽车头灯、转弯灯以及其他电器的延时断电及延时自停电源等。定时可用于:照相定时曝光、定时闪光、定时放大、定时调速、定时烘箱、冰箱门开定时报警、水位定时报警、延时催眠器、延时电铃、延时电子锁、触摸定时开关等。例如:空调中的定时器,在工作一段时间之后便能自动切断电源停止工作。夏季夜间使用,入睡前先顶好时间,等睡熟后到了预定时间,空调自动关机。方便节能。定时器除了应用于家用电器外,还广泛地用于工业农业生产和服务设施,甚至军事等。

芯片AT89C51介绍

定时器/计数器方式寄存器TMOD:

由图可见,TMOD的高4位用于T1,低4使用于T0,4种符号的含义如: GATE:门控制位。GATE 和软件控制位TR、外部引脚信号INT的状态,共同控制定时器/计数器的打开或关闭。C /T:定时器/计数器选择位。C/T=1,为计数器方式;C/T=0,为定时器方式。M1M0:工作方式选择位,定时器/计数器的4种工作方式由M1M0设定。

定时器/计数器方式控制寄存器TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器0

,高半字节定义为定时器1。复位时,TMOD所有位均为0。

定时器/计数器控制寄存器TCON:

TCON的作用是控制定时器的启、停,标志定时器溢出和中断情况。TCON的格式如下图所示。其中,TFl,TRl,TF0和TR0位用于定时器/计数器;IEl,ITl,IE0和IT0位用于中断系统。

各位定义如下:

TF0:定时器0溢出标志。其功能及操作情况同TF1

TF1:定时器1溢出标志位。当字时器1计满溢出时,由硬件使TF1置“1”,并且申请中断。进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清“0”。

TR1:定时器1运行控制位。由软件清“0”关闭定时器1。当GATE=1,且INT1为高电平时,TR1置“1”启动定时器1;当GATE=0,TR1置“1”启动定时器1。

TR0:定时器0运行控制位。其功能及操作情况同TR1。

IE1:外部中断1请求标志。

IT1:外部中断1触发方式选择位。

IE0:外部中断0请求标志。

IT0:外部中断0触发方式选择位。

定时器/计数器的初始化:由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作。初始货的步骤一般如:1、确定工作方式(即对TMOD赋值);2、预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);3、根据需要开放定时器/计数器的中断(直接对IE 位赋值);4、启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚步加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。因为在不同工作方式下计数器位数不同,因而最大计数值也不同。现假设最大计数值为M,那么各方式下的最大值M值如:方式0:M=213=8192 方式1:M=216=65536 方式2:M=28=256 方式3:定时器0分成两个8位计数器,所以两个M均为256。因为定时器/计数器是作“加1”计数,并在计数满溢出时产生中断,因此初值X可以这样计算:

X=M-计数值

定时器/计数器的四种工作方式:

定T0或T1无论用作定时器或计数器都有4种工作方式:方式0、方式1、方式2和方式3。除方式3外,T0和T1有完全相同的工作状态。工作方式0: 13位方式由TL1的低5位和TH1的8位构成13位计数器(TL1的高3位无效)。定时/计数选择:C/T=0,T1为定时器,定时信号为振荡周期12分频后的脉冲;C/T=l,T1为计数器,计数信号来自引脚T1的外部信号。定时器T1能否启动工作,还受到了R1、GATE和引脚信号INT1的控制。由图中的逻辑电路可知,当GATE=0时,只要TR1=1就可打开控制门,使定时器工作;当GATE=1时,只有TR1=1且INT1=1,才可打开控制门。GATE,TR1,C/T的状态选择由定时器的控制寄存器TMOD,TCON中相应位状态确定,INT1则是外部引脚上的信号。定时器启动后,定时或计数脉冲加到TLl的低5位,从预先设置的初值(时间常数)开始不断增1。TL1计满后,向THl进位。当TL1和THl都计满之后,置位T1的定时器回零标志TFl,以此表明定时时间或计数次数已到,以供查询或在打开中断的条件下,可向CPU请求中断。如需进一步定时/计数,需用指令重置时间常数。⑵ TMOD寄存器初始化为把定时器/计数器1设定为方式0,则M1M0=00;为实现定时功能,应使C/T=0;为实现定时器/计数器1的运行控制,则GATE=0。定时器/计数器0不用,有关位设定为0。因此TMOD寄存器应初始化为00H。⑶ 由定时器控制寄存器TCON中的TR1位控制定时的启动和停止TR1=1启动,TR1=0停止。

工作方式1:

1是16位计数结构的工作方式,计数器由TH0全部8位和TL0全部8位构成。与工作方式0基本相同,区别仅在于工作方式1的计数器TL1和TH1组成16位计数器,从而比工作方式0有更宽的定时/计数范围。

工作方式2

8位自动装入时间常数方式。由TLl构成8位计数器,THl仅用来存放时间常数。启动T1前,TLl和THl装入相同的时间常数,当TL1计满后,除定时器回零标志TFl置位,具有向CPU请求中断的条件外,THl中的时间常数还会自动地装入TLl,并重新开始定时或计数。所以,工作方式2是一种自动装入时间常数的8位计数器方式。由于这种方式不需要指令重装时间常数,因而操作方便,在允许的条件下,应尽量使用这种工作方式。当然,这种方式的定时/计数范围要小于方式0和方式1。当计数溢出后,不是像前两种工作方式那样通过软件方法,而是由预置寄存器TH以硬件方法自动给计数器TL 重新加载。变软件加载为硬件加载。初始化时,8位计数初值同时装入TL0和TH0中。

当TL0计数溢出时,置位TF0,同时把保存在预置寄存器TH0中的计数初值自动加载TL0,然后TL0重新计数。如此重复不止。这不但省去了用户程序中的重装指令,而且也有利于提高定时精度。但这种工作方式下是8位计数结构,计数值有限,最大只能到255。这种自动重新加载工作方式非常适用于循环定时或循环计数应用,例如用于产生固定脉宽的脉冲,此外还可以作串行数据通信的波特率发送器使用。

工作方式3

2个8位方式。工作方式3只适用于定时器0。如果使定时器1为工作方式3,则定时器1将处于关闭状态。当T0为工作方式3时,THo和TL0分成2个独立的8位计数器。其中,TL0既可用作定时器,又可用作计数器,并使用原T0的所有控制位及其定时器回零标志和中断源。TH0只能用作定时器,并使用T1的控制位TRl、回零标志TFl和中断源,见下图。

通常情况下,T0不运行于工作方式3,只有在T1处于工作方式2,并不要求中断的条件下才可能使用。这时,T1往往用作串行口波特率发生器(见1.4),TH0用作定时器,TL0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器/计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的。这时,可把定时器l用于工作方式2,把定时器0用于工作方式3。

DS1302简介

DS1302的结构及工作原理

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

定时器设计原理

晶振电路

晶振在数字电路的基本作用是提供一个时序控制的标准时刻。数字电路的工作是根据电路设计,在某个时刻门完成特定的任务,如果没有一个时序控制的标准时刻,整个数字电路就会成为“聋子”,不知道什么时刻该做什么事情了。晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。晶振的工作原理:主板时钟芯片即分频器的原始工作振荡频率,由石英晶体多谐振荡器的谐振频率来产生,晶振其实是一个频率产生器,他主要把传进去的电压转化为频率信号。提供给分频率一个基准的14.318MHZ的振荡频率,它是一个多谐振荡器的正回馈环电路,也就是说它把输入作为输出,把输出作为输入的回馈频率,象这样一个永无休止的循环自激过程。

设计心得体会

在做这个设计实验的时候,一开始不太会做所以在做的过程中出现了许多问题,花了我不少时间,可当做完时才发现做这个定时器是多么简单的一件事,主要是在调试时花了不少时间在做课程设计的过程中,我深深地感受到了自己所学到知识的有限,明白了只学好课本上的知识是不够的,要通过图书馆和互联网等各种渠道来扩充自己的知识。在实验过程中我们曾经遇到过问题。一个是在电路接好之后计数的显示结果不正确,经分析知道了是电路中有些不懂的地方,努力纠正错误。我遇到的第二个问题是有线路太多,容易混乱。

所以我没有一时检查出问题,但是我没有沮丧但是从中我学习到了如何对待遇到的困难,进一步培养了我一丝不苟的科学态度和不厌其烦的耐心。在实际的操作过程中,能把理论中所学的知识灵活地运用起来,并在调试中会遇到各种各样的问题,电路的调试提高了我解决问题的能力,学会了在设计中独立解决问题,也包括怎样去查找问题。似乎所有的事都得自己新手去操作才会在脑海中留下深刻的印象,这个课程设计让我可以熟练的操作软件,也了解了不少器件的功能的应用,也加深了对单片机设计的认识和理解。

谢辞

这次实训可谓艰辛苦乐交杂,一开始,我们把lcm1602封装画错了,费了好大的劲才重新把错误给纠正,并花了几个小时重新画了一个没有跳线的PCB,辛苦啊...还好,有各位老师不厌其烦的指导,同学们在问题见解上的一些大力相助,才使得这次实训能够安教学进度顺利完成,在此,本人无限感激。谢谢!

参考文献

[1] 代启化.基于Proteus的电路设计与仿真[J].现代电子技术.2006,第19期.

[2] 侯玉宝基于Proteus的51系列单片机设计与仿真[M]电子工业出版社,2008.270~288

[3] 蔡希彪,曹洪奎; 单片机电子时钟系统的设计与仿真 [J];中国科技信息; 2007年

[4] 方怡冰.单片机课程的教学与实验改革[J].电气电子教学学报.2006,第3期.

[5] 刘文秀.单片机应用系统仿真的研究[J].现代电子技术.2005, 第286 期

[6] 李光飞.单片机设计实例指导[M].北京:北京航空航天大学出版社,2004

[7] 杨立民.单片机技术及应用[M].西安:西安电子科技大学出版社.1997.90~120.

附录

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit ACC0 = ACC^0;

sbit ACC7 = ACC^7;

sbit t=P1^0;//进入调时按键

sbit jia=P1^1;//加一按键

sbit jian=P1^2;//减一按键

sbit m=P1^3;//退出调时按键

sbit BEEP=P2^0;//蜂鸣器

sbit jtod=P1^4;//矩阵按键转独立按键,该脚置0

sbit T_CLK = P1^6; /*实时时钟时钟线引脚*/

sbit T_IO = P3^5; /*实时时钟数据线引脚*/

sbit T_RST = P1^7; /*实时时钟复位线引脚*/

sbit E=P2^7; //1602使能引脚

sbit RW=P2^6; //1602读写引脚

sbit RS=P2^5; //1602数据/命令选择引脚

uchar code hanzi[][8]={{0x04,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02},{0x0f,0x09,0x0f,0x09,0x0f,0x09,0 x13,0x11},{0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}};

void v_W1302(uchar ucAddr, uchar ucDa);

uchar uc_R1302(uchar);

uchar dectobcd(uchar bcd);

uchar bcdtodec(uchar);

void beep();

void delay(uchar x)

{ uchar i;

while(x--)

for(i=0;i<110;i++);

}

/********************************************************************

* 名称: enable(uchar del)

* 功能: 1602命令函数

* 输入: 输入的命令值

* 输出: 无

***********************************************************************/ void enable(uchar del)

{ RS = 0;

RW = 0;

P0 = del;

E = 1;

delay(3);

E=0;

}

/********************************************************************

* 名称: write(uchar del)

* 功能: 1602写数据函数

* 输入: 需要写入1602的数据

* 输出: 无

***********************************************************************/ void write(uchar del)

{ RS = 1;

RW = 0;

P0 = del;

E = 1;

delay(3);

E=0;

}

********************************************************************

* 名称: L1602_init()

* 功能: 1602初始化,请参考1602的资料

* 输入: 无

* 输出: 无

***********************************************************************/ void L1602_init(void)

{ enable(0x01);

enable(0x38);

enable(0x06);

enable(0x0c);

E=0;

}

//装入自定义字符(汉字)

void writch()

{ uchar i,j;

enable(0x40);

for(i=0;i<8;i++)

for(j=0;j<8;j++)

write(hanzi[i][j]);

}/********************************************************************

* 名称: L1602_char(uchar hang,uchar lie,char sign)

* 功能: 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下

L1602_char(1,5,'b')

* 输入: 行,列,需要输入1602的数据

* 输出: 无

***********************************************************************/ void L1602_char(uchar hang,uchar lie,char sign)

{ uchar a;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0;

a = a + lie - 1;

enable(a);

write(sign);}

/********************************************************************

* 名称: L1602_string(uchar hang,uchar lie,uchar *p)

* 功能: 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

L1602_string(1,5,"ab cd ef;")

* 输入: 行,列,需要输入1602的数据

* 输出: 无

***********************************************************************/ void L1602_string(uchar hang,uchar lie,uchar *p)

{ uchar a;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0;

a = a + lie - 1;

enable(a);

while(1)

{ if(*p == '\0') break;

write(*p);

p++;

}

}

//时钟调节//

void timechange()

{

uchar a,num=1;

uchar year,mon,day,hour,min,sec;

//进入调时循环

while(num)

{ if(t==0)

delay(5);

if(t==0)

{ num++;

beep();

while(!t);

}//退出调时按键m

if(m==0)delay(5);

if(m==0)num=0;enable(0x0f);

a=uc_R1302(0x81)|0x80;v_W1302(0x8e,0); v_W1302(0x80,a); //调时到年以后退出调时

if(num==7)num=0;//num=1调秒

if(num==1)

{ enable(0xc0+12);

if(jia==0)

delay(5);

if(jia==0) //秒加一

{ while(!jia);

sec=bcdtodec(uc_R1302(0x81)&0x7f); sec++;

if(sec>59) sec=0;

L1602_char(2, 12, sec/10%10+48);

L1602_char(2, 13, sec%10 + 48);

v_W1302(0x80,dectobcd(sec)|0x80);

}

if(jian==0) //秒减一delay(5);

if(jian==0)

{ while(!jian);

sec=bcdtodec(uc_R1302(0x81)); sec--;

if(sec==-1) sec=59;

L1602_char(2, 12, sec/10%10+48);

L1602_char(2, 13, sec%10 + 48);

v_W1302(0x80,dectobcd(sec)|0x80);

}

}

if(num==2) //调分钟

{ enable(0xc0+9);

if(jia==0)

delay(5);

if(jia==0)

{ min = bcdtodec(uc_R1302(0x83)); min++;

while(!jia);

if(min>59) min=0;

L1602_char(2, 9, min / 10 % 10 + 48);

L1602_char(2, 10, min % 10 + 48);

v_W1302(0x82,dectobcd(min));

}

if(jian==0) delay(5);

if(jian==0)

{

min = bcdtodec(uc_R1302(0x83));min--;

while(!jian);

if(min==-1) min=59;

L1602_char(2, 10, min % 10 + 48);

v_W1302(0x82,dectobcd(min));

}

}

if(num==3) //调小时

{ enable(0xc0+6);

if(jia==0) delay(5);

if(jia==0)

{ hour = bcdtodec(uc_R1302(0x85));

hour++;

while(!jia);

if(hour>23) hour=0;

L1602_char(2, 6, hour / 10 % 10 + 48);

L1602_char(2, 7, hour % 10 + 48);

v_W1302(0x84,dectobcd(hour));

}

if(jian==0)delay(5);

if(jian==0)

{ while(!jian);

hour = bcdtodec(uc_R1302(0x85)); hour--; if(hour==-1)hour=23;

L1602_char(2, 6, hour / 10 % 10 + 48);

L1602_char(2, 7, hour % 10 + 48);

v_W1302(0x84,dectobcd(hour));

}

}

if(num==4) //调日期

{ enable(0x80+13);

if(jia==0)delay(5);

if(jia==0)

{ hour = bcdtodec(uc_R1302(0x87));day++; while(!jia);

if(day>31)day=0;

L1602_char(1, 13, day / 10 % 10 + 48);

v_W1302(0x86,dectobcd(day));

}

if(jian==0) delay(5);

if(jian==0)

{ while(!jian);

day=bcdtodec(uc_R1302(0x87));day--;

if(day==-1)day=31;

L1602_char(1,13,day/10%10+48);

L1602_char(1,14,day%10+48);

v_W1302(0x86,dectobcd(day));

}

}

if(num==5) //调月份

{ enable(0x80+10);

if(jia==0) delay(5);

if(jia==0)

{ mon = bcdtodec(uc_R1302(0x89));

mon++;

while(!jia);

if(mon>12)mon=0;

L1602_char(1, 10, mon / 10 % 10 + 48);

L1602_char(1, 11, mon % 10 + 48);

v_W1302(0x88,dectobcd(mon));

}

if(jian==0)delay(5);

if(jian==0)

{ while(!jian);

mon = bcdtodec(uc_R1302(0x89));mon--;

if(mon==-1) mon=12;

L1602_char(1, 10, mon / 10 % 10 + 48);

L1602_char(1, 11, mon % 10 + 48);

v_W1302(0x88,dectobcd(mon));

}

}

if(num==6) //调年份

{ enable(0x80+7);

if(jia==0)delay(5);

if(jia==0)

{ year = bcdtodec(uc_R1302(0x8d)); year++;

while(!jia);

if(year>20)year=0;

L1602_char(1, 7, year / 10 % 10 + 48);

L1602_char(1, 8, year % 10 + 48);

v_W1302(0x8c,dectobcd(year));

}

if(jian==0)delay(5);

if(jian==0)

{ while(!jian);

year = bcdtodec(uc_R1302(0x8d)); year--;

if(year==-1) year=20;

L1602_char(1, 7, year / 10 % 10 + 48);

L1602_char(1, 8, year % 10 + 48);

v_W1302(0x8c,dectobcd(year));

}

}

}

if(num==0) //关闭光标闪烁

{ enable(0x0c);

}

v_W1302(0x80,uc_R1302(0x81)&0x7f); //开启1302记时

}

/********************************************************************

* 名称: v_RTInputByte()

* 功能: 往DS1302写入1Byte数据

* 输入: ucDa 写入的数据

* 输出: 无

***********************************************************************/ void v_RTInputByte(uchar ucDa)

{ uchar i;

基于计数器的长时间的定时器

基于计数器的长时间的定时器 建筑教研组:方联根 长时间定时器在电器控制中有着广泛的应用。在传统的RC 定时器要获得长时间的延时,不仅需要大容量、漏电流小的电容器,而且定时精度低,很难显示定时的进度。 本文介绍一个基于计数器能显示定时进度的、长时间的定时器的设计。该设计由555构成多谐振荡器产生一个时基信号、CD4518十进制计数器担任分频器、CD4511/七段译码器驱动03011C 数码管(共阴极)显示定时进度,具有时间精度高,延时时间长和可靠性高的特点。 1、原理框图(图1) 图1 1.1 线路分析 1.1.1时基信号的产生 图2是一个由555和电阻RA 、RB 和电容器C 构成多谐振荡器,产生一个时基信号。 1.1.2 振荡频率参数设置 振荡频率f 与RC 有以下的近似关系f=1.443/(RA+2RB)*C 实际使用定时器,往往需要控制时间连续可调,为了保证时间可调,则振荡回路RA 可选择线性较好的X 型可调电位器,延时电容可选择稳定性好的NP 电容器,定时器延时刻度可根据所选择的可调电位器机械行程的偏转角度来定,从而使设定时间值(标牌刻度示值)与实际延时值相吻合,以减少整定误差。 T10693RA RB C T20693RB C F 1443RA 2RB C =.(+)*=.*=./(+)* C CD4518 CP1CP2 EN1EN2Q1A Q1B Q2A Q2B Q3A Q3B Q4A Q4B R1VSS VDD R2

图2 图3 1.1.3 计数/分频电路 1.1.3.1 CMOS 计数器集成电路CD4518引脚图 (图3) 1.1.3.2 线路分析 该定时器的核心IC 是双二—十进制计数器/分频器构成分频系数为100的分频器,时基信号从CP1进来(EN1接VDD ),从Q4A 输出可获得分频系数10,Q4A 输出不能直接连接到CP2,因为这时分频系数是8。正确的连接方法应该将Q4A 连接到EN2,(CP2接VSS )。 集成电路的R1、R2复位端在电路上电的同时由C 、R 组成的微分电路上产生瞬间尖脉冲,使计数器的输出端复位清零,待上电瞬间结束后,电路即进入分频延时工作状态。 1.1.4 LED 显示驱动电路 1.1.4.1 CD4511七段译码器集成电路引脚图 (图4) CD4511 VDD VSS f g a b c d e A1A2A3A4LE LT BI 图4 1.1.4.2 功能简介 CD4511是一个用于驱动共阴极 LED (数码管)显示器的 BCD 码—七段码译码器,特点如下: 具有BCD 转换、消隐和锁存控制、七段译码及驱动功能的CMOS 电路能提供较大的拉电流。可直接驱动LED 显示器。 其功能介绍如下: BI :4脚是消隐输入控制端,当BI=0 时,不管其它输入端状态如何,七段数码管均处于熄灭(消隐)状态,不显示数字。 LT :3脚是测试输入端,当BI=1,LT=0 时,译码输出全为1,不管输入 DCBA 状态如何,七段均发亮,显示“8”。它主要用来检测数码管是否损坏。 LE :锁定控制端,当LE=0时,允许译码输出。 LE=1时译码器是锁定保持状态,译码器输出被保持在LE=0时的数值。 A1、A2、A3、A4、为8421BCD 码输入端。 a 、 b 、 c 、 d 、 e 、 f 、 g :为译码输出端,输出为高电平1有效。 CD4511的内部有上拉电阻,在输入端与数码管笔段端接上限流电阻就可工作。 2. 应用 2.1 100分钟定时器电路图 (图5) 2.2 线路分析 当电路上电时,C2、R1和C3、R3产生一个微分尖脉冲,使计数器CD4518和 D 型触发器CD4013复位清零。此时D 型触发器的Q 反为高电平,三极管导通,继电器吸合。 该定时器由555集成电路和电阻RA 、RB 、电容器C ,产生1分钟的的时基信号,经1/2CD4518分频(10分频)后Q4A 的下降沿触发下一个分频器。同时Q1A 、Q2A 、Q3A 、Q4A 输出BCD 码送入CD4511七段译码器驱动LED 数码管。当当计数器接受

LTE定时器整理

定时器

1、T313定时器: 1 a、T313是连接模式下UE检测无线链路失败的定时器,在SIB1中广播。 b、当UE从L1检测到连续N313个失步指示后启动T313定时器。当UE从L1检测到连续N315个同步 指示后停止T313定时器。 c、一旦T313超时,UE上报原因值为RL FAILURE的CELL UPDATE消息通知RNC空中接口下行失步。 d、T313设置的过大,UE要较长时间才能察觉RL下行失步,此时间内相关资源无法及时释放,也无法 发起恢复操作或响应新的资源建立请求。 e、T313设置的过小,很可能造成对RL偶而的闪断过于敏感,从而导致频繁对本可以迅速自我恢复的 RL上报CELL UPDATE消息,造成系统不必要的消息处理和流程开销。 f、一般设置为3,单位为S 2、N313计数器: a、N313表示连接模式下UE从L1层收到连续失步指示的最大次数,在SIB1中广播 b、N313设置的越大,UE对RL失步的判断就越不敏感,可能造成本来不可用的RL迟迟不能被上报RL 失步进而无法触发后续的恢复或重建操作 c、N313设置的越小,越可以保证RL传输的可靠性,但相应的也会增加可恢复性RL闪断的误判,从 而可能导致UE频繁的上报原因值为RL FAILURE的CELL UPDATE消息; d、一般设置为10,单位为次; 3、T314定时器: a、当RL下行失步满足无线链路失败准则,UE发送了原因值为RL FAILURE的CELL UPDATE消息后, 若当前存在与T314定时器关联的无线承载,则UE需要启动T314定时器。当小区更新过程完成后停止T314。 b、在业务对应的T314超时之前,如果由CELL UPDATE CONFIRM配置的无线链路建不成功,则还可以 重发CELL UPDATE消息,进行无线链路的重建(重发CELL UPDATE消息和等待响应的保护机制由T302和N302联合完成),基于此目的,配置T314应大于T302×N302。 c、一旦T314超时,则相应的业务RB就被删除。 d、T314设置的过大,UE要较长时间才能将已无法恢复的RL的相应业务资源释放,此时间内相关资源 吊死,无法分配给其他业务使用。 e、T314设置的过小,如上文所述,很可能造成无法与T302和N302的正确配合工作,从而导致RL重 建失败率上升,业务被过早释放。m f、一般设置为12,单位12S; 4、T315定时器: a、当RL下行失步满足无线链路失败准则,UE发送了原因值为RL FAILURE的CELL UPDATE消息后, 若当前存在与T315定时器关联的无线承载,则UE需要启动T314定时器。当小区更新过程完成后停止

AVR定时器中断初值计算方法

AVR定时器中断初值计算方法 使用芯片ATMega16外部晶振 定时器1(16位定时器)寄存器TCCR1B=0x04设定256预分频要利用定时器定时1秒 1,4000000/256=15625说明定时器每当1/15625秒就会触发一次中断 2,65535-15625=49910计算出要累加多少次才能在1秒后出发定时器1的溢出中断 3,49910<==>C2F6将计算后的值换算成16进制 4,TCNT1H=0xC2;对寄存器赋值 TCNT1L=0xF6; ================================================= 例如用16位定时器TIMER1,4MHZ晶振,256分频,100ms定时,如何求得初值赋给TCNT1 65536-(4M/256)*= 其中,4M是晶体频率,是定时时长单位秒。 对于8位的定时器 T=(2^8-计数初值)*晶振周期*分频数=(2^8-计数初值)/晶振频率*分频数计数初值=2^8-T/晶振周期/分频数=2^8-T*晶振频率/分频数

因为AVR一指令一周期 IARForAVR精确延时 C语言中,想使用精确的延时程序并不容易。IAR中有这样的一个函数__delay_cycles(),该函数在头文件中定义,函数的作用就是延时N个指令周期。根据这个函数就可以实现精确的延时函数了(但不能做到100%精确度)。 实现的方法: 建立一个的头文件: #ifndef__IAR_DELAY_H #define__IAR_DELAY_H #include<> #defineXTAL8//可定义为你所用的晶振频率(单位Mhz) #definedelay_us(x)__delay_cycles((unsignedlong)(x*XTAL)) #definedelay_ms(x)__delay_cycles((unsignedlong)(x*XTAL*1000)) #definedelay_s(x)__delay_cycles((unsignedlong)(x*XTAL*1000000 )) #endif

LTE常见事件解释及定时器

1.1 4.5.1 切换正常流程 同频切换同时支持同eNodeB切换,同MME的异eNodeB切换,跨MME的异eNodeB切换场景。对于后两种场景依据eNodeB间是否建立X2接口,切换信令流程略有不同。 图4-2 同MME异eNodeB间切换流程 同MME异eNodeB间的同频切换信令流程如图4-2所示: 1.在无线承载建立时,源eNodeB下发RRC Connection Reconfiguration至UE,其中包含 source eNodeB 配置的Measurement Configuration消息,用于控制UE连接态的测量过程。

2.UE根据测量结果上报Measurement Report。 3.源eNodeB根据测量报告进行切换决策。 4.当源eNodeB决定切换后,源eNodeB发出HandoverRequest消息给目标eNodeB,通知 目标eNodeB准备切换。 5.目标eNodeB进行准入判断,若判断为资源准入,再由目标eNodeB依据EPS的QoS信息 执行准入控制。 6.目标eNodeB在L1/L2准备切换并对源eNodeB发送HANDOVER REQUEST ACKNOWLEDGE消息。 1.2 报告配置(A1至A5 B1至B2) 事件触发上报是3GPP 36.331协议中为切换测量与判决定义的一个概念。报告配置包含相应事件的相关参数。目前eNodeB应用以下事件触发相应动作: ●事件A1表示服务小区质量高于一定门限,当满足事件触发条件时UE便上报测量报告,eNodeB 停止异频/异系统测量。但在基于频率优先级的切换中,事件A1用于启动异频测量。 ●事件A2表示服务小区质量低于一定门限,当满足事件触发条件时UE便上报测量报告,eNodeB 启动异频/异系统测量。但在基于频率优先级的切换中,事件A2用于停止异频测量。 ●事件A3表示同频/异频邻区质量相比服务小区质量高出一定门限,当满足事件触发条件的小区信息被上报时,源eNodeB启动同频/异频切换请求。 ●事件A4表示异频邻区质量高于一定门限,满足事件触发条件的小区信息被上报时,源eNodeB 启动异频切换请求。 ●事件A5表示服务小区质量低于一定门限,同时异频邻区质量高于一定门限,满足事件触发条 件的小区信息被上报时,源eNodeB启动异频切换请求。 ●事件B1表示异系统邻区质量高于一定门限,满足事件触发条件的小区信息被上报时,源eNodeB启动异系统切换请求。 ●事件B2表示服务小区质量低于一定门限,同时异系统邻区质量高于一定门限,满足事件触发 条件的小区信息被上报时,源eNodeB启动异系统切换请求。 事件转周期上报 事件被触发并上报之后将转为周期上报满足该事件的测量信息,此方式称为事件转周期上报。UE的测量结果通过事件转周期的方式上报给eNodeB。周期上报将在事件取消条件满足或达到最大上报次数或UE收到切换命令后后取消。 事件转周期上报方式有如下作用: ●可有效防止因测量报告的遗失或内部处理流程的失败对切换造成影响。 ●对于准入拒绝,可以起到重试的作用。 ●测量报告中,邻区可能一次报不完。并且随着UE的移动,会上报不同的邻区,通过事件转周 期可以得到比较完整的测量结果。 1.3 事件A3的触发(LST INTRAFREQHOGROUP) 同频切换通过事件A3触发,且事件上报方式采用事件转周期的上报方式。 事件A3的触发,即邻区质量高于服务小区一定偏置值。参照3GPP协议36.331规定事件 A3的判决公式。 触发条件:Mn+Ofn+Ocn-Hys>Ms+Ofs+Ocs+Off

WinCC 中定时器使用方法介绍

1、定时器功能介绍 2、脚本中定时器介绍 3、使用脚本实现更多定时器功能 3.1 整点归档 3.2 WinCC 项目激活时避免脚本初次执行及延迟执行脚本1 定时器功能介绍 WinCC 中定时器的使用可以使 WinCC按照指定的周期或者时间点去执行任务,比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC 已经提供了一些简单的定时器,可以满足大部分定时功能。但是在有些情况下,WinCC 提供的定时器不能满足我们需求,这时我们就可以通过 WinCC 提供的脚本接口通过编程的方式实现定时的功能,因为脚本本身既可以直接调用 WinCC其他功能,比如报表打印,也可以通过中间变量来控制其他功能的执行,比如通过置位/复位归档控制变量来触发变量记录的执行。WinCC 提供了 C 脚本和 VBS 脚本,本文主要以全局 C 脚本编程为例介绍定时功能的实现。 2 脚本中定时器介绍既然在全局脚本中可以编程控制其他功能的执行,那么首先看看全局脚本的触发: 图1 脚本触发器分类如图1所示:脚本触发器分为使用定

时器和使用变量,定时器又分为周期执行和非周期执行一次,比如每分钟执行一次脚本属于周期执行,指定2012年10月1日执行一次属于非周期执行。使用变量触发脚本,即在变量发生变化时,脚本就执行一次,而变量的采集可以根据指定周期循环采集,或者根据变化采集,根据变化实际是1秒钟采集变量一次。 3使用脚本实现更多定时器功能 利用脚本自身的定时器,可以通过在脚本中编程的方式实现更多其它定时功能。 3.1整点归档 WinCC提供了变量归档,变量归档分为周期归档和非周期归档,不管是周期归档或非周期的归档,都又可以通过一些变量或脚本返回值来控制归档,比如:整点归档。下面的设置结合WinCC脚本,实现了在整点开始归档,归档五分种后停止归档,即每个小时仅归档前五分钟的数据。 软件环境:Windows 7 Professional Service Pack1 , WinCC V7.0 SP3 归档名称:ProcessValueArchive 归档变量:NewTag 归档周期:1 分钟 归档控制变量 startarchive C脚本触发周期:10秒 脚本代码: #include"apdefap.h" int gscAction( void ) { #pragma option(mbcs) #pragma code ("kernel32.dll");

51单片机定时器初值的计算

51单片机定时器初值的计算 一。10MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次机器周期。65536-10000=55536(d8f0) TH0=0xd8,TL0=0xf0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。 65536-9216=56320(dc00) TH0=0xdc,TL0=0x00 二。50MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次机器周期。65536-50000=15536(3cb0) TH0=0x3c,TL0=0xb0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。 65536-46080=19456(4c00) TH0=0x4c,TL0=0x00 三。使用说明 以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T 每次溢出 最多65536 个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串

口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。 51单片机12M和11.0592M晶振定时器初值计算 2011-01-04 22:25 at89s52,晶振频率12m 其程序如下: 引用代码:#include #include void timer0_init() { TMOD=0x01;//方式1 TL0=0xb0; TH0=0x3c; TR0=1; ET0=1; } void timer0_ISR(void) interrupt 1 { TL0=0xb0; TH0=0x3c;//50ms中断一次 single++; if(single==20) { kk++; single=0; } } void main() { int kk=0;//计数器 int single=0; timer0_init(); } TL0=0xb0; TH0=0x3c; 这两个是怎么算出来得

系列PLC中的定时器为接通延时定时器

系列PLC中的定时器为接通延时定时器,利用PLC中数种应用FX2N系列PLC定时器获得延时的编程技巧,了程序的可读性,同时改善了PLC系统的控制功能。lication Program ofries PLC Timeriu-ling of the PLC.The timer in FX2nof the PLC is a timer for theolling system.In this paper,the author introduced carefullyes,and described their working principles respectively.Thisand improve the control function of PLC system as well.章编号〕1674-3229(2010)06-0056-04常闭触点处于闭合状态,所以输出继电器Y0的线圈也得电;经过8s延时后,T0的常闭触点断开,输出继电器Y0的线圈失电。在整个程序中,输出信号Y0的输出时间受到了时间限制,这个时间可以通过改变定时器T0的设定值来改变,该程序属于限时控制程序,可将负载的工作时间限制在规定的时间内。 2.3接通、断开双延时程序所谓双延时是指定时器通电和断电都延时的控制程序,图3是双延时程序的梯形图和时序图。工作过程分析:当输入继电器X0的常开触点为ON时,定时器T0的线圈开始得电,T0开始计时,延时8s后,其常开触点接通,输出继电器Y0的线圈得电并保 2.3接通、断开双延时程序所谓双延时是指定时器通电和断电都延时的控制程序,图3是双延时程序的梯形图和时序图。工作过程分析:当输入继电器X0的常开触点为ON时,定时器T0的线圈开始得电,T0开始计时,延时8s后,其常开触点接通,输出继电器Y0的线圈得电并保持自锁,在接通过程中,输出信号Y0的输出比输入信号X0接通延后了8s。当输入继电器X0的常开触点断开

用定时器T0的模式1实现长时间定时

定时器T0的模式1实现长时间定时 使用定时器T0的中断来控制引脚LED的闪烁,要求闪烁周期2s,即亮1s,灭1s。本例采用的电路原理图如图6-2所示。 1.实现方法 定时器T0工作于方式1时,其最大可计脉冲数次数为65536,对于12MHz的时钟频率,一个脉冲的宽度为μs,则最大计时长度只有×65536=65536μs,即大约65ms。所以要计时1s或更长的时间,还需采用一种被称作“软件计数”的方法:设置一个变量Countor来储存定时器T0的中断次数,即每产生1次中断,使变量Countor自加1,如果T0每50ms中断1次,那么当Countor自加20次时,所计时间就是1s。 2.程序设计 先建立文件夹“CHANG”,然后建立“CHANG”工程项目,最后建立源程序文件“”。输入以下源程序: //实例46:用定时器T0模式1的实现长时间定时 #include<> // 包含51单片机寄存器定义的头文件 sbit D1=P2^0; //将D1位定义为引脚 unsigned char Countor ; //设置全局变量,储存定时器T0中断次数 /************************************************************** 函数功能:主函数 **************************************************************/ void main(void) { EA=1; //开总中断 ET0=1; //定时器T0中断允许

TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-50000)/256; //定时器T0的高8位赋初值 TL0=(65536-50000)%256; //定时器T0的低8位赋初值 TR0=1; //启动定时器T0 Countor=0; //从0开始累计中断次数 while(1) //无限循环,等待中断 ; } /************************************************************** 函数功能:定时器T0的中断服务程序 **************************************************************/ void Time0(void) interrupt 1 using 0 //“interrupt”声明函数为中断服务函数 { Countor++; //中断次数自加1 if(Countor= =20) //若累计满20次,即计时满1s { D1=~D1; //按位取反操作,将引脚输出电平取反 Countor=0; //将Countor清0,重新从0开始计数 } TH0=(65536-50000)/256; //定时器T0的低8位重新赋初值 TL0=(65536-50000)%256; //定时器T0的低8位重新赋初值 } 3.用Proteus软件仿真 经Keil软件编译通过后,可利用Proteus软件进行仿真。在Proteus ISIS 编辑环境中绘制好图6-2所示仿真电路图后,或打开配套光盘中的“仿真实例\第六章\ CHANG”文件夹内

定时器定时时间的计算(SystemCoreClock与OS_TICKS_PER_SEC的关系)

定时器定时时间的计算(SystemCoreClock与OS_TICKS_PER_SEC的关系) 定时器定时时间的计算 xcj 2015/06/03 09:23 假设定时器的时钟频率为f,f已知。那么定时器每计数一次所用时间为1/f。1/f代表了定时器的定时的时间精度(或最小计时单位)。 往计数器写的初值为Ticks,就是经过Ticks个周期后,定时器值变为0,定时时间到了。 如果我们要定时的时间为T,那么计算公式为: T = ticks * (1/f) (1) 整理后可得 ticks = f * T (2) 举个例子,假如定时器的时钟为SystemCoreClock,要定时1mS。 那么 ticks = SystemCoreClock * 1mS =SystemCoreClock * 1 * 10^(-3)=SystemCoreClock/1000 换个思路,如果已知定时器的时钟频率为f,要用定时器产生一个频率为f1的定时中断(T=1/f1)。根据公式(2)有 ticks = f /f1 (3) 上面的式子中 f1

555定时器组成的长延时电路图

555定时器组成的长延时电路图 一、延时电路工作原理 IC1 555 时基电路接成占空比可调的自激多谐振荡器。当按下按钮SB 后,12V 的直流电压加到电路中,由于电容器C6 的电压不能突变,使得IC2 电路的2 脚为低电平,IC2 电路处于置位状态,3 脚输出高电平,继电器K 得电,触点K-1、K-2 闭合,K-1 触点闭合后形成自锁状态,K-2 触点连接用电设备,达到控制用电设备通、断的作用。同时IC1 555 时基电路开始形成振荡,因此3 脚交替输出高、低电平。当3 脚输出高电平时,通过二极管VD3、电阻器R3 对电容器C3 充电。当3 脚输出低电平时,二极管VD3截止,C3 没有充电,因此只有在3 脚为高电平时才对C3 充电,所以电容器C3 的充电时间较长。当电容器C3 的电位升到2/3VDD 时,IC2 555 时基电路复位,3 脚输出低电平,继电器K 失电,触点K-1、K-2 断开,恢复到初始状态,为下次定时做好准备。

二、元器件的选择 IC1、IC2 选用NE555、μA555、SL555 等时基集成电路;VD1~VD4 选用IN4148 硅型开关二极管,发光二极管可选用一般的发光二极管;R1~R5 选用RTX—1/4W 型碳膜电阻器;电容器C1、C2、C5、C6 选用CT1 型瓷介电容器,C4 选用CD11—16V 电解电容器,C3 选用漏电流极小的钽电解电容器;RP 可用WSW 型有机实心微调可变电阻器;继电器K 选用JRX—13F 型具有两组转换触点的小型电磁继电器。 三、制作与调试方法 在调试中,可以调节可变电阻器RP 改变IC1 555 时基电

定时器产品使用说明书

定时器产品使用说明书 定时设置: 1、先检查时钟是否与当前时间一致,如需重新校准,在按住“时钟”键的同时,分别按住“星期”、“小时”、“分钟”键,将时钟调到当前准确时间。 2、按一下“设定”键,显示屏左下方出现“1开”字样(表示第一次开启的时间)。然后按“星期”调整本次设定的星期组合模式,再按“小时”、“分钟”键,输入所需开启的时间。 3、再按一下“设定”键,显示屏左下方出现“1关”字样(表示第一次关闭时间),再按“星期”、“小时”、“分钟”键,输入所需关闭的日期和时间。 4、继续按动“设定”键,显示屏左下方将依次显示“2开、2关、3开、3关……16开、16关”,参考步骤2、3设置以后各次开关时间。设置完成后,按一下“时钟”键返回。 5、如果每天不需设置16组开关,则必须按“清除”键,将多余各组消除,使其显示屏上显示“—:—”图样(不是00:00)。 6、按“模式”键,可以变换工作模式。总共有四种工作模式:A、液晶显示开(代表进入常开模式);B、液晶显示关(代表进入常关模式);C、由开进入自动(表示目前状态为开,等到下一组时间到后开始自动运行);D、由关进入自动(表示目前状态为关,等到下一组定时时间到后开始自动运行)。 当出现以下情况时: 1、定时器没有根据设定的程序开启或关闭,请检查设置程序是否正确或重新调整。 2、定时器长时间不用,显示模糊时,请将定时器接通电源充足,10分钟后无显示,按“复位”键,2-3秒。 3、如以上步骤均不能排除问题,请与公司或经销商联系维修。 注意事项: 1、对于那些因定时开关出错而可能发生的生命相关事故或者对社会产生重大影响的设备(如医疗设备等),请不要使用定时开关。 2、对于那些因定时开关出错而发生重大财产损失的设备(大型加热器或冷库),在使用本定时开关时,请务必是特性和性能的数值有足够的余量,并采取二重电路等安全对策。 3、请勿自行修理、分解或改造。 4、接通电源后请勿接触端子部分。本开关工作在无潮湿、腐蚀及高金属含量气体环境中。请勿沾染油或水。

ATMEGA16定时器的使用

ATMEGA16定时器的使用 [日期:2012-01-07 ] [来源:本站编辑作者:佚名] [字体:大中小] (投递新闻) /* 本程序简单的示范了如何使用ATMEGA16的定时器 AVR定时器的要点介绍 T0工作于CTC模式,输出1KHz/2KHz 50%占空比的方波 T1工作于快速PWM模式兼输入捕捉 T2工作于相位修正PWM模式,输出490Hz的8bit PWM波 出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器对于定时器,AVRstudio的软件仿真是不准确的。 */ #include #include #include //时钟定为8MHz,F_CPU=8000000 //管脚定义 #define ICPKEY 6 //ICP1 PD6 按键模拟ICP输入 #define PWM0 3 //OC0 PB3 #define PWM1A 5 //OC1A PD5 #define PWM1B 4 //OC1B PD4 #define PWM2 7 //OC2 PD7 //宏定义 #define PWM1A_ON() PORTD|= (1<

STM32定时时间的计算

STM32 定时器定时时间的计算 假设系统时钟是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到关键是设定时钟预分频数,自动重装载寄存器周期的值/*每1秒发生一次更新事件(进入中断服务程序)。RCC_Configuration()的SystemInit()的 RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。因此,每次进入中断服务程序间隔时间为: ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒。定时器的基本设置如下: 1、TIM_TimeBaseStructure.TIM_Prescaler = 7199;//时钟预分频数例如:时钟频率=72/(时钟预分频+1)。 2、TIM_TimeBaseStructure.TIM_Period = 9999; // 自动重装载寄存器周期的值(定时时间)累计 0xFFFF个频率后产生个更新或者中断(也是说定时时间到)。 3、TIM_TimeBaseStructure.TIM_CounterMode=TIM1_CounterMode_Up; //定时器模式向上计数。 4、 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值。 5、 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//初始化定时器2。 6、 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断溢出中断。 7、 TIM_Cmd(TIM2, ENABLE);//打开定时器或者: TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分频35999,72M/ (35999+1)/2=1Hz 1秒中断溢出一次。 8、 TIM_TimeBaseStructure.TIM_Period = 2000; //计数值2000 ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1秒。 9、注意使用不同定时器时,要注意对应的时钟频率。例如TIM2对应的是APB1,而TIM1对应的是APB2 通用定时器实现简单定时功能 以TIME3为例作为说明,简单定时器的配置如下: void TIM3_Config(void) { TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_DeInit(TIM3); //复位TIM2定时器 /* TIM2 clock enable [TIM2定时器允许]*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /* TIM2 configuration */ TIM_TimeBaseStructure.TIM_Period = 49; // 0.05s定时 TIM_TimeBaseStructure.TIM_Prescaler = 35999; // 分频36000 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数方向向上计数 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* Clear TIM2 update pending flag[清除TIM2溢出中断标志] */

STM32通用定时器

STM32通用定时器 一、定时器的基础知识 三种STM32定时器区别 通用定时器功能特点描述: STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括: 位于低速的APB1总线上(APB1) 16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为: ①输入捕获 ②输出比较 ③ PWM 生成(边缘或中间对齐模式) ④单脉冲模式输出 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。 如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器): ①更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ②触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ③输入捕获 ④输出比较 ⑤支持针对定位的增量(正交)编码器和霍尔传感器电路 ⑥触发输入作为外部时钟或者按周期的电流管理 STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。 定时器框图:

倍频得到),外部时钟引脚,可以通过查看数据手册。也可以是TIMx_CHn,此时主要是实现捕获功能; 框图中间的时基单元 框图下面左右两部分分别是捕获输入模式和比较输出模式的框图,两者用的是同一引脚,不能同时使用。

51单片机定时器初值的计算

51单片机定时器初值的计算一。10MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次机器周期。 65536-10000=55536(d8f0) TH0=0xd8,TL0=0xf0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。 65536-9216=56320(dc00) TH0=0xdc,TL0=0x00 二。50MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次机器周期。 65536-50000=15536(3cb0) TH0=0x3c,TL0=0xb0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。 65536-46080=19456(4c00)

TH0=0x4c,TL0=0x00 三。使用说明 以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T 每次溢出 最多65536 个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。 开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。 对12MHz 1个机器周期1us 12/fosc = 1us 方式0 13位定时器最大时间间隔 = 2^13 = 8.192ms 方式1 16位定时器最大时间间隔 = 2^16 = 65.536ms 方式2 8位定时器最大时间间隔 = 2^8 = 0.256ms =256 us 定时5ms,计算计时器初值 M = 2^K-X*Fosc/12 12MHz 方式0: K=13,X=5ms,Fosc=12MHz 则M = 2^13 - 5*10^(-3)*12*10^6/12= 3192 = 0x0C78 THx = 0CH,TLx = 78H, 方式1: K=16,X=5ms,Fosc=12MHz 则M = 2^16 - 5*10^(-3)*12*10^6/12= 60536 = 0xEC78 THx = ECH,TLx = 78H,

定时器-计数器

定时器 / 计数器 一、实验目的 ⒈学会8253芯片和微机接口的原理和方法。 ⒉. 掌握8253定时器/计数器的工作方式和编程原理。 二、实验内容 利用8253进行二次分频,控制LED灯亮10秒,灭10秒。 三、实验程序清单(在H8253.ASM的基础上修改) CODE SEGMENT ;H8253.ASM ASSUME CS: CODE ORG 1290H START: JMP TCONT TCONTRO EQU 0043H TCON0 EQU 0040H TCON1 EQU 0041H TCONT: MOV DX,TCONTRO MOV AL,36H ;0号通道控制字需要修改 OUT DX,AL MOV DX,TCON0 ;计数初值要按计算出的值来写 MOV AL,00H OUT DX,AL MOV AL,04H OUT DX,AL MOV DX,TCONTRO MOV AL,36H ;1号通道控制字需要修改 OUT DX,AL MOV DX,TCON1 MOV AL,00H ;计数初值要按计算出的值来写 OUT DX,AL MOV AL,02H OUT DX,AL JMP $ CODE ENDS END START

四、实验步骤 ⒈8253的GATE0、GATE1接+5V,OUT0接CLK1,CLK1接LED灯(L1)。 8253的CLK0插孔接分频器74LS393(左下方)的T2插孔,分频器的频 率源为8.0MHZ,T→8.0MHZ。 ⒉运行实验程序 在系统提示符“P.”状态下,联机运行程序 3. 观察实验现象,修改程序中的计数初始值,观察结果。

定时器T的用法

第九讲定时器T2的用法 定时器 声明,定时器T2只有52以上的芯片才有,51没有的。

捕捉模式 在捕捉模式时,两种操作模式由T2CON中的EXEN2位选择。如果EXEN2=0,Timer2作为一个16位向上定时或计数器,当溢出时将T2CON中的TF2置1。这个标志位可以产生一个中断。如果EXEN2=1,Timer2起同样的作用,但是,外部输入端T2EX上的下降延也可以使TH2和TL2中的值捕捉到RCAP2H和RCAP2L中,另外,T2EX上的下降延可以将EXF2置1,像TF2一样,也可以产生一个中断。捕捉模式详见图5。 自动重载模式

Timer2在指定为16为自动重载模式时可以编程为加计数或减计数,此功能由T2MOD 中的DCEN位决定。DCEN=0,计数器向上计数,默认置为0,DCEN=1时,Timer2的加或减由T2EX的值决定。 图6显示Timer2在DCEN=0时自动向上计数。在这个模式时,T2CON的EXEN2为可以选择两种操作。EXEN2=0,Timer2向上计数到0FFFFH时将TF2为置1,溢出可以把RCAP2H和RCAP2L 中的16为值重新加载到定时寄存器中。捕捉模式时RCAP2H和RCAP2L中的值由软件预先设定。EXEN2=1,既可以由溢出重载也可以由T2EX引脚的下降延触发重载。TF2和EXF2都可以产生中断。设置DCEN为可以时Timer2向上或向下计数,如图6所示,此模式下,T2EX 脚控制计数方向。T2EX如果为1,Timer2向上计数。计数器到0FFFFH时溢出并将TF2置1。溢出可以使RCAP2H和RCAP2L中的16为值重新加载到定时寄存器中。T2EX如果为0,Timer2向下计数,当TH2和TL2中的值和RCAP2H和RCAP2L相等时向下溢出。溢出使TF2置1并 将0FFFFH重新加载到计时寄存器中。

关于定时器初值的设定

深入理解需要精通定时器溢出原理: 晶振时钟12分频后得到机器时钟,定时器启动后会按机器时钟进位,16bit模式,定时器溢出频率就是机器时钟除以定时器多余“空间”, 例如定时器初值是0xffff,则每1个机器时钟都会溢出,产生中断 例如定时器初值是0xfffe,则每2个机器时钟会溢出 …… 例如定时器初值是【65535(0xffff)-999】,则每1000个机器时钟会溢出,或 例如定时器初值是【65536-1000】,则每1000个机器时钟会溢出 …… 依次类推 实例 例如:设T0工作方式1定时,定时时间为2ms,在P1.0引脚上输出周期为4ms的方波,设单片机的晶振频率为12MHz。 解:要在P1.0输出周期为4ms的方波,即要使P1.0每隔2ms取反1次。 T0方式1定时,则T0的方式字为:TMOD=01H 计算2ms定时T0的初值: 12M晶振,机器周期为1M,2ms就是X个机器周期 X=T(2ms)/T0(1s/(12M/12))=0.002/1/1000000=2000 定时器初值就是65536-X=65536-2000=63536=F830H 其中将高8位F8H赋给TH0,低8位30H赋给TL0。 采用查询方法,编程如下: 1. https://www.wendangku.net/doc/045158474.html, 0000H 3.AJMP MAIN 4. https://www.wendangku.net/doc/045158474.html,O 0100H 6.MAIN: MOV TMOD,#01H 7.MOV TL0,#30H 8.MOV TH0,0F8H 9.SETB TR0 10.LOOP: JBC TF0,NEXT 11.SJMP LOOP 12.NEXT: MOV TL0,#30H 13.MOV TH0,#0F8H 14.CPL P1.0 15.SJMP LOOP 复制代码 采用中断的方法,编程如下: https://www.wendangku.net/doc/045158474.html, 0000H 2.AJMP MAIN

相关文档