当前位置:文档之家› java定时器

java定时器

java定时器
java定时器

util包中的定时器学习相对比较简单,学习java定时器主要要熟悉两个类,Timer类和TimerTask类。

定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后执行。定时器任务类TimerTask 是抽象类,继承并重写其run()方法,可实现具体任务。

schedule(TimerTask task, Date time)设定指定任务task在指定时间time执行。

cancel()方法结束这个定时器。

schedule(TimerTask task, long delay, long period)方法设定指定任务task在指定延迟delay后进行固定延迟peroid的执行。

scheduleAtFixedRate(TimerTask task, long delay, long period)方法设定指定任务task在指定延迟delay后进行固定频率peroid的执行。

要实现一个定时任务,运用java中的Timer和TimerTask类可以非常容易实现实时调用处理函数。这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需要。

package com.csdn.heima;

import java.io.IOException;

import java.util.Scanner;

import java.util.Timer;

public class TimerTest {

public static void main(String[] args){

Timer timer = new Timer();

timer.schedule(new MyTask(), 1000, 3000);//在1秒后执行此任务,以后每隔1秒执行这个MyTask任务.

while(true){

Scanner scan = new Scanner(System.in);

String str = scan.nextLine();

if(str.equals("ok")){

timer.cancel();// 终止此计时器,丢弃所有当前已安排的任务。

}

}

}

static class MyTask extends java.util.TimerTask{

public void run() {

System.out.println("------itcast-----------间隔3秒打印一次!----------csdn-------------");

}

}

}

JA V A WEB定时器,定时器的启动一般随web server的启动而启动,一般有两种方法.

方法一:在web.xml里配置一个Servlet,继承HttpServlet,并设置其随web server的启动而启动。然后在该Servlet的init()方法里启动定时器,在destory()方法里销毁定时器。

方法二:在web.xml里配置一个Listener,继承ServletContextListener,然后在该Listener的初始化方法里启动定时器,在其销毁的方法朝左销毁定时器。

在servlet中启动定时器

一,继承HttpServlet的写法:

1,Servlet

1importjava.io.IOException;

2importjava.util.Timer;

3importjavax.servlet.RequestDispatcher;

4importjavax.servlet.ServletContext;

5importjavax.servlet.ServletException;

6importjavax.servlet.http.HttpServlet;

7importjavax.servlet.http.HttpServletRequest;

8importjavax.servlet.http.HttpServletResponse;

9

10

11publicclassConvergeDataServlet extends HttpServlet {

12

13private static final long serialVersionUID = 1L;

14

15private Timer timer1 = null;

16

17private Task task1;

18

19/**

20* Constructor of the object.

21*/

22public ConvergeDataServlet() {

23super();

24}

25

26/**

27* Destruction of the servlet.

28*/

29public void destroy() {

30super.destroy();

31if(timer1!=null){

32timer1.cancel();

33}

34}

35

36

37public void doGet(HttpServletRequest request, HttpServletResponse response) 38throws ServletException, IOException {

39

40}

41

42

43public void doPost(HttpServletRequest request, HttpServletResponse response) 44throws ServletException, IOException {

45doGet(request, response);

46}

47

48// init方法启动定时器

49public void init() throws ServletException {

50

51ServletContext context = getServletContext();

52

53// (true为用定时间刷新缓存)

54String startTask = getInitParameter("startTask");

55

56// 定时刷新时间(分钟)

57Long delay = Long.parseLong(getInitParameter("delay"));

58

59// 启动定时器

60if(startTask.equals("true")){

61timer1 = new Timer(true);

62task1 = new Task(context);

63timer1.schedule(task1, delay * 60 * 1000, delay * 60 * 1000);

64}

65}

66}

2,任务

67import java.util.TimerTask;

68

69import javax.servlet.ServletContext;

70

71public class Task extends TimerTask{

72

73private ServletContext context;

74

75private static boolean isRunning = true;

76

77public Task(ServletContext context){

78this.context = context;

79}

80

81

82@Override

83public void run() {

84if(isRunning){

85

86}

87}

88

89}

3,web.xml中的配置

< servlet >

< servlet-name >taskservlet< / servlet-name >

< servlet-class >com.task< /servlet-class >

< init-param >

< param-name >startTask< /param-name >

< param-value >true< /param-value >

< /init-param >

< init-param >

< param-name >intervalTime< /param-name >

< param-value >1< /param-value >

< /init-param >

< load-on-startup >300< /load-on-startup >

< /servlet >

二,继承ServletContextListener

1,定时器

/**

*

*/

package com.annlee.website.util;

import java.util.Timer;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

/**

* @author Administrator 定时器

*/

public class TimerListener implements ServletContextListener {

private Timer timer;

private AnnleeTimerTask task;

public void contextDestroyed(ServletContextEvent arg0) {

timer.cancel();

System.out.println("定时器已销毁");

}

public void contextInitialized(ServletContextEvent event) {

timer = new java.util.Timer(true);

task = new AnnleeTimerTask(event.getServletContext());

System.out.println("定时器已启动");

timer.schedule(task, 0, 60 * 1000);

System.out.println("已经添加任务调度表");

}

}

2,任务

package com.annlee.website.util;

import java.util.Calendar;

import java.util.TimerTask;

import javax.servlet.ServletContext;

import https://www.doczj.com/doc/6f9674767.html,mAccessDataService;

/**

* 定时器的任务

*/

public class AnnleeTimerTask extends TimerTask {

private ServletContext context;

private static boolean isRunning = false;

private static boolean flag = true;

private static final int C_SCHEDULE_HOUR = 0;

private UsmAccessDataService accessDataService;

public AnnleeTimerTask(ServletContext context){

this.context = context;

}

public void run() {

accessDataService = new UsmAccessDataService();

Calendar cal = Calendar.getInstance();

if (!isRunning) {

if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY) && flag) { isRunning = true;

// accessDataService.SendHttpByMonth(0,0, 0);

System.out.println("正在执行任务");

isRunning = false;

flag = false;

context.log("指定任务执行结束");

}

} else {

context.log("上一次任务执行还未结束");

}

if(C_SCHEDULE_HOUR != cal.get(Calendar.HOUR_OF_DAY)){

flag = true;

}

}

}

3,web.xml中的配置

com.annlee.website.util.TimerListener

====================================================================== =其实我想实现的就是在每天23:59:59 这个时间调用1次方法就结束每天如此希望高手指点

我来帮他解答

2011-8-19 16:58

满意回答

import java.util.GregorianCalendar;

import java.util.Timer;

import java.util.TimerT ask;

/**

*

* @author Administrator

*/

public class TimerDemo {

public static void main(String[] args) {

/** 对象句柄*/

final TimerDemo td = new TimerDemo();

// Java的计时器,可以规定从某一个时刻起,以后每对少时间循环执行一次

new Timer().schedule(new TimerTask() {

@Override

public void run() {

td.print();

}

}, new GregorianCalendar(2011, 8, 19, 23, 59, 59).getTime(),

24 * 60 * 60 * 1000);

}

/**

* 要调用的函数

*/

private void print() {

System.out.println("Test");

}

}

====================================================================== =========下面是我写的程序,就是用2个定时器中断T0和T1每隔一秒钟1S钟让数码管的数字减1,同时流水灯流一下。 我虽然写出来了,但是搞不明白,这两个中断同时是1S 钟产生的,不是中断有优先级的吗?怎么这个程序的数码管和流水灯都是1S钟换一个值呢? 我的想法是T0的优先级高于T1的,当道了1S的时候,T0首先流水灯流一下,但是流过之后,就不是1S了,T1中断应该就没了吧,数码管也就不减1了。 搞不明白啊 #include #include unsigned long int o; unsigned int s,d; unsigned char code duan[]={0xC0 ,0xF9 ,0xA4 ,0xB0 ,0x99 ,0x92 ,0x82 ,0xF8, 0x80 ,0x90}; //数码管显示显示0-9的值表 void init () //一些变量和中断T0T1的初始化 { s=0;d=0; P1=0xfe; //P1口是LED流水灯口,让他只亮一个灯,等下T0中断有程序可以让他循环亮 o=20000000; //P0口是数码管的段选,o的值是数码管显示的值 TMOD=0x11; //以下都是定时器T0T1的初始化 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65535-50000)/256; TL1=(65535-50000)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; } void delay(unsigned int j)//延时程序,数码管扫描时延时的,我试了不用这个延时数码管也可以正常显示 { int m; for(m=0;m

//这个显示的是千万位,o/10000000结果就是千万位的数字了 P2= 0x7F; //数码管位选,只把千万位的数码管打开,其他位的关 delay (100); //延时 P0=duan[o/1000000%10]; // 百万位以下同上 P2=0xBF; delay (100); P0=duan[o/100000%10]; //十万位 P2=0xDF; delay (100); P0=duan[o/10000%10]; //万位 P2=0xEF; delay (100); P0= duan[o/1000%10]; //千位 P2=0xF7; delay (100); P0=duan[o/100%10]; //百位 P2=0xFB; delay (100); P0=duan[o/10%10]; //十位 P2=0xFD; delay (100); P0=duan[o%10]; //个位 P2=0xFE; delay (100); } } void main () //主函数 { init (); //调用初始化 xianshi(); //显示数字,如果定时器中断产生就去执行中断程序 } time0() interrupt 1 //定时器中断T0 1S钟流水灯流一下 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; d++; //中断产生20次,一次50MS,所以20次就是1S if (d==20) //如果20次到了 { d=0; //从新开始20次下同 P1=_crol_(P1,1); //流水灯函数,是调用intrins.h里的 } } time1() interrupt 3 //定时器中断T1 1S钟数码管数值减1 { TH1=(65535-50000)/256; TL1=(65535-50000)%256; s++; if (s==20) { s=0; o--; //每过1S钟数码管数值减1 if (o==0) //判断0是否减到了0,减到了就从新从20000000开始 o=20000000; } }

我不看源代码我就知道你怎么回事?

定时中断当发生中断后中断标志位置1 记住置1后并不会自动清0

有2种情况会清0 一种是手动写程序清0 另外一种就是相应中断函数后清0

虽然有优先级并且同时发生中断高优先级的中断执行后低优先级中断标志未清0 还是会相应中断函数的就会出现你说的情况除非你在高优先级中断里清0低中断的标志位这样才会在同时发生中断时只相应高优先级中断不响应低优先级中断

今天我们讲一下JA VA计时器的做法,很简单,网络上已经有不计其数。还是贴了出来!

java 定时器可以用作,定时刷新缓存等。。。。。。。。。。。

timer.schedule(task, firstTime, period);

task参数是,TimerTask 类,在包:import java.util.TimerTask .使用者要继承该类,并实现public void run() 方法,因为TimerTask 类实现了Runnable 接口。

firstTime参数是,当你调用该方法后,该方法必然会调用TimerTask 类TimerTask 类中的run() 方法,这个参数就是这两者之间的差值,转换成汉语的意思就是说,用户调用schedule() 方法后,要等待这么长的时间才可以第一次执行run() 方法。

period参数是,第一次调用之后,从第二次开始每隔多长的时间调用一次run() 方法。

schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。import java.util.Timer;

import java.util.TimerTask;

public class TestTimer {

static Timer timer = null;

public static void main(String[] args) {

timer = new Timer();

System.out.println("-----------定时间器已经启动。。。。。。");

timer.schedule(new TimerTask() {

@Override

public void run() {

System.out.println("运行我了哦!!!");

}

}, 0, 5*1000);

}

}

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class TestTimer {

public static void main(String[] args) {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

try {

Date datetime = sdf .parse("2007/07/31 23:59:00");

timer = new Timer();

System.out.println("-----------定时间器已经启动。。。。。。");

timer.scheduleAtFixedRate(new TimerTask() {

@Override

public void run() {

System.out.println("scheduleAtFixedRate -----test");

}

}, datetime , 5*1000);

} catch (ParseException e) {

e.printStackTrace();

}

}

2011-11-03 11:15

java定时器实现

1.普通java应用程序实现定时任务功能:

package com.mytimer;

import java.io.IOException;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Timer;

public class TimerTest

{

public static void main(String[] args)

{

Timer timer = new Timer();

DateFormat format= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

Date date = null;

try{

date = format.parse("2011-11-3 10:23:00");

}catch(Exception e){

}

// timer.schedule(new MyTask(), 1000, 2000);// 在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.

timer.schedule(new MyTask(), date, 2000);

// 这个是用来停止此任务的,否则就一直循环执行此任务了

while (true)

{

try

{

int ch = System.in.read();

if (ch - 'c' == 0)

{

timer.cancel();// 使用这个方法退出任务

}

} catch (IOException e)

{

e.printStackTrace();

}

}

}

static class MyTask extends java.util.TimerTask

{

public void run()

{

System.out.println("____ok____");

}

}

}

2.web项目中应用定时器(tomcat启动时加载定时器)

(1)在web.xml文件中加入以下代码:

TimeServlet

com.mytimer.TimeServlet

11

TimeServlet

/servlet/TimeServlet

(2)实现定时servlet:

package com.mytimer;

import java.io.IOException;

import java.util.Timer;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class TimeServlet extends HttpServlet

{

private static final long serialVersionUID = 1L;

public TimeServlet()

{

super();

}

public void init() throws ServletException

{

Timer timer = new Timer();

timer.schedule(new MyTask(), 120000, 60000);// 在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.

// // 这个是用来停止此任务的,否则就一直循环执行此任务了

// while (true)

// {

// try

// {

// int ch = System.in.read(); //输入字符“c”,回车即停止执行// if (ch - 'c' == 0)

// {

// timer.cancel();// 使用这个方法退出任务

// }

//

// } catch (IOException e)

// {

// e.printStackTrace();

// }

// }

}

//具体执行的任务

class MyTask extends java.util.TimerTask

{

public void run()

{

System.out.println("____ok____");

}

}

public void destroy()

{

super.destroy();

}

}

c++定时器

定时器 今天我们来讨论下c++中的定时器(SetTimer)一些基础的知识和用法: 你可以通过呼叫SetTimer函数为您的Windows程序分配一个定时器。SetTimer有一个时间间隔范围为1毫秒到4,294,967,295毫秒(将近50天)的整数 型态参数,这个值指示Windows每隔多久时间给您的程序发送WM_TIMER消息。例如,如果间隔为1000毫秒,那么Windows将每秒给程序发送一 个WM_TIMER消息。 当您的程序用完定时器时,它呼叫KillTimer函数来停止定时器消息。在处理WM_TIMER 消息时,您可以通过呼叫KillTimer函数来编写一个「限用 一次」的定时器。KillTimer呼叫清除消息队列中尚未被处理的WM_TIMER消息,从而使程序在呼叫KillTimer之后就不会再接收到WM_TIMER消 息。 系统和定时器 Windows定时器是PC硬件和ROM BIOS架构下之定时器一种相对简单的扩充。回到Windows 以前的MS-DOS程序写作环境下,应用程序能够通过拦 截者称为timer tick的BIOS中断来实作时钟或定时器。一些为MS-DOS编写的程序自己拦截这个硬件中断以实作时钟和定时器。这些中断每54.915毫 秒产生一次,或者大约每秒18.2次。这是原始的IBM PC的微处理器时脉值4.772720 MHz 被218所除而得出的结果。 Windows应用程序不拦截BIOS中断,相反地,Windows本身处理硬件中断,这样应用程序就不必进行处理。对于目前拥有定时器的每个程 序,Windows储存一个每次硬件timer tick减少的计数。当这个计数减到0时,Windows在应用程序消息队列中放置一个WM_TIMER消息,并将计数 重置为其最初值。 因为Windows应用程序从正常的消息队列中取得WM_TIMER消息,所以您的程序在进行其它处理时不必担心WM_TIMER消息会意外中断了程序。 在这方面,定时器类似于键盘和鼠标。驱动程序处理异步硬件中断事件,Windows把这些事件翻译为规律、结构化和顺序化的消息。 在Windows 98中,定时器与其下的PC定时器一样具有55毫秒的分辨率。在Microsoft Windows NT中,定时器的分辨率为10毫秒。 Windows应用程序不能以高于这些分辨率的频率(在Windows 98下,每秒18.2次,在Windows NT下,每秒大约100次)接收WM_TIMER消息。 在SetTimer呼叫中指定的时间间隔总是截尾后tick数的整数倍。例如,1000毫秒的间隔除以54.925毫秒,得到18.207个tick,截尾后是18个tick,它实 际上是989毫秒。对每个小于55毫秒的间隔,每个tick都会产生一个WM_TIMER消息。

555定时器的基本应用及使用方法

555定时器的基本应用及使用方法 我们知道,555电路在应用和工作方式上一般可归纳为3类。每类工作方式又有很多个不同的电路。在实际应用中,除了单一品种的电路外,还可组合出很多不同电路,如:多个单稳、多个双稳、单稳和无稳,双稳和无稳的组合等。这样一来,电路变的更加复杂。为了便于我们分析和识别电路,更好的理解555电路,这里我们这里按555电路的结构特点进行分类和归纳,把555电路分为3大类、8种、共18个单元电路。每个电路除画出它的标准图型,指出他们的结构特点或识别方法外,还给出了计算公式和他们的用途。方便大家识别、分析555电路。下面将分别 介绍这3类电路。 单稳类电路 单稳工作方式,它可分为3种。见图示。 第1种(图1)是人工启动单稳,又因为定时电阻定时电容位置不同而分为2个不同的单元,并分别以1.1.1 和1.1.2为代号。他们的输入端的形式,也就是电路的结构特点是: “RT-6.2-CT”和“CT-6.2-RT”。

第2种(图2)是脉冲启动型单稳,也可以分为2个不同的单元。他们的输入特点都是“RT-7.6-CT”,都是从2端输入。1.2.1电路的2端不带任何元件,具有最简单的形式;1.2.2电路则带 有一个RC微分电路。 第3种(图3)是压控振荡器。单稳型压控振荡器电路有很多,都比较复杂。为简单起见,我们只把它分为2个不同单元。不带任何辅助器件的电路为1.3.1;使用晶体管、运放放大器等辅助器件的电路为1.3.2。图中列出了2个常用电路。

双稳类电路 这里我们将对555双稳电路工作方式进行总结、归纳。 555双稳电路可分成2种。 第一种(见图1)是触发电路,有双端输入(2.1.1)和单端输入(2.1.2)2个单元。单端比较器(2.1.2)可以是6端固定,2段输入;也可是2端固定,6端输入。 第2种(见图2)是施密特触发电路,有最简单形式的(2.2.1)和输入端电阻调整偏置或在控制端(5)加控制电压VCT以改变阀值电压的(2.2.2)共2个单元电路。

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

触摸定时开关

555触摸定时开关 集成电路IC1是一片555定时电路,在这里接成单稳态电路。平时由于触摸片P端无感应电压,电容C1通过555第7脚放电完毕,第3脚输出为低电平,继电器KS释放,电灯不亮。 当需要开灯时,用手触碰一下金属片P,人体感应的杂波信号电压由C2加至555的触发端,使555的输出由低变成高电平,继电器KS吸合,电灯点亮。同时,555第7脚部截止,电源便通过R1给C1充电,这就是定时的开始。 当电容C1上电压上升至电源电压的2/3时,555第7 脚道通使C1放电,使第3脚输出由高电平变回到低电平,继电器释放,电灯熄灭,定时结束。 定时长短由R1、C1决定:T1=1.1R1*C1。按图中所标数值,定时时间约为4分钟。D1可选用1N4148或1N4001。 相片曝光定时器 附图电路是用555单稳电路制成的相片曝光定时器。用人工启动式单稳电路。

工作原理: 电源接通后,定时器进入稳态。此时定时电容CT的电压为:VCT=VCC=6V。对555这个等效触发器来讲,两个输入都是高电平,即VS=0。继电器KA不吸合,常开点是打开的,曝光照明灯HL不亮。 按一下按钮开关SB之后,定时电容CT立即放到电压为零。于是此时555电路等效触发的输入成为:R=0、S=0,它的输出就成高电平:V0=1。继电器 KA吸动,常开接点闭合,曝光照明灯点亮。按钮开关按一下后立即放开,于是电源电压就通过R T向电容CT充电,暂稳态开始。当电容CT上的电压升到 2/3VC C既4伏时,定时时间已到,555等效电路触发器的输入为:R= 1、S=1,于是输出又翻转成低电平:V0=0。继电器KA释放,曝光灯HL熄灭。暂稳态结束,有恢复到稳态。 曝光时间计算公式为:T=1.1RT*CT。本电路提供参数的延时时间约为1秒~2分钟,可由电位器RP调整和设置。 电路中的继电器必需选用吸合电流不应大于30mA的产品,并应根据负载(HL)的容量大小选择继电器触点容量。

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; 这两个是怎么算出来得

定时器计数器答案

定时器/计数器 6·1 80C51单片机内部有几个定时器/计数器?它们是由哪些专用寄存器组成? 答:80C51单片机内部设有两个16位的可编程定时器/计数器,简称为定时器0(T0)和定时 器l(Tl)。在定时器/计数器中的两个16位的计数器是由两个8位专用寄存器TH0、TL0,THl、TLl组成。 6·2 80C51单片机的定时器/计数器有哪几种工作方式?各有什么特点? 答:80C51单片机的定时器/计数器有4种工作方式。下面介绍4种工作方式的特点。 方式0是一个13位的定时器/计数器。当TL0的低5位溢出时向TH0进位,而TH0溢出时向中断标志TF0进位(称硬件置位TF0),并申请中断。定时器0计数溢出与否,可通过查询TF0是否置位或产生定时器0中断。 在方式1中,定时器/计数器的结构与操作几乎与方式0完全相同,惟一的差别是:定时器是以全16位二进制数参与操作。 方式2是能重置初值的8位定时器/计数器。其具有自动恢复初值(初值自动再装人)功;能,非常适合用做较精确的定时脉冲信号发生器。 方式3 只适用于定时器T0。定时器T0在方式3T被拆成两个独立的8位计数器TL0: 和TH0。其中TL0用原T0的控制位、引脚和中断源,即:C/T、GATE、TR0、TF0和T0 (P3.4)引脚、INTO(P3.2)引脚。除了仅用8位寄存器TL0外,其功能和操作与方式0、方式1 完全相同,可定时亦可计数。此时TH0只可用做简单的内部定时功能。它占用原定时器Tl 的控制位TRl和TFl,同时占用Tl的中断源,其启动和关闭仅受TRl置1和清0控制。6·3 定时器/计数器用做定时方式时,其定时时间与哪些因素有关?作计数时,对外界计数频率有何限制? 答: 定时器/计数器用做定时方式时,其定时时间与时钟周期、计数器的长度(如8位、13位、16位等)、定时初值等因素有关。作计数时,外部事件的最高计数频率为振荡频率(即时钟周期)的1/24。 6·4 当定时器T0用做方式3时,由于TR1位已被T0占用,如何控制定时器T1的开启和关闭? 答:定时器T0用做方式3时,由于TRl位己被T0占用,此时通过控制位C/T切换其定时器或计数器工作方式。当设置好工作方式时,定时器1自动开始运行;若要停止操作,只需送入一个设置定时器1为方式3的方式字。

555定时器的应用

上饶师范学院 毕业论文(设计) 题目:555定时器的应用 学生姓名: 学号: 学院: 专业: 班级: 指导老师:

摘要:555定时器是一种多用途的数字--模拟混合型集成电路,通过对555定时器的电路结构与工作原理的充分了解,利用它能够方便地构成施密特触发器、单稳态触发器和多谐振荡器,555应用电路采用这三种方式中的一种或多种组合可以构成各种实用的电子电路,比如相片曝光定时器、电热毯温控器、多用途延迟开光电源插座、555触摸开关、风扇周波调速电路等。因为555定时器在使用上非常灵活、方便,所以555定时器在生活中的诸多领域都具有广泛的应用。 关键词:555定时器;单稳态触发器;多谐振荡器 Abstract:The 555 timer is a multipurpose digital analog hybrid integrated circuit, through the full understanding of circuit structure and working principle of the 555 timer.It is easily to construct Schmidt flip-flop, monostable trigger and multi harmonic oscillator. 555 application circuit using one or more combinations of these three methods may constitute a variety of practical electronic circuit, such as photo exposure timer, electric blanket thermostat, multi-purpose delay switch socket, 555 touch switch, fan frequency speed control circuit. Because the 555 timer can be used flexiblely and conveniently, so the 555 timer are widely used at Many fields of life. Key words:555 timer; single steady state trigger; multi harmonic oscillator

单片机定时器详解

一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是,所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令/秒=1000000次/1000000微秒=1次/微秒=1条指令/微秒;也就是说,晶振振荡一次,就会给单片机提供一个时钟脉冲,花费的时间是1微秒,此时,CPU会执行一条指令,经历一个机器周期;即:1个时钟脉冲=1个机器周期=1微秒=1条指令; 注:个人PC机上的CPU主频是晶振经过倍频之后的频率,这一点恰好与MCS-51单片机的相反,MCS-51单片机的主频是晶振经过分频之后的频率; 总之:MCS-51单片机中的时间概念就是通过计数脉冲的个数来测量出来的;1个脉冲=1微秒=1条指令=1个机器周期; MCS-51单片机定时器/计数器的简单结构图: 8051系列单片机有两个定时器:T0和T1,分别称为定时器和定时器T1,这两个定时器都是16位的定时器/计数器;8052系列单片机增加了第三个定时器/计数器T2;它们都有定时或事件计数功能,常用于时间控制、延时、对外部时间计数和检测等场合; 二、定时器/计数器的结构

定时器定时时间的计算(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

智能曝光箱的详细设计

淄博市技师学院单片机课题研究报告 题目:智能曝光箱 专业:电气工程系 届别:10技师 姓名:罗成 导师:孙磊

引言: 一直以来制作电线路板多采用万用板。但是伴随着学习的深化,万用板的许多弊端逐渐暴露出来。在做线路板时特别是比较复杂的线路,万用板的连线问题和初始化设计问题不够规范化,特别容易造成错焊漏焊。 伴随着电子行业的飞速发展,对作为电子元件为基础的印制电路板的需求量以及制作精度的要求越来越高。而紫外线曝光机是印版制作工艺中的重要设备,在实验的基础上设置了双玻璃架晾晒智能曝光机。 针对这个问题我们设计了一个可以感光智能曝光制作双面印刷电路板的仪器:智能曝光相 利用物理光学原理使用紫外线照射技术,在相对封闭的环境中对感光线路板进行曝光。将事先设计好的线路固化到线路板上。 目的: 根据目前印制电路板在制作上种种困难,设计一种可自行紫外线曝光的制板装置。 要求: 1,开关实现紫光/日光与全紫光/下紫光的良好切换 2,矩阵键盘输入数据,确认进行倒计时,四位共阳数码管实时显示数据的变化情况。 3,指示灯显示电源与完成倒计时的状态,并有自动切断电源装置等智能系统。 4,整个制作过程精确方便,易于初学者学习使用。 方法: 采用89S51作为该系统的微控芯片,实现该系统 数据输入,数据显示以及其他附加功能。 充分利用信息电子技术设计线路板的硬件结构。 关键词:智能曝光箱紫外线曝光89S51

系统介绍: 操作面板: 在上图中右红色开关实现紫光/日光的切换,左红色开关实现全紫光与下紫光的切换。 4*4矩阵键盘实现数据的输入,*是(重新)输入键,#是确认键。 四位共阳数码管显示时间的倒计时。 线路板 原理图

05_STM32F4通用定时器详细讲解

STM32F4系列共有14个定时器,功能很强大。14个定时器分别为: 2个高级定时器:Timer1和Timer8 10个通用定时器:Timer2~timer5 和 timer9~timer14 2个基本定时器: timer6和timer7 本篇欲以通用定时器timer3为例,详细介绍定时器的各个方面,并对其PWM 功能做彻底的探讨。 Timer3是一个16位的定时器,有四个独立通道,分别对应着PA6 PA7 PB0 PB1 主要功能是:1输入捕获——测量脉冲长度。 2 输出波形——PWM 输出和单脉冲输出。 Timer3有4个时钟源: 1:内部时钟(CK_INT ),来自RCC 的TIMxCLK 2:外部时钟模式1:外部输入TI1FP1与TI2FP2 3:外部时钟模式2:外部触发输入TIMx_ETR ,仅适用于TIM2、TIM3、TIM4,TIM3,对应 着PD2引脚 4:内部触发输入:一个定时器触发另一个定时器。 时钟源可以通过TIMx_SMCR 相关位进行设置。这里我们使用内部时钟。 定时器挂在高速外设时钟APB1或低速外设时钟APB2上,时钟不超过内部高速时钟HCLK ,故当APBx_Prescaler 不为1时,定时器时钟为其2倍,当为1时,为了不超过HCLK ,定时器时钟等于HCLK 。 例如:我们一般配置系统时钟SYSCLK 为168MHz ,内部高速时钟 AHB=168Mhz ,APB1欲分频为4,(因为APB1最高时钟为42Mhz ),那么挂在APB1总线上的timer3时钟为84Mhz 。 《STM32F4xx 中文参考手册》的424~443页列出与通用定时器相关的寄存器一共20个, 以下列出与Timer3相关的寄存器及重要寄存器的简单介绍。 1 TIM3 控制寄存器 1 (TIM3_CR1) SYSCLK(最高 AHB_Prescaler APBx_Prescaler

电子定时器设计

《专业实训设计报告》 设计题目:电子定时器设计 班级:电子11-2班 学号: 1106040207 学生姓名:李高 指导教师:刘英哲

一、设计要求 要求实现一个电子定时器,即根据外部输入的计定时间进行计时(时间可采用外部按键的方式输入),并实时的显示当前计时结果,当计时到计定时间后进行警报(可通过LED 闪烁或蜂鸣器)。计时时间以秒/分为显示单位,可分别实现对5 分钟,10 分钟,15 分钟和20 分钟的计时。 二、设计的目的 1.掌握电路设计的一般方法 在前面我们已经学习了模电、数电、单片机的理论知识,并对模拟电路,数字芯片和单片机各个接口的功能、各个功能模块有了了解。通过此次课程设计,我们可以更加了解单片机及其使用,并围绕单片机设计拓展电路。 2.掌握电路仿真和调试过程 此次课程设计是一个综合设计,要求我们做出实物。在设计中我们要学习软硬件,绘制和焊接电路,通过调试使定时器能够正常工作。 3.提高总结能力 完成智能定时器实物设计后,我们要在报告中总结设计过程,经验和分析结果,对设计不足的地方提出改进建议。 三、设计的具体实现 方案一: 采用555定时器来输入脉冲,先通过74LS90进行十进制计数(时钟的秒数个位),达到进位时将进位送入74LS92进行六进制计数(时钟的秒数十位),进位送入74LS90进行十进制计数(时钟的分位);由74LS47译码后送给数码管进行显示。

方案二: 该方案仅由主电路、按键电路、显示电路、报警电路,四个模块组成。整个系统的计时功能皆由STC89C52内部自带的定时器T0来实现;时钟由共阴极数码管显示;五个开关按钮可以实现时钟的加,分钟的加,预置定时时间,定时启停;并利用蜂鸣器进行定时报警。方案框图如图3-1: 图3-1 方案一中虽然不需要程序,但是电路复杂,且不符合课程设计“以单片机为核心”的要求,所以最后采用了方案二。方案二,电路简单,时钟部分完全用软件实现,操作方便,完全可以满足课程设计要求。 根据选题要求,设计任务主要完成LED数码管能实现秒/分的显示;通过按钮调整时间;预置定时时间定时;并提醒用户定时时间到。为完成相应功能,系统设计包含以下几个基本模块:控制模块、信息显示模块、报警模块。总的框图如上面方案二中图3-1所示。 1.控制模块的选取方案 控制器是控制模块的核心,控制模块主要完成时钟和定时功能,从按键读取操作要求、从数码管和蜂鸣器信息显示。 方案一:采用中小规模集成电路。 采用中小规模集成电路构成的控制电路,由于外围器件多,容易出故障,而且调试起来非常麻烦。 方案二:采用ATMEL 公司的AT89S51作为系统控制器。 单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种

定时器常用函数

int every(long period, callback) 每“period”个毫秒调用“callback”方法。返回定时事件的ID。 int every(long period, callback, int repeatCount) 每“period”个毫秒调用“callback”方法,共“repeatCount”次。返回定时事件的ID。 int after(long duration, callback) 在“period”个毫秒后调用“callback”方法一次。返回定时事件的ID。 int oscillate(int pin, long period, int startingValue) 每“period”个毫秒切换数字输出引脚“pin”的状态。引脚的初始值由“startingValue”定义,应为HIGH或LOW。返回定时事件的ID。 int oscillate(int pin, long period, int startingValue, int repeatCount) 每“period”个毫秒切换数字输出引脚“pin”的状态,共“repeatCount”次。引脚的初始值由“startingValue”定义,应为HIGH或LOW。返回定时事件的ID。 int pulse(int pin, long period, int startingValue) 在“period”个毫秒后切换数字输出引脚“pin”的状态一次。引脚的初始值由“startingValue”定义,应为HIGH 或LOW。返回定时事件的ID。 int stop(int id) 停止正在运行的定时事件。返回定时事件的ID。 int update() 必须在“loop”中调用。Must be called from 'loop'. 它会服务所有与定时器相关的事件。 void setup() 执行一次 循环执行void loop() #include "Timer.h" Timer t; int ledEvent; void setup() { Serial.begin(9600); int tickEvent = t.every(2000, doSomething);//本语句执行以后2000毫秒执行回调函数Serial.print("2 second tick started id="); Serial.println(tickEvent); pinMode(13, OUTPUT); ledEvent = t.oscillate(13, 50, HIGH); Serial.print("LED event started id=");

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溢出中断标志] */

定时器产品使用说明书

定时器产品使用说明书 定时设置: 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、接通电源后请勿接触端子部分。本开关工作在无潮湿、腐蚀及高金属含量气体环境中。请勿沾染油或水。

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,

单稳态555定时器

一、555集成电路原理 555时基电路是一种将模拟功能与逻辑功能巧妙结合在同一硅片上的组合集成电路。它设计新颖,构思奇巧,用途广泛,备受电子专业设计人员和电子爱好者的青睐,人们将其戏称为伟大的小IC。1972年,美国西格尼蒂克斯公司(Signetics)研制出Tmer NE555双极型时基电路,设计原意是用来取代体积大,定时精度差的热延迟继电器等机械式延迟器。但该器件投放市场后,人们发现这种电路的应用远远超出原设计的使用范围,用途之广几乎遍及电子应用的各个领域,需求量极大。美国各大公司相继仿制这种电路1974年西格尼蒂克斯公司又在同一基片上将两个双极型555单元集成在一起,取名为NF556。1978年美国英特锡尔公司(Intelsil)研制成功CMOS型时基电路ICM555 1CM556,后来又推出将四个时基电路集成在一个芯片上的四时基电路558 由于采用CMOS型工艺和高度集成,使时基电路的应用从民用扩展到火箭、导弹,卫星,航天等高科技领域。在这期间,日本、西欧等各大公司和厂家也竞相仿制、生产。尽管世界各大半导体或器件公司、厂家都在生产各自型号的555/556时基电路,但其内部电路大同小异,且都具有相同的引出功能端。 时基集成电路555工作原理如下:图a所示为555时基电路内部电路图。管脚排列如图b所示。整个电路包括分压器,比较器,基本RS触发器和放电开关四个部分。

(1)分压器由三个5kW的电阻串联组成分压器,其上端接电源VCC(8端),下端接地(1端),为两个比较器A1、A2提供基准电平。使比较器A1的“+”端接基准电平2VCC/3(5端),比较器A2的“-”端接VCC/3。如果在控制端(5端)外加控制电压。可以改变两个比较器的基准电平。不用外加控制电压时,可用0.01mF的电容使5端交流接地,以旁路高频干扰。 (2)比较器A1、A7是两个比较器。其“+”端是同相输人端,“-”端是反相输入端。由于比较器的灵敏度很高,当同相输入端电平略大于反相端时,其输出端为高电平;反之,当同相输入端电平略小于反相输人端电平时,其输出端为低电平。因此,当高电平触发端(6端)的触发电平大于2VCC/3时,比较器A1的输出为低电平;反之输出为高电平。当低电平触发端(2端)的触发电平略小于VCC/3时,比较器A2的输出为低电平;反之,输出为高电平。 (3)基本RS触发器比较器A1和A2的输出端就是基本RS触发器的输入端RD和SD。因此,基本RS触发器的状态(3端的状态)受6端和2端的输入电平控制。图中的4端是低电平复位端。在4端施加低电平时,可以强制复位,使Q=0。平时,将4端接电源VCC的正极。 (4)放电开关图中晶体管VT构成放电开关,使用时将其集电极接正电源,基极接基本RS触发器的Q端。当Q=0时,VT截止;当Q=1时,VT饱合导通。可见晶体管VT作为放电开关,其通断状态由触发器的状态决定。 从CA555时基电路的内部等效电路图中可看到,VTl-VT4、VT5、VT7组成上比较器Al,VT7的基极电位接在由三个5kΩ电阻组成的分压器的上端,电压为2/3VDD;VT9-VT13组成下比较器A2,VTl3的基极接分压器的下端,参考电1/3VDD。在电路设计时,要求组成分压器的三个5kΩ电阻的阻值严格相等,以便给出比较精确的两个参考电位1/3VDD和2/3VDD。VTl4-VTl7与一个4.7kΩ的正反馈电阻组合成一个双稳态触发电路。VTl8-VT21组成一个推挽式功率输出级,能输出约200mA的电流。VT8为复位放大级,VT6是一个能承受50mA以上电流的放电晶体三极管。双稳态触发电路的工作状态由比较器A1、A2的输出决定。 555时基电路的工作过程如下: 当2脚,即比较器A2的反相输入端加进电位低于1/3VDD的触发信号时,则VT9、VTll导通,给双稳态触发器中的VTl4提供一偏流,使VTl4饱和导通,它的饱和压降Vces箝制VTl5的基极处于低电平,使VTl5截止,VTl7饱和,从而使VTl8截止,VTl9导通,VT20完全饱和导通,VT21截止。因此,输出端3脚输出高电平。此时,不管6端(阈值电压)为何种电平,由于双稳态触发器

相关主题
文本预览
相关文档 最新文档