单片机脉冲计数器_51单片机脉冲计数器 - CSDN
  • 1.TMOD定时器/计数器工作方式寄存器 GATE=1时,定时器由INT和TR共同控制,用于测量脉宽; 2.TCON定时器/计数器控制寄存器 3.   2.应用示例: 2.1T0/T1控制外部引脚输出方波 1.设计思路:设置定时...

    1.基本原理:http://www.51hei.com/bbs/dpj-103111-1.html

    补充:

    1.TMOD定时器/计数器工作方式寄存器

    GATE=1时,定时器由INT和TR共同控制,用于测量脉宽;

    2.TCON定时器/计数器控制寄存器

    3.

     

    2.应用示例:

    2.1T0/T1控制外部引脚输出方波

    1.设计思路:设置定时计数器工作在定时工作方式,在中断服务子程序中将需要输出方波信号的I/O引脚上的电平翻转即可。

    2.仿真电路:

    3.代码

    2.2PWM波形输出

    1.设计思路:51单片机可以使用一个定时计数器来控制产生波形的频率,用另外一个定时计数器来控制波形的占空波。

    2.仿真原理图同1.

    3.具体代码:

    3.脉冲计数

    1.设计思路:使用T0/T1进行计数时,当外部引脚上检查到一个脉冲信号之后让计数器加1,可以使T0/T1在计数溢出之后产生一个中断事件,然后在中断事件中进行检查再此次溢出之前进行了多少次计数,则可以得到对应的计数值。

    2.peoteus仿真

    3.代码:

       T0工作于计数方式,外部脉冲加在51单片机的T0(P3.5)引脚上,当检查到一个脉冲之后T0加1,由于T0的数据寄存器TH0和TL0的初始化值为0xFFFD,所以当检测到“0xFFFF – 0xFFFD = 0x0003”个计数脉冲之后溢出,触发T0计数器中断,在中断服务子程序中将一个连接到P1.7引脚上的发光二极管翻转 。

    点击运行,每当点击K1三下之后,可以看到LED翻转。

    4.脉冲宽度测量

    1.设计思路:

    操作步骤:设置GATE位和定时器的工作方式,监视外部中断引脚上的电平变化,当电平变为低的时候停止定时器。启动定时读取定时器对应的数据寄存器的内容。根据对应的工作频率计算出脉冲宽度。

    2.proteus仿真

    一个按键K1一端连接到GND,另外一端连接通过一个10K的电阻R3连接到VCC后同时连接到51单片机的P3.4(T0)引脚上,当该按键被按下时会在51单片机的外部定时器中断引脚上产生一个负脉冲信号。

     在initT0的T0初始化函数中,设置了GATE位,然后在外部中断0引脚(P3.2)变低的时候将T0关闭,读取TH0和TL0的值,再计算获得脉冲的宽度。

    3.代码:

     

    展开全文
  • 利用51单片机设计一个计数显示系统,要求8个数码管显示T1输入脉冲的个数。 ;最好用汇编语言,加注释,尽量别太复杂。尽量快些哈!;悬赏分:30 | 解决时间:2011-7-20 19:15 | ;====================================...

    ;利用51单片机设计一个计数显示系统,要求8个数码管显示T1输入脉冲的个数。
    ;最好用汇编语言,加注释,尽量别太复杂。尽量快些哈!
    ;悬赏分:30 | 解决时间:2011-7-20 19:15 |
    ;=====================================================
    ;最佳答案:
    ;题目要求在T1端输入脉冲,统计脉冲个数,并即时输出显示,使用8个LED数码管,显示:0000 0000~9999 9999。
    ;计数、显示,很简单的。虽然要求的位数较多,但是循环一下,也就可以了。
    ;程序用汇编汇编语言编写好了,指令不超过50行,太简单了。
    ;题目只是要求在T1端输入脉冲,并没有指出显示电路,那么就设计一个仿真实验电路如下:

    利用51单片机统计脉冲个数,即时输出显示 - 非著名博主 - 电子信息角落
    ;图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/fcef1a2510f701644d088dd2.html#

    ;仿真图中使用了两种虚拟仪器:“信号发生器”和“计数器”,通过按键即可输入单次脉冲和连续脉冲。

    ;全部程序如下:

    NUM_B  EQU  30H        ;计数、显示单元起始地址
    NUM_N  EQU  8          ;计数、显示单元的字节数

        ORG  0000H
        JMP  START
        ORG  001BH
        JMP  T1_INT
    ;------------------------
    START:
        MOV  TMOD, #60H    ;T1计数方式2
        MOV  TH1, #255     ;初始值为FF
        MOV  TL1, #255     ;当收到一个输入,立刻引起中断
        SETB TR1           ;启动T1
        MOV  IE, #10001000B;允许中断
        MOV  SP, #40H      ;设置堆栈
    ;------------------------
    M_LOOP:
        CALL DISP
        SJMP M_LOOP
    ;------------------------
    DISP:
        MOV  R0, #NUM_B    ;30H
        MOV  R2, #1        ;先显示最低位
    D_LOOP:
        MOV  A,  @R0
        ADD  A,  #(D_TAB - $ - 3)
        MOVC A,  @A + PC
        MOV  P2, #0        ;关闭显示,消隐
        MOV  P0, A         ;输出段码
        MOV  P2, R2        ;输出位码
        CALL DL1MS
        MOV  A,  R2        ;修改位码
        RL   A
        MOV  R2, A
        INC  R0            ;修改显示指针
        CJNE R0, #NUM_B + NUM_N, D_LOOP
        RET
    ;------------------------
    D_TAB:                 ;共阳极段码
        DB  0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H
        DB   80H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH,0FFH;FF是空白的代码
    ;------------------------
    DL1MS:                 ;延时
        MOV  R7, #242
        DJNZ R7, $
        DJNZ R7, $
        RET
    ;------------------------
    T1_INT:                ;T1中断程序
        PUSH PSW           ;保护现场
        SETB RS0           ;换用工作区
        MOV  R0, #NUM_B
    T1_LOOP:
        INC  @R0           ;数字加一
        CJNE @R0, #10, T1_END ;不到10就退出
        MOV  @R0, #0       ;到10就清零
        INC  R0            ;转去下一位
        CJNE R0, #NUM_B + NUM_N, T1_LOOP
    T1_END:
        POP  PSW           ;恢复现场
        RETI
    ;------------------------
    END
    ;=====================================================
    回答时间:2011-7-18 07:56
    回答者: 做而论道 | 十五级  采纳率:43%
    提问者对于答案的评价:非常感谢!
    原题网址:http://zhidao.baidu.com/question/293572049.html
    ;=====================================================
    后记:
    仿真时,信号发生器有个控制框,可以选择信号的输出频率、幅度等,屏幕截图如下:

    利用51单片机统计脉冲个数,即时输出显示 - 非著名博主 - 电子信息角落
    图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/1bc67519aff072d14bedbcb6.html#

    在仿真时,计数器是上升沿计数,而单片机是下降沿计数,所以,两者显示的数字,有一个时间差。
    另外,刚刚启动时,计数器总要先计一个数,不知如何控制才好。

    展开全文
  • 51单片机的定时/计数器

    千次阅读 2018-09-18 22:54:08
    51单片机的定时/计数器 实现LED灯闪烁,代码如下: #include <reg51.h> //51单片机头文件 sbit LED = P0^0; //定义特殊寄存器p0.0;注意:sbit 必须小写、P 大写! void main() { unsigned int i; //...

    51单片机的定时/计数器


    实现LED灯闪烁,代码如下:

    #include <reg51.h>  //51单片机头文件
    sbit LED = P0^0;   //定义特殊寄存器p0.0;注意:sbit 必须小写、P 大写!
    void main()
    {
    	unsigned int i;   //定义无符号数i
    	while(1)					
    	{
    		for(i=0;i<52000;i++);	//for循环,实现延时
    		LED = ~LED;
    	}
    }
    

    在上面的程序中,使用for循环来实现延时功能,很简单,但是存在问题:

    1. 延时时间不准确
    2. 严重浪费cpu资源

    所以我们要使用单片机的定时/计数器来实现延时功能。

    MSC51单片机中有两个16位定时器/计数器(即T0和T1)。

    单片机计时器原理
    如图:

    1. 当单片机计数器连接欸到输入脉冲时,计数器就可以开始工作。
    2. 16位的计数器范围:0000~ffff,当超出这个范围是会溢出。 16位的计数器范围:0000~ffff,当超出这个范围是会溢出。

    计时器/定时器原理图

    计时器/定时器原理图

    如图:

    1. 当开关打到上面,计数器与振荡器相连,实现定时器功能。
    2. 当开关打到下面,计数器与T1相连,实现计时器功能。
    3. 控制端可以控制计数器/定时器的启动和停止。

    定时器相关的寄存器

    定时器相关的寄存器

    时间:2018年9月18日22:53:36


    -END-

    展开全文
  • C语言编的脉冲计数器

    热门讨论 2020-07-30 23:30:59
    计数脉冲由IT0输入 中断脉冲由INT0输入用4位数码管显示 用C语言编的单片机脉冲计数器程序
  • 51单片机之定时器/计数器应用实例(方式0、1、2、3)

    万次阅读 多人点赞 2019-05-26 22:19:13
    对于刚接触单片机的同学来说可能会对定时器/计数器的应用很蒙圈,特别是初值的计算和各种定时方式的选择。下面希望能给你带来一个清晰的思路。 定时器:一般用于软件计时,给定时器设置一个时间,时间到了系统停止...
    • 硬件:STC89C52RC
    • 开发工具:Keil uVision4

         对于刚接触单片机的同学来说可能会对定时器/计数器的应用很蒙圈,特别是初值的计算和各种定时方式的选择。下面希望能给你带来一个清晰的思路。

    定时器:一般用于软件计时,给定时器设置一个时间,时间到了系统停止当前的工作跳转到事先定义好的定时器中断函数里,函数里可以做一些周期性的事情。

    计数器:一般用于检测外来脉冲信号,给计数器设置一个次数,次数到了系统停止当前的工作跳转到事先定义好的计数器中断函数里,函数里做相应的事情。

    先说一下相关的寄存器,也可以直接跳过,看后面的实例分析。

    配置定时器或者计数器就是对相应的寄存器进行赋值,下面是相关的寄存器描述: 


    第一部分寄存器:

    对照着上面这一字节的每一位,进一步解析:

    位(符号)

    功能

    TMOD.7 (GATE)

    置1时,只有在脚为高、TR1=1时才可打开定时器/计数器1

    置0时,TR1=1即可打开定时器/计数器1

    TMOD.3 (GATE)

    置1时,只有在脚为高、TR1=1时才可打开定时器/计数器0

    置0时,TR1=1即可打开定时器/计数器0。

    TMOD.6  ( /)

    置1时,用作计数器1(从T1/P3.5脚输入)

    置0时,用作定时器1

    TMOD.2  (/ )

    置1时,用作计数器0(从T0/P3.4脚输入)

    置0时,用作定时器0

    TMOD.5/TMOD.4  (M1、M0)

    定时器/计数器1 选择工作方式

    方式0:M1=0,M0=0 ,13位定时器/计数器

    方式1:M1=0,M0=1 ,16位定时器/计数器

    方式2:M1=1,M0=0 ,8位自动重载定时器

    方式3:M1=1,M0=1 ,定时器/计数器1 此时无效

    TMOD.1/TMOD.0  (M1、M0)

    定时器/计数器0 选择工作方式

    方式0:M1=0,M0=0 ,13位定时器/计数器

    方式1:M1=0,M0=1 ,16位定时器/计数器

    方式2:M1=1,M0=0 ,8位自动重载定时器

    方式3:M1=0,M0=0 ,双8位定时器/计数器

    /*1*/  TMOD|=0x00;  //选择定时器0,工作方式为0,
    
    /*2*/  TMOD|=0x30;  //选择定时器1,工作方式为1
    
    /*3*/  TMOD|=0x40;  //选择计数器1,工作方式为0

    用或运算是为了在给相应位赋值时不会影响无关位。可以试着解读TMOD=0xDA

    第二部分寄存器:

    主要看T开头的,I开头是外部中断,先不管。

    位(符号)

    功能

    TCON.7 (TF1)

    定时器/计数器1溢出标志位。当 T1 被允许计数后T1从初值开始加1计数,最高位产生溢出时,置“1 ”TF1 ,并向 CPU请求中断,当CPU响应时,由硬件清“0 ”TF1 ,TF1也可以由程序查询或清“0 ”。

    TCON.5 (TR1)

    定时器 T1 的运行控制位。该位由软件置位和清零。当 GATE(TMOD.7)=0,TR1=1 时就允许T1开始计数,TR1=0 时禁止 T1 计数。当 GATE(TMOD.7)=1,TR1=1 且 INT1 输入高电平时,才允许 T1 计数。

    TCON.4 (TF0)

    定时器/计数器 0 溢出标志位。当T0被允许计数后T0 从初值开始加 1 计数,最高位产生溢出时,置“1”TF0,并向CPU请求中断,当 CPU 响应时,由硬件清“0”TF0,TF0也可以由程序查询或清“0”。

     

    TCON.3 (TR0)

    定时器 T0 的运行控制位。该位由软件置位和清零。当 GATE(TMOD.3)=0,TR0=1 时就允许T0开始计数,TR1=0 时禁止 T0 计数。当 GATE(TMOD.3)=1,TR0=1 且 INT0 输入高电平时,才允许 T0 计数

    除了TCON、TMOD还有TL0、TH0和TL1、TH1,它们分别是定时器0的Timer寄存器和定时器1的Timer寄存器。这个参数没有单位,不是毫秒或是其他,所以设置定时器的时间要通过一定的计算得来,也就是后面要说的重点部分。

    定时器的应用:

    编写单片机定时器程序的步骤:

    1. 对TMOD赋值,以确定T0和T1的工作方式。
    2. 计算初值,并将初值写入TH0,TL0或TH1,TL1。
    3. 中断方式时,对IE赋值,开放中断。
    4. 使TR0或TR1置位,启动定时器/计数器定时或计数。

    下面以定时器0为例,阐述不同的方式的编程过程。


    方式0:

    #include<reg52.h>
    
    #define uchar unsigned char
    #define uint  unsigned int
    
    sbit led1=P1^0;
    uchar num;
    
    void TIM0init(void)
    {
         TMOD=0x00;            //设置定时器0为工作方式0
         TH0=(8192-5000)/32;   //装入初值,怎么计算,下面分析
         TL0=(8192-5000)%32;    
         EA=1;    //开总中断
         ET0=1;   //开定时器中断
         TR0=1;   //启动定时器0
    }
    /*
    interrupt 0  指明是外部中断0;
    interrupt 1  指明是定时器中断0; 
    interrupt 2  指明是外部中断1;
    interrupt 3  指明是定时器中断1;
    interrupt 4  指明是串行口中断;
    
    函数名字可以随便起,但定时器0的中断号是固定为1的
    */
    void T0_time()  interrupt 1      
    {
         TH0=(8192-5000)/32; //重装初值,如果不重装,中断只触发一次
         TL0=(8192-5000)%32;
         num++;
    }
    						  
    void main()
    {
        TIM0init(); 
        while(1)
        {
    	  if(num==200)     //如果到了200,说明一秒时间到
              {
                 num=0;
    	     led1=~led1;   //让发光管状态取反
    	  }
        }
    }
    

    假设单片机用的晶振是12MHz,上面的中断函数每过5ms会被调用一次,也就是发光管每一秒状态取反一次。那么怎么计算初值以确定TL0和TH0的值呢?

    定时器方式0是指13位定时器,=8192;也就是说,当设置好初值后,系统会在这个初值的隔一个机器周期就会自增1,当累加到8192的时候溢出,然后触发中断。所以(8192-初值)*机器周期=定时器产生一次中断的时间。

    如果我们要设定的定时器产生一次中断的时间为5ms,那么:

                                                     机器周期=12*(1/12MHz)=1μs

                                                     初值=(8192-5ms/1μs)=3192

    13位定时器中,TH0整个 8 位全用,TL0只用低 5 位参与分频。

    TH0

    bit7

    bit6

    bit5

    bit4

    bit3

    bit2

    bit1

    bit0

    TL0

    bit7

    bit6

    bit5

    bit4

    bit3

    bit2

    bit1

    bit0

    因:3192=“110001111000”

    所以TH0=“1100011”,TL0=“11000”

    即TH0=(8192-5000)/32,TL0=(8192-5000)%32

    如果用的是11.0592MHz的晶振,机器周期就不是整数了,12*(1/11059200)≈1.0851μs.

    关于机器周期:

    方式0跟方式1差不多的,不同的是方式1中TH0、TL0所有位全用。两个字节,=65536.


    方式2:

       在定时器的方式0和方式1中,当计数溢出后,计数器变为0,因此在循环定时或循环计数时必须用软件反复设置计数初值,这必然会影响到定时的精度,同时也给程序设计带来很多麻烦。

         方式2被称为8位初值自动重装的8位定时器/计数器,TL(0/1)从初值开始计数,当溢出时,在溢出标志TF(0/1)置1的同时,自动将TH(0/1)中的常数重新装入TL(0/1)中,使TL(0/1)从初值开始重新计数,这样避免了认为软件重新装初值所带来的时间误差,从而提高了定时的精度。

    #include<reg52.h>
    
    #define uchar unsigned char
    #define uint  unsigned int
    
    sbit led1=P1^0;
    uint num;
    
    void TIM0init(void)
    {
         TMOD=0x02;    //设置定时器0为工作方式2
         TH0=6;   //装入初值
         TL0=6;    
         EA=1;    //开总中断
         ET0=1;   //开定时器中断
         TR0=1;   //启动定时器0
    }
    
    void T0_time()  interrupt 1      
    {
         //相比上面的方式0,这里不需要认为加入重装初值的代码
         num++;
    }
    						  
    void main()
    {
        TIM0init(); 
        while(1)
        {
    	  if(num==4000)     //如果到了4000,说明1秒时间到
              {
                 num=0;
    	     led1=~led1;   //让发光管状态取反
    	  }
        }
    }
    

        这个也是基于12MHz的振荡频率,TL0跟TL1必然是相同的,计算初值的方法跟上面一样。方式2为8位定时器/计数器,最多能装载=256个,相对方式0的13位和方式1的16位的少。方式2经历256个机器周期该计数器就会溢出。

        还有一个值得注意的是num变量的类型变了,因为4000已经超出了uchar的方位,所以改为uint。


    方式3:

         当选择方式3时,定时器T0就会被分成两个独立的计数器或者定时器。此时,TL0为8位计数器,计数溢出好置位TF0,并向CPU申请中断,之后需要软件重装初值; TH0也被固定为8位计数器,不过TL0已经占用了TF0和TR0,因此TH0将占T1的中断请求标志TF1和定时器启动控制为TR1。

         为了防止中断冲突,定时器T0在方式3时,T1不能产生中断,但可以正常工作在方式0、1、2下。通常这种情况下T1将用作串行口的波特率发生器。

    下面的例子是利用定时器方式3,TL0计数器对应的8位定时器实现第一个发光管以1s亮灭闪烁,用TH0计数器对应的8位定时器实现第二个发光管以0.5s亮灭闪烁。

    #include<reg52.h>
    
    #define uchar unsigned char
    #define uint  unsigned int
    
    sbit led1=P1^0;
    sbit led2=P1^1;
    uint num1,num2;
    
    void TIMEinit(void)
    {
         TMOD=0x03;  //设置定时器0为工作方式3	
         TH0=6;      //装初值
         TL0=6;
         EA=1;	 //开总中断
         ET0=1;      //开定时器0中断
         ET1=1;      //开定时器1中断
         TR0=1;	 //启动定时器0
         TR1=1;	 //启动定时器0的高8位计数器
    }
    
    void TL0_time()  interrupt 1
    {
         TL0=6;  //重装初值
         num1++;
    }
    
    void TH0_time()  interrupt 3  //占用T1定时器的中断号
    {
         TH0=6;  //重装初值
         num2++;
    }
    						  
    void main()
    {
         TIMEinit();
         while(1)
         {
    	 if(num1>=4000)  //12*(1/12MHz)*(256-6)*4000=1s
             {						  
    	     num1=0;
    	     led1=~led1;
    	 }
             if(num2>=2000)  //12*(1/12MHz)*(256-6)*2000=0.5s
             {
    	     num2=0;
    	     led2=~led2 ;
             } 
        }
    }

    这里的num1>=4000而不是num1==4000,是为了稳妥起见,万一定时器计数超过了4000,而主循环还没来得及判断,则会错过4000.那led1就不能实现取反了。

     

    仅供参考,错误之处以及不足之处还望多多指教。

    展开全文
  • MCS-51单片机内部有两个16位的定时/计数器,T0和T1,他们的工作原理和工作方式基本相同,在MCS-52单片机中,增加了一个定时/计数器T2,该部件的功能强于T0和T1. 定时器和计数器是作为定时器还是计数器使用,采用...
  • 要求:1. 51 有两个定时/计数器,本实验中,定时/计数器 1 做定时用,定时 1 秒; 定时/计数器 0 做计数用。单片机将在 1 秒内对脉冲计数并送四位数码管实时显示;
  • 学习笔记之-51单片机定时计数器

    千次阅读 多人点赞 2017-02-12 16:51:30
    一、单片机的时序 单片机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的。由于指令的字节数不同,取这些指令所需要的时间也就不同,即使是字节数相同的指令,由于执行操作有较大的差别,不同的指令执行时间也不...
  • /********************************************** 方法1:延时法 硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1 T1 P3.5 波特率:9600 描述:T0用于定时,方式1,定时时间50ms,中断... 外部的脉冲是用STM
  • 51单片机定时器/计数器

    千次阅读 2019-05-08 11:25:50
    定时器的本质也是计数器,只不过定时器的脉冲来自内部的晶振,而计数器脉冲来时外部,当检测的脉冲的下降沿时,计数寄存器加一,直到溢出,然后单片机产生一个中断。所以需要定时时,先给计数寄存器设定一个初值,...
  • 单片机 定时器/计数器

    千次阅读 2019-01-10 14:32:48
    单片机 定时器/计数器 ... 定时器/计数器是一个加“1”计数器,来一脉冲即做加1计数,直至寄存器各位全为1,再来一脉冲计数器回0且使TF0(定时器T0)TF1(定时器T1)置1表示定时时间到,计数值乘以单片机的机...
  • #include <reg51.h> #define uint unsigned int #define uchar unsigned char sfr P0M0 = 0x94; sfr P0M1 = 0x93; sfr P2M0 = 0x96; sfr P2M1 = 0x95; uint count,i,j; uchar code leddata[] = { ......
  • 51单片机计数器

    千次阅读 2018-12-20 19:08:52
    T0计数器计数,方式2工作,对p3.4输入单脉冲计数 ORG 0000H AJMP MAIN ORG 000BH AJMP TIME0 ORG 0100H MAIN: MOV IE,#00H MOV TMOD , #06H MOV TH0,#00H MOV TL0,#00H SETB TR0 TIME0: MOV P1,TL0 SJMP TIME0 END ...
  • 基于51单片机脉冲信号计数并报警源代码,从P2^0与gnd之间取信号,报警P3^4
  •   单片机中的模块,可通过编程实现对系统时钟计数(定时器),也可以对外部信号计数(计数器)   每个定时/计数器都有多种工作方式,不同的工作方式对应计数长度和初值装载方式不同   51系列单片机中有两个16...
  • 单片机stc89c52rc中有两个定时器/计数器,T0和T1。每个定时器/计数器既可以实现定时功能,也可以实现计数功能。 定时器/计数器的结构: 定时器/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。 ...
  • 51单片机计数器 方式2 外部开关按5次LED灯状态发生改变 最近一段时间在准备单片机考试,复习过程中发现自己在平时写作业的过程中很少用到计数器,大部分情况下都是在用定时器,因此复习看到有关定时器的内容时很...
  • 51单片机之定时器\计数器的工作原理定时器/计数器的结构:何时处于计数器方式?何时处于定时器方式?TCON和TMOD特殊功能寄存器:定时器/计数器工作方式:方式0:13位的定时器/计数器方式1:16位的定时器/计数器方式2...
  • 单片机的定时/计数器

    千次阅读 2012-02-01 11:26:28
    上一篇,我们给大家讲述了单片机的一些简单入门知识,不知道对您是否有用呢,今天我将继续为大家献上单片机的定时/计数器知识,欢迎和我一起讨论学习,嘻嘻。   在测量控制系统中,常常要求有一些实时时钟,以实现...
  • stm32通用定时器用做外部脉冲计数器的例程

    万次阅读 多人点赞 2018-07-05 14:34:30
    原文: https://blog.csdn.net/sdutkqb/article/details/39100971最近几天要用到stm32对外部输入脉冲进行计数,很自然想到定时器,可是手上资料没有讲解stm32定时器如何用作外部计数器的,在网上找例程,也没找到几...
1 2 3 4 5 ... 20
收藏数 3,296
精华内容 1,318
关键字:

单片机脉冲计数器