51单片机定时器及其应用(3)(测量脉冲频率)

前面介绍了定时器的一般应用以及定时器GATE位的应用,还有一个位没有介绍,那就是定时器C/TˉC/\bar{T}C/Tˉ位。前面讲解定时器时总是写作定时器/计数器。这一位便是控制单片机这一功能是作为定时器还是计数器,其实本质都是计数器,作为定时器时候,对内部的1us脉冲进行计数,作为计数器的时候,对外部的脉冲进行计数,也就是来自T1引脚的脉冲,我们只要测量1s中之内有多少个脉冲,也就可以得到输入信号的频率了。

     给定一个门限时间T,在这段时间里面对脉冲进行计数,如上图,恰好有N个脉冲,那么可以得到NTsignalT_{signal}Tsignal​=T,假设门限时间为1s,则信号频率fsignalf_{signal}fsignal​=N。这便是简单频率测量的原理。注意上面分析是恰好,加入当T开始的时候,先来的是脉冲的下降沿,那么也就可能少记了一个脉冲,这也是频率测量误差的来源之一。下面附上代码:

/***
作者:邓家增
时间:2021年8月12日
程序功能:测量T1引脚脉冲频率,当频率较高时会产生一定误差,误差来源为+-1误差,比较常见,可以通过增大闸门时间减小
**/
#include <reg52.h>
unsigned int count_1s=0;//用于1s计数
unsigned long Frequency=0;//频率
unsigned long Count=0;//脉冲计数
unsigned char   Flag=0;//1s标志位
/***用于工作显示***/
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;sfr16 DPTR=0x82;//声明一个16位寄存器,用于存放计数值
/***数码管显示部分***/
sbit Wei_Select=P2^6;
sbit Duan_Select=P2^5;
char Display_Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
char Wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void delay_ms(unsigned int Xms)
{unsigned int i=0,j=0;for(i=Xms;i>0;i--)for(j=110;j>0;j--);
}
void display(unsigned int position,unsigned long number)
{Duan_Select=0;Wei_Select=1;P0=Wei[position-1];Wei_Select=0;Duan_Select=1;P0=Display_Code[number];delay_ms(3);
}
//定时器0初始化,作为1s的闸门,定时器1用于计数
void InitTimer(void)
{TMOD = 0x51;//方式1TH0 = 0xDC;//定时10msTL0 = 0;EA = 1;ET0 = 1;TR0=1;TH1=0;TL1=0;ET1=1;TR1=1;
}
void Timer0() interrupt 1
{TH0 = 0xDC;TL0 = 0;count_1s++;if(count_1s==100)//定时到1s钟{LED1=~LED1;count_1s=0;EA=0;//关闭中断,进行数据处理Flag=1;}
}
void Timer1() interrupt 3
{TH1=0;TL1=0;LED2=~LED2;Count++;
}
void Show_Frequency(unsigned long X)
{unsigned int ge=0,shi=0,bai=0,qian=0,wan=0;ge=X%10;shi=X/10%10;bai=X/100%10;qian=X/1000%10;wan=X/10000%10;display(8,ge);display(7,shi);display(6,bai);display(5,qian);display(4,wan);
}
void main()
{InitTimer();while(1){if(Flag==1){DPL=TL1;DPH=TH1;Frequency=Count*65535+DPTR;TH1=0;TL1=0;Flag=0;Count=0;EA=1;}Show_Frequency(Frequency);}
}

51单片机定时器及其应用(3)(测量脉冲频率)相关推荐

  1. 51单片机定时器及其应用(2)(测量脉冲宽度)

    51单片机定时器及其应用(2)(测量脉冲宽度) 上一篇文章讲了如何使用51单片机的定时器功能制作一个简易的数字钟,上次有一个GATE位没有涉及到,因此这次来介绍一下定时器的这个GATE位的应用,也就是 ...

  2. 基于51单片机的简易电容值测量仪proteus仿真设计

    51单片机简易电感测量仪仿真设计( proteus仿真+程序+讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0039 51单片机简 ...

  3. C语言课设项目-51单片机-定时器和计数器

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 一.定时器的原理 1.CPU时序的有关知识 2.在学习定时器之前需要明白的 3.定时/计数器的工作原理 ...

  4. 51单片机定时器及其应用(1)(时钟功能)

    51单片机定时器及其应用(1)(时钟功能)   STC89C51单片机有2个定时器,叫做定时器0和定时器1,可以用作普通定时器,计数器.普通定时器可以用来进行中断定时,波特率发生等,计数器可以用来对脉 ...

  5. c语言单片机定时器的应用程序,51单片机定时器中断程序(C语言)

    51c程序 51单片机定时器中断程序(C语言) 用C语言实现的,先要定义好定时器的初值 不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期 机器周期=12/n(n指晶 ...

  6. 基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间

    基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间 Proteus仿真 实例代码 #include "at89x52.h" /**74hc595引脚定义 ...

  7. 51单片机定时器(T0/T1)的使用与配置流程

    第一步:配置工作方式寄存器-TMOD TMOD寄存器的字节地址为89H,不能位寻址.一般采用整体赋值的方式进行配置:如:TMOD=0x01 // 0000 0001 GATE=0,定时器仅受TCON寄 ...

  8. 51单片机定时器的查询和进入中断处理

    51单片机定时器可用两种方式处理:查询和进入中断处理. 1.查询方式 void Init_T0 (void) 定时器初始化 { TMOD = 0x01;//计时器模式 TH0 = (65535-650 ...

  9. 51单片机定时器秒计数时钟+Proteus仿真

    51单片机定时器秒计数时钟+Proteus仿真 Proteus仿真 实例代码 本实例采用的是普中开发板Proteus模板 功能:电子钟,从左到右,1.2位为秒,3.4位为分,5.6位为时,7.8位为天 ...

最新文章

  1. Java面试参考指南(二)
  2. 信号与系统2021春季课程小论文批改
  3. yolov5和yolov5-face nms比较
  4. idea中配置个人注解代码模板
  5. Python 那些永远用不到的对象,我们称之为「垃圾」
  6. mybatis-一对一的关联查询有两种配置方式
  7. export mysql home_mysql的Linux下安装笔记
  8. 网络爬虫--8.编码趣闻
  9. 鹤岗一中2021年高考成绩查询,2021鹤岗市地区高考成绩排名查询,鹤岗市高考各高中成绩喜报榜单...
  10. SpringFramework核心技术一(IOC:命名bean)
  11. android滑动基础篇 TouchView
  12. linux 源代码安装mysql5.5_linux下通过源码包安装MySql5.5
  13. 面向对象程序设计方法学
  14. QGraphicsView制作绘制图元工具资料整理(鼠标、平移、缩放)
  15. android应用程序设计答案,Android移动应用程序设计智慧职教MOOC答案
  16. 富文本样式文字图片处理
  17. 网线线序及网线转RS232—— DB9线序
  18. 木子-前端-方法标签属性小记(普通jsp/html篇)2018
  19. jdbc快速入坑(二)
  20. HDU 还是畅通工程

热门文章

  1. OV10635 color HDR sensor module for Automotive - www.deltavision.io
  2. Mysql sleep线程过多解决方案
  3. JAVA入门算法题(六)
  4. Copley驱动器控制永磁同步电机设置步骤
  5. 计算机辅助英语听说考试系统,英语听说训练平台
  6. 激活层是每一层都有吗_我心目中最值得栽种的10种藤本月季,每一种都很优秀,你喜欢吗...
  7. 恋与制作人元旦服务器,恋与制作人2018元旦活动有什么_恋与制作人2018元旦活动介绍_游戏堡...
  8. gflags 调试内存_gflags工具使用——用于监控内存分配、检查内存泄露
  9. php 判断键值重复合并,php数组实现根据某个键值将相同键值合并生成新二维数组的方法...
  10. 计算机网络应用答题卡,网上阅卷系统中答题卡模板自动生成技术研究