IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机定时器及其应用(3)(测量脉冲频率) -> 正文阅读

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

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

?????前面介绍了定时器的一般应用以及定时器GATE位的应用,还有一个位没有介绍,那就是定时器 C / T ˉ C/\bar{T} C/Tˉ位。前面讲解定时器时总是写作定时器/计数器。这一位便是控制单片机这一功能是作为定时器还是计数器,其实本质都是计数器,作为定时器时候,对内部的1us脉冲进行计数,作为计数器的时候,对外部的脉冲进行计数,也就是来自T1引脚的脉冲,我们只要测量1s中之内有多少个脉冲,也就可以得到输入信号的频率了。
在这里插入图片描述
?????给定一个门限时间T,在这段时间里面对脉冲进行计数,如上图,恰好有N个脉冲,那么可以得到N T s i g n a l T_{signal} Tsignal?=T,假设门限时间为1s,则信号频率 f s i g n a l f_{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;//方式1
    TH0 = 0xDC;//定时10ms
    TL0 = 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);
		}
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 12:17:17  更:2021-08-13 12:21:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:30:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码