/*********使用12M的晶振*********/
#include<reg52.h>
#include"12864.h"
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
sbit count_0=P3^4;
sbit count_1=P3^5;
uchar i=0;
uchar j=0;
uchar k=0;
//定时器0作为U_f周期的计数,定时器1作为U_ref周期计数,定时器2作为计时
/************计数器0的中断****************/
void timer0_count(void) interrupt 1
{
i++; //计数溢出
TH0=0xFF;
TL0=0xFF;
}
/**************计数器1的中断****************/
void timer1_count(void) interrupt 3
{
j++; //计数溢出
TH1=0XFF;
TL1=0XFF;
}
/******************定时器2的中断*************/
void timer2(void) interrupt 5
{
k++; //定时周期次数
}
/*************** 初始化定时器0*************/
void init_timer0(void)
{
TMOD|=0X05;
TH0=0XFF;
TL0=0XFF;
ET0=1;
i=0;
}
/**************初始化定时器1********************/
void init_timer1(void)
{
TMOD|=0X50;
TH1=0XFF;
TL1=0XFF;
ET1=1;
j=0;
}
/**************初始化定时器2*********************/
void init_timer2()
{
T2CON=0x00;
RCAP2L=0x00;
RCAP2H=0x00;
TH2=0x00;
TL2=0x00;
ET2=1;
k=0;
}
main()
{
uchar str_F[3]={0}; //用于显示U_f频率
uchar str_U[3]={0}; //用于显示U_ref的频率
uchar time_H,time_L;
float time_F,time_U;
uint frequence_F,frequence_U;
lcd_init(); //初始化液晶
lcd_clear(); //液晶清屏
EA=1; //打开定时器的中断
/************先计算U_f频率,后计算U_ref频率******************/
while(1)
{
init_timer0();
init_timer2();
count_0=0;
TR0=1; //开启定时器0计来U_f周期次数
while(count_0==0);
while(count_0==1); //等待第一个下降沿的到来
TR2=1; //开启计时器2开始定时
while(i<=5);
TR0=0; // 关闭定时器0的周期计数
TR2=0; // 终止定时器2的定时
time_L=TL2;
time_H=TH2;
time_F=((time_H<<8)+time_L)+k*65536; //时间单位是us
time_F=time_F/1000.0; //将周期时间单位转化为s
time_F=time_F/(k-1); //方波的周期,单位为s
frequence_F=(uint)(1000/time_F); //U_f频率计算完毕,单位为HZ
str_F[0]=frequence_F/10;
str_F[1]=frequence_F%10;
dis_str(0,0,"U_f的频率:");
dis_str(1,0,str_F);
time_L=0;
time_H=0; //清零,为下次读定时器作准备
init_timer1();
init_timer2();
TR1=1; //开启定时器0计来U_ref周期次数
while(count_1==0);
while(count_1==1); //等待第一个下降沿的到来
TR2=1; //开启计时器2开始定时
while(j<=5);
TR1=0; // 关闭定时器1的周期次数计数
TR2=0; // 终止定时器2的定时
time_L=TL0;
time_H=TH0;
time_U=((time_H<<8)+time_L)+k*65536; //时间单位是us
time_U=time_U/1000.0; //将周期时间单位转化为s
time_U=time_U/(k-1); //方波的周期,单位为s
frequence_U=(uint)(1000/time_U); //U_ref频率计算完毕,单位为HZ
str_U[0]=frequence_U/10;
str_U[1]=frequence_U%10;
dis_str(2,0,str_U);
dis_str(3,0,"U_ref的频率:");
}
}
frequence_2.rar_频率的算法
版权申诉
131 浏览量
2022-09-20
16:24:21
上传
评论
收藏 29KB RAR 举报
Kinonoyomeo
- 粉丝: 77
- 资源: 1万+
最新资源
- 美赛数学建模算法-使用Matlab实现非线性规划NonLinearProgramming-国赛-题解.zip
- linux安装java8环境资源包
- 静态路由综合实验模拟ensp
- Unity中WebSocket网络连接的代码以及相关protobuf-net协议转换后的脚本类
- 基于ATLAB + Psychtoolbox 心理学实验,情绪词汇效价判断
- 美赛数学建模算法-使用Matlab实现神经网络NeuralNetwork-包括BP+LVQ-国赛-题解.zip
- hb-mapper-makertbin.log
- dfcf_silence_upgrade_cfw_10.15.3_20240318163518_64.apk
- 美赛数学建模算法-使用Matlab实现多元分析MultivariteAnalysis-包括聚类分析+主成分分析-国赛-题解
- 构成学1.psd
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈