定时器2_t2定时器 - CSDN
精华内容
参与话题
  • AT89S52之(定时器2)Timer2

    千次阅读 2014-04-20 20:10:56
    UR:http://blog.csdn.net/liming0931/article/details/7517747?userName=wanruoqingkong&userInfo=7Y2WES7scpQqjt8Q9S2WDrokRbvAwiQJ5ClYsosk8ELbLMSXoWnmkYwT946bOX%2B1Nkw%2FoDyNFl%2F8rZWkukVaW4YlpfP7rsA3m4YP7R

    URL: http://blog.csdn.net/liming0931/article/details/7517747

     http://blog.csdn.net/desert2009sz/article/details/6903443

    定时计数器2是一个16位定时/计数器,通过T2CON寄存器的C/T2位可以选择定时还是计数功能。定时器2 有3种操作模式:捕获、自动重新装载(递增或递减计数)和波特率发生器,这3种模式由T2CON 中的位进行选择,具体的选择方式见表1。定时器2有两个8为寄存器:TH2和TL2。在定时模式状态下,TL2寄存器每一个机器周期加1,。由于52单片机的每一个机器周期等于12的振荡周期,所以他的计数频率是振荡频率的1/12。

    表1

    RCLK+TCLK

    CP/RL2

    TR2

    MODE

    0

    0

    1

    16位自重载

    0

    1

    1

    16位捕获

    1

    X

    1

    波特率发生器

    X

    X

    0

    在计数状态下,外部引脚由1-0的负跳变是,寄存器就加1。并且在这种情况下,每当一个机器周期的S5P2的时科,单片机就对外部引脚进行采样,如果在下一个周期里信号变为低电平,则计数器加1。在下一个周期的S3P1时刻,若检测到有跳变,则计数器计数加1。识别1-0的跳变需要两个机器周期(24个振荡周期),所以计数信号的最大的频率只能是振荡频率的1/24。为了确保采样频率能够被采样,被采用的电平必须保持一个机器周期不变。

     

    1、      捕获模式

    在捕获模式,寄存器T2CON的位EXEN2有两方式可供选择:

    若EXEN2=0,定时器2为16位定时/计数器,当计数溢出是,T2CON中的TF2置1,并向CPU申请中断;

    若EXEN2=1,定时器2出来拥有和上述一样的功能外,还有捕获功能:即在引脚T2EX有1-0跳变的时候,RCAP2H和RCAP2L分别捕获并保存TH2和TL2的当前值(即RCAP2H=TH2,RCAP2L=TL2),另外T2EX脚的跳变也会使T2CON寄存器里的位EXF2值1,和TF2一样向CPU申请中断。

    2、      自重载模式(递增/递减计数器)

    定时器2可以设置为递增/递减自动重载计数器,并通过DCEN(Down Counter Enable)位来控制其模式。见表2,一旦CPU复位,DCEN被清0,意味着定时器2默认是递增计数器,当DCEN置为1时,允许定时器2递增或递减计数,由T2EX的电平来控制器计数方向。

    表1

    T2MOD Address = 0C9H                                 Reset Value = XXXX XX00B

    Not Bit Address

     

    Bit

    -

    -

    -

    -

    -

    -

    T2OE

    DCEN

     

    7

    6

    5

    4

    3

    2

    1

    0

    Symbol

    Function

    -

    保留

    T2OE

    定时器2输出使能

    DCEN

    DCEN=1,允许定时器2递增或递减计数


    图1   T2捕获原理图

     

           图2所示为定时器2自动递增模式(DCEN=0)原理图。在这种模式下由T2CON中的EXEN位选择。

           当EXEN=0;当计数器向上计数到0FFFFH是就会置位溢出标志位TF2,此时,寄存器RCAP2H和RCAP2L的值会自动装载到寄存器TH2和TL2中。寄存器RCAP2H和RCAP2L的值有软件预设。

           当EXEN=1;16位重载可由两个方式触发:计数溢出或T2EX引脚的负跳变。同时置位EXF2为1。在中断允许的条件下,TF2和EXTF2都可以触发中断。


    图2   T2自重载模式(DCEN=0)原理图

           当DCEN为1时,允许定时器2递增计数或者递减计数,就如图2所示。在这种模式下,T2EX引脚控制计数的方向。

    T2EX若为逻辑“1”,定时器2递增计数,直到0FFFFH是计数器溢出,置位TF2为1,同时溢出之后,寄存器RCAP2H和RCAP2L的值会自动装载到寄存器TH2和TL2中。

    T2EX若为逻辑“0”,定时器2递减计数,当寄存器TH2和TL2的值分别和寄存器RCAP2H和RCAP2L的值相等时,计数器向下溢出,同时立即置位TF2,并把定时计数器赋值为0FFFFH。

    //The EXF2 bit toggles wheneverTimer 2 overflows or underflows and can be used as a 17th bit of resolution. Inthis operating mode, EXF2 does not flag an interrupt.

    // (这段话不好翻译)


    本文是关于52单片机定时器计数器2做为普通的16位自动重装定时器使用,类似于定时器计数器0和定时器计数器1工作在方式1下。以下程序在Keil 2和Keil 3下调时通过,下载在本校的实验板上达到预期效果。AT89C52及其以上、AT89S52及其以上、STC89C52及其以上测试正常运行。

    /***********************************************************
    程序功能:52系列单片机定时器计数器2使用
    程序设计:燕山大学 鲁信琼
    晶振选择:24MHz, 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位; P1^7口作为测试指示灯
    本实验注意事项:
    1. 定时器2的中断使能为IE^6位,也就是ET2; 中断服务程序标号为5。
    2. 定时器2工作在16为自动重装模式下,不需要在中断服务程序中重新赋初值,在程序初始化的时候我们应该给RCAP2L和RCAP2H赋值,TH2和TL2将会在中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。
    3. 定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零,为了使定时尽量准确,我们常在终端服务程序中第一步就使TF2=0。
    4. 使定时器2产生中断的有两个中断源,如果EXEN2(定时器2外部使能标志)置1的话,使定时器2进入中断的有可能是定时器2计数溢出,也可能是捕获到T2EX(单片机P1^1口)有负跳变,所以需要在中断服务程序中判断EXF2是否为1。
    
    承接51单片机、PIC单片机程序、VB/VC++上位机程序、电子产品软硬件设计开发工作
    
    EMail: xqlu(at)ysu.net.cn	QQ: 9790335
    ***********************************************************/
    
    #include
    #include
    #define uchar unsigned char
    #define uint unsigned int
    #define LED_DATA P0
    sbit DULA=P2^6;
    sbit WELA=P2^7;
    sbit LED=P1^7;
    uchar timer2_ctr,num;
    uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x40, 0};
    
    //24MHz晶振延时x毫秒函数
    void delay_ms(uint xms)
    {
    	uint x,y;
    	for(x=xms; x>0; x--)
    		for(y=248; y>0; y--);
    }
    
    //初始化主函数
    void init_main()
    {
    	DULA=0;				//关闭数码管显示
    	WELA=0;
    
    	RCAP2H=(0xFFFF-50000)/256;
    	RCAP2L=(0xFFFF-50000)%256;	//24MHz晶振下定时25ms,自动重装
    	TH2=RCAP2H;
    	TL2=RCAP2L;			//定时器2赋初值
    	T2CON=0;			//配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0,这里赋值只是为了演示这个寄存器的配置
    	T2MOD=0;			//配置定时器2工作模式寄存器,这里其实不用配置,T2MOD上电默认就是0,这里赋值只是为了演示这个寄存器的配置
    	IE=0xA0;			//1010 0000开总中断,开外定时器2中断,可按位操作:EA=1; ET2=1;
    	TR2=1;				//启动定时器2
    }
    
    //数码管显示3位数:0-255
    void display(uchar num)
    {
    	uchar gw,sw,bw;
    	bw=num/100;
    	sw=num%100/10;
    	gw=num%10;
    
    	LED_DATA=0XFE;		//1111 1110
    	WELA=1;
    	_nop_();_nop_();
    	WELA=0;
    	LED_DATA=table[bw];
    	DULA=1;
    	_nop_();_nop_();
    	DULA=0;
    	delay_ms(3);
    
    	LED_DATA=0XFD;		//1111 1101
    	WELA=1;
    	_nop_();_nop_();
    	WELA=0;
    	LED_DATA=table[sw];
    	DULA=1;
    	_nop_();_nop_();
    	DULA=0;
    	delay_ms(3);
    
    	LED_DATA=0XFB;		//1111 1011
    	WELA=1;
    	_nop_();_nop_();
    	WELA=0;
    	LED_DATA=table[gw];
    	DULA=1;
    	_nop_();_nop_();
    	DULA=0;
    	delay_ms(3);
    }
    
    void main()
    {
    	init_main();
    	while(1)
    	{
    		display(num);
    	}
    }
    
    void timer2() interrupt 5
    {
            //!!!注意!!! 定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!!
    
    	TF2=0;
    	timer2_ctr++;
    
            //定时25ms×40=1000ms即1秒钟,这里模拟一个60秒秒表
    	if(timer2_ctr>=40)
    	{
    		timer2_ctr=0;
    		LED=~LED;
    		num++;
    		if(num>=60)
    		{
    			num=0;
    		}
    	}
    }


    展开全文
  • STC89C52单片机定时器2详细整理

    万次阅读 多人点赞 2020-03-10 15:44:13
    我自认为单片机所有的资源中最不好搞清楚的就是定时器2,尤其是对于那些以前从来没有玩过单片机的新手。定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。所以掌握好定时器2还是非常有必要的。...

    51单片机是我自学的第一款单片机,那时正好是过春节,想起那个寒假,外面下着大雪,有时还会传来一两声爆竹的炸响,而我一个人在房间里摆弄单片机开发板,反复调试程序的时光,真是难忘!

    我自认为这款单片机所有的资源中最不好搞清楚的就是定时器2,尤其是对于那些以前从来没有玩过单片机的新手。定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。所以掌握好定时器2还是非常有必要的。以下是在我完全搞明白它的原理和用法的基础上整理的一篇小文章。读起来,好像Datasheet一样!请原谅,希望没有辜负你的点击!

    定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位可将其设置为定时器或是计数器;通过设置T2CON中的工作模式选择位可将定时器2设置为三种工作模式,分别为捕获自动重新装载(递增或是递减计数)和波特率发生器

    知识点一定时器2的控制寄存器T2CON可按位寻址)*

    D7位--TF2:定时器2溢出标志位。用于请求中断(必须由软件清0

    D6位--EXF2:定时器外部标志位。当外部信号使能时,发生外部负跳变时置位请求中断(必须由软件清0

    D5位--RCLK:接受时钟标志位。默认情况下串行口中模式1和模式3的时钟是由定时器1的溢出率提供,若该位置位,则由定时器2提供。

    D4位--TCLK:发送时钟标志位。原理同上

    D3位--EXEN2:定时器2的外部使能标志位。定时器2没有作为串行口时钟时,若将该位置位时,将允许T2EX的负跳变产生捕获或重装

    D2位--TR2:定时器2启动/停止控制位。

    D1位--C/T2:定时器2的定时器/计数器选择位(reg52头文件中定义为了C_T2,请注意,下面相同

    D0位--CP/RL2:捕获/重装标志位。

    知识点二  定时器2的模式控制寄存器T2MOD(不可按位寻址)

    该寄存器在单片机的头文件reg2.h中可能没有被定义,自己定义吧!

    D1位—T2OE:定时器2输出使能位

    D0位—DCEN:向下计数使能位     

    知识点三:定时器2的三种模式*

    *1、捕获模式*

    在"CP/RL2=1"&&"TR2=1"时进入捕获模式。通过对控制寄存器T2CON的外部使能标志位EXEN2的置位和清0,又可以有分为如下两种工作模式:

    <1>EXEN2=0:

         此时定时器2作为一个16位的定时器/计数器(由定时器/计数器选择位C/T2位选择)使用,实验已通过。

    <2>EXEN2=1:

        此时定时器在前者的基础上,增加一个特性,即允许接受外部输入T2CON的负跳变,此负跳变使定时器2中的TH2和TL2中的值存入陷阱寄存器RCAP2HRCAP2L中,并将外部标志位EXF2置位,引起中断。该中断与前者中的中断同时存在并共用同一中断程序(在中断中可检测TF2和T2EX位确定是哪一个引起的中断)。除此之外该模式下,当中断是T2EX位引发的时,虽然引发了中断,但是由于不是溢出,并且计数器没有停止计数,因此,此时TH2和TL2不用重新装载值。

        实验证明在此模式下可以实现:用溢出中断输出方波,用线接入T2EXP1^1,在T2EX的中断中使蜂鸣器响起来,理论和实践一样,蜂鸣器响的频率是方波的两倍(因为它只捕捉负跳变)

    2、自动重装模式(递增/递减计数器)*

          16位自动重装模式中,定时器2可通过C/T2位配置为定时器/计数器,根据外部使能标志位EXEN2的置位和清0,可分为两种情况:

    <1>EXEN2=0

          定时器2为16位自动重装的普通定时器,由陷阱寄存器提供重装的值,只需要预设一下即可,可用于定时精度要求高,定时时间长(16位)的情况。

    <2>EXEN2=1时,根据递减计数使能位DCEN的置位和清0可分为两种情况:

    A1、T2MOD=0x00(DCEN=0;默认情况);

    与上一种情况相比,此时16位自动重新装载可由外部T2EX的负跳变,和溢出任意一种触发,并都能产生中断。

    A2、T2MOD=0x01(DCEN=1);

          此时允许T2EX控制计数的方向;T2EX=0时,重装的值为0FF和0FF,递减计数与陷阱寄存器预存值相等时,置位TF2产生中断。T2EX=1时;自动重装值为陷阱寄存器中的值,溢出时置位TF2产生中断。

    3、波特率发生器模式

          T2CON的TCLK和RCLK位为0(默认)时,串行口发送和接受的波特率由定时器1提供;置位为1时,由定时器2提供。可以一个通过定时器1,一个通过定时器2,这样可以获得发送和接受时不同的波特率。

    注意的地方: 定时器2作为定时器时,递增频率为晶振频率的12分频,而定时器2作为波特率发生器时,它的递增频率为晶振频率的2分频

    模式1和模式3的波特率=(振荡器频率/32  *  65535-N

    定时器2为计数模式时,外部时钟信号由T2(P1^0)引脚进入。

    定时器2作为波特率发生器的时候,TH2溢出并不会置位TF2,所以此时可以不用禁止定时器2中断,若是EXEN2位被置位时,可以将T2EX作为附加的外部中断。

    定时器2作为波特率发生器的时候,不要对TH2和TL2读写,可以读陷阱寄存器,但是也不要写。当对定时器2的陷阱寄存器进行访问时,应关闭定时器(TR2清0)。

    4、可编程时钟输出

          52系列单片机,可设定定时器/计数器2通过T2(p1^0)引脚输出时钟。

    P1^0除了可以作为普通I/O口外,还可以作为定时器2的外部计数输入和时钟信号输出。

         C/T2=0并且T2MOD的T2OE位为1时,可将定时器2选为时钟信号发生器,自动装初值。设置公式:

          时钟信号输出频率=(振荡器频率/4* 65535-N

    在时钟输出模式下,计数器溢出不会产生中断请求。这种功能相当于定时器2可同时作为波特率发生器和时钟发生器。

    **因为此时外部中断并没有被暂用,若是在设置上不冲突的话可能同时还可以响应T2EX引入的外部信号,这个只是猜想,还没有用实验证明过哈哈***

    知识点三,单片机对于外来脉冲信号具有计数功能,但是有要求:

    计数脉冲的最高频率=振荡器的频率/24

    并且为了确保给定电平在电平变化之前能被采样一次,则这个电平至少要维持一个机器周期

    展开全文
  • C52单片机定时器2介绍

    千次阅读 2019-05-02 21:43:19
    定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位可将其设置为定时器或是计数器;通过设置T2CON中的工作模式选择位可将定时器2设置为三种工作模式,分别为捕获、自动重新装载(递增或是递减...

    定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位可将其设置为定时器或是计数器;通过设置T2CON中的工作模式选择位可将定时器2设置为三种工作模式,分别为捕获自动重新装载(递增或是递减计数)和波特率发生器

    知识点一定时器2的控制寄存器T2CON可按位寻址)*

    D7位--TF2:定时器2溢出标志位。用于请求中断(必须由软件清0

    D6位--EXF2:定时器外部标志位。当外部信号使能时,发生外部负跳变时置位请求中断(必须由软件清0

    D5位--RCLK:接受时钟标志位。默认情况下串行口中模式1和模式3的时钟是由定时器1的溢出率提供,若该位置位,则由定时器2提供。

    D4位--TCLK:发送时钟标志位。原理同上

    D3位--EXEN2:定时器2的外部使能标志位。定时器2没有作为串行口时钟时,若将该位置位时,将允许T2EX的负跳变产生捕获或重装

    D2位--TR2:定时器2启动/停止控制位。

    D1位--C/T2:定时器2的定时器/计数器选择位(reg52头文件中定义为了C_T2,请注意,下面相同

    D0位--CP/RL2:捕获/重装标志位。

    知识点二  定时器2的模式控制寄存器T2MOD(不可按位寻址)

    该寄存器在单片机的头文件reg2.h中可能没有被定义,自己定义吧!

    D1位—T2OE:定时器2输出使能位

    D0位—DCEN:向下计数使能位     

    知识点三:定时器2的三种模式*

    *1、捕获模式*

    在"CP/RL2=1"&&"TR2=1"时进入捕获模式。通过对控制寄存器T2CON的外部使能标志位EXEN2的置位和清0,又可以有分为如下两种工作模式:

    <1>EXEN2=0:

         此时定时器2作为一个16位的定时器/计数器(由定时器/计数器选择位C/T2位选择)使用,实验已通过。

    <2>EXEN2=1:

        此时定时器在前者的基础上,增加一个特性,即允许接受外部输入T2CON的负跳变,此负跳变使定时器2中的TH2和TL2中的值存入陷阱寄存器RCAP2HRCAP2L中,并将外部标志位EXF2置位,引起中断。该中断与前者中的中断同时存在并共用同一中断程序(在中断中可检测TF2和T2EX位确定是哪一个引起的中断)。除此之外该模式下,当中断是T2EX位引发的时,虽然引发了中断,但是由于不是溢出,并且计数器没有停止计数,因此,此时TH2和TL2不用重新装载值。

        实验证明在此模式下可以实现:用溢出中断输出方波,用线接入T2EXP1^1,在T2EX的中断中使蜂鸣器响起来,理论和实践一样,蜂鸣器响的频率是方波的两倍(因为它只捕捉负跳变)

    2、自动重装模式(递增/递减计数器)*

          16位自动重装模式中,定时器2可通过C/T2位配置为定时器/计数器,根据外部使能标志位EXEN2的置位和清0,可分为两种情况:

    <1>EXEN2=0

          定时器2为16位自动重装的普通定时器,由陷阱寄存器提供重装的值,只需要预设一下即可,可用于定时精度要求高,定时时间长(16位)的情况。

    <2>EXEN2=1时,根据递减计数使能位DCEN的置位和清0可分为两种情况:

    A1、T2MOD=0x00(DCEN=0;默认情况);

    与上一种情况相比,此时16位自动重新装载可由外部T2EX的负跳变,和溢出任意一种触发,并都能产生中断。

    A2、T2MOD=0x01(DCEN=1);

          此时允许T2EX控制计数的方向;T2EX=0时,重装的值为0FF和0FF,递减计数与陷阱寄存器预存值相等时,置位TF2产生中断。T2EX=1时;自动重装值为陷阱寄存器中的值,溢出时置位TF2产生中断。

    3、波特率发生器模式                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

          T2CON的TCLK和RCLK位为0(默认)时,串行口发送和接受的波特率由定时器1提供;置位为1时,由定时器2提供。可以一个通过定时器1,一个通过定时器2,这样可以获得发送和接受时不同的波特率。

    注意的地方: 定时器2作为定时器时,递增频率为晶振频率的12分频,而定时器2作为波特率发生器时,它的递增频率为晶振频率的2分频

    模式1和模式3的波特率=(振荡器频率/32  *  65535-N

    定时器2为计数模式时,外部时钟信号由T2(P1^0)引脚进入。

    定时器2作为波特率发生器的时候,TH2溢出并不会置位TF2,所以此时可以不用禁止定时器2中断,若是EXEN2位被置位时,可以将T2EX作为附加的外部中断。

    定时器2作为波特率发生器的时候,不要对TH2和TL2读写,可以读陷阱寄存器,但是也不要写。当对定时器2的陷阱寄存器进行访问时,应关闭定时器(TR2清0)。

    4、可编程时钟输出

          52系列单片机,可设定定时器/计数器2通过T2(p1^0)引脚输出时钟。

    P1^0除了可以作为普通I/O口外,还可以作为定时器2的外部计数输入和时钟信号输出。

         C/T2=0并且T2MOD的T2OE位为1时,可将定时器2选为时钟信号发生器,自动装初值。设置公式:

          时钟信号输出频率=(振荡器频率/465535-N

    在时钟输出模式下,计数器溢出不会产生中断请求。这种功能相当于定时器2可同时作为波特率发生器和时钟发生器。

    **因为此时外部中断并没有被暂用,若是在设置上不冲突的话可能同时还可以响应T2EX引入的外部信号,这个只是猜想,还没有用实验证明过哈哈***

    知识点三,单片机对于外来脉冲信号具有计数功能,但是有要求:

    计数脉冲的最高频率=振荡器的频率/24

    并且为了确保给定电平在电平变化之前能被采样一次,则这个电平至少要维持一个机器周期

    展开全文
  • 常规方法测量脉冲的频率... 当然可以的,定时器2有输入捕获功能,P1.1接外部脉冲,当来一个脉冲,定时2就进入中断服务程序中断一次,同时也有定时功能。下面是主要的程序: #include #define uint unsigned int #de

    常规方法测量脉冲的频率,利用51单片机的两个定时器来测量,一个定时器来定时,一个定时器作为计数方式;能不能有一个更好的方法,不使用这么多硬件,只使用一个定时器就可以满足需求? 当然可以的,定时器2有输入捕获功能,P1.1接外部脉冲,当来一个脉冲,定时2就进入中断服务程序中断一次,同时也有定时功能。下面是主要的程序:

    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    #define ulong unsigned long 
    uint timer2_count;
    uint cap_count;
    uchar code dispbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; // 定义位选  从第二个数码开始
    uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//定义段码
    uchar dispbuf[8]={0,0,0,0,0,0,10,10}; //显示缓冲
    uchar temp[8];
    uchar dispcount;
    uint x;
    bit flag;
    sbit L1 = P0^7;
    //sbit L2 = P0^1;
    sbit W1=P1^2;
    sbit W2=P1^3;
    sbit W3=P1^4;
    sbit W4=P1^5;
    sbit W5=P1^6;
    sbit W6=P1^7;

    void display_wei(uchar dipcount)
    {
     switch (dipcount){
     case 0: W1=1;W2=W3=W4=W5=W6=0;
       break;
     case 1: {W2=1;W1=W3=W4=W5=W6=0;}
       break;
     case 2: {W3=1;W2=W1=W4=W5=W6=0;}
       break;
     case 3: {W4=1;W2=W3=W1=W5=W6=0;}
       break;
     case 5: {W5=1;W2=W3=W4=W1=W6=0;}
       break;
     case 6: {W6=1;W2=W3=W4=W5=W1=0;}
       break;
     }
    }
    void timer2_init()
    {
     ET2=1;       // 开定时器2
       T2CON=0X09;  //设置T2为捕获模式,下降沿则产生中断
       TH2=(65535-5000)/256;
       TL2=(65535-5000)%256;

       EA=1;        //打开中断
       TR2=1;       //启动计数器
    }

    void main()
    {
      timer2_init();
      while(1)
      {
       uchar i;
     if(flag==1)
     {
      flag=0;
      x=cap_count;   //频率公式  一秒钟测量的脉冲数
      //x= x*563;
      //x=x/10;
      for(i=0;i<8;i++)
      {
       temp[i]=0;     //数组清零
      }
      i=0;   
      //x=123456;
      while(x/10)
      {
       temp[i]=x%10;
       x=x/10;
       i++;
      }
      temp[i]=x;
      for(i=0;i<6;i++)
      {
       dispbuf[i]=temp[i];   //显示6位频率数(缓存)
      }
      
      cap_count=0;
      TR2=1; 
     }
      }
    }

    void timer2_interrupt(void) interrupt 5 using 1 //中断服务程序
    {
      if(EXF2) //捕获的中断
      {
        //L1=!L1;
     cap_count++;
            EXF2=0;
      }

      if(TF2)
      {
        TH2=(65535-5000)/256;
       TL2=(65535-5000)%256;
     timer2_count++;
     if(timer2_count==400)
     {
      //L2=!L2;
      flag=1;
      timer2_count=0;
      TR2=0;//停止计数
        }
     TF2=0;
     P0=dispcode[dispbuf[dispcount]]; //显示数据
     
     //P1 = ((P1&0x02)|dispbit[dispcount+2]);          //位选
     display_wei(dispcount);
     dispcount++;
     if(dispcount==6)
     {
      dispcount=0;
     }
      }
    }

     

    展开全文
  • 定时器2(一)

    千次阅读 2019-02-18 12:48:39
    52单片机比51单片机不只是在容量上提升,还多一个定时器2。定时器 T2的功能比 T1、T0都强大,但描述它的资料不多, 可能是使用得比较少的缘故吧。但好用的东西怎样放过,下面来盘盘定时器2。 概述 定时器 T2是一个...
  • 定时器任务2

    2020-07-06 09:56:45
    /** * 将配置文件所有属性值读入内存,项目运行时不再读文件 */ public static void loadProps() { Properties prop = new Properties(); InputStream in = null; try { Environment environment = ...
  • 关于AT89s52的定时器2实现定时功能 包括如何配置定时器2的寄存器等
  • 定时器2个小时

    2017-11-23 15:18:53
    使用一下链接来获取定时的时间: http://cron.qqe2.com/
  • C# 中的定时器2

    2019-07-04 19:09:23
    一、单线程定时器1.System.Windows.Forms.Timer WinForms定时器,单线程定时器,线程安全;运行在UI线程,可直接更新UI画面;执行效率不高,适用于小任务。因为是单线程,定时器tick事件的处理方法会阻塞主线程。 2...
  • 这篇文章,我们对51单片机的定时器2的寄存器和功能进行介绍。 1 定时器2控制寄存器T2CON 定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位,可将其作为定时器或计数器。定时器2有3中模式...
  • STM8S0 定时器2中断配置

    千次阅读 2018-02-05 16:23:55
    1.程序:定时器2中断配置、高精度延时函数和LED灯初始化 2.基础知识: 一、程序: #include  #include "timer.h" #include "led.h" //unsigned int ms_count=0;//毫秒计数 //定时器2初始化 void ...
  • 52单片机定时器2

    千次阅读 2015-01-22 19:26:39
    使用捕获功能可以非常准确的测量脉冲宽度或周期,他的工作原理是:单片机内部有两组寄存器,其中一组的内部数值是按照固定的机器周期递增或递减,通常这组寄存器就是定时器的计数器寄存器(TLX,THX),当与捕获功能...
  • 51单片机定时器T2初始化设置

    万次阅读 2012-02-21 11:10:38
    单片机T2定时器实现1秒精确定时程序 单片机T2定时器实现1秒精确定时程序 /******************************************************************************************** * 文 件 名:test.c * 功 能:...
  • 以STM32F103C8T6为例,从其数据手册中可以看到,PA0、PA1的复用功能(Default alternate functions)分别是定时器2的CH1和CH2。 由图2可以看到,其中PA0的复用功能中TIM2_CH1_ETR表示,PA0既可以复位为TIM2_CH1,也...
  • 51单片机默认使用定时器1作为串口通信的波特率发生器、定时器1中断通信,串口与定时器1冲突,在遇到定时器不够用的时候可以用定时器2
  • 利用定时器计数器2作为串口波特率发生器(reg52.h文件缺少对T2CON的定义,需自己定义,在reg52.h头文件加sfr T2CON = 0xC8;)。 程序如下: #include "reg52.h" #include "intrins.h" #include "stdio.h" #define u8...
  • 8052单片机中定时器T2的应用

    千次阅读 2012-04-26 10:16:27
    感谢! 52单片机的大家都熟悉,可是其中的Timer2很少有人去用,书上和网上鲜有资料,这里转载一篇文章,初步了解一下他的应用/**************... 程序功能:52系列单片机定时器计数器2使用 程序设计:燕山大学 鲁信琼
  • 定时器2延时10ms进入中断 */ //定义寄存器 sfr AUXR = 0x8e; //辅助寄存器 sfr T2H = 0xD6; //定时器2的高八位寄存器 sfr T2L = 0xD7; //定时器2的低八位寄存器 sfr IE2 = 0xAF; //中断使能寄存器 //T2定时器的...
  • 一个简单的样例,定时器T2实现PWM波的控制。 尤其注意定时器T2的初始化过程,是直接对8位寄存器进行操作的,然后还有T2在15系列的中断号 12。 #include &lt;stc15.h&gt; typedef unsigned char u8; ...
  •  STM32F4有多种定时器,其中TIM2-TIM5称为通用定时器,具有相似的软件设置及使用方法。在这里还需要注意的是TIM3和TIM4为16位定时器,TIM2和TIM5为32位定时器。  使用TIM2-5可以遵循以下步骤:  1、打开config.h...
1 2 3 4 5 ... 20
收藏数 283,411
精华内容 113,364
关键字:

定时器2