⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pca_capture.c

📁 基于8051F实现导纳分析仪,键盘,液晶,功能都全有,其中包含测频,测相,测高电平,测低电平,测幅.等多种算法思想.用C语言实现.绝对原创!
💻 C
字号:
/*===============================================================*/
/*函数名称: PCA_Capture.c                                       */
/*函数功能: 主函数,调用各模块                                   */
/*基本思想:  正负边沿均捕捉脉冲                                  */
/*修改记录: 无修改记录                                          */
/*编写作者: t483-4-19chenyong                                   */
/*编写日期: 2007-4-14                                           */
/*===============================================================*/
#include"common.h"
#include"PCA.h"
#include<math.h>

xdata uint PCA0_Value[12],i;
xdata ulong sum0,sum1,x,y;
uchar number=0;
float value;
bit isnewdata;
/*===============================================================*/
/*  CAPPn----------------------------------------------上升沿捕捉*/
/*  CAPNn----------------------------------------------下降沿捕捉*/
/*  ECCFn--------------------------------------------允许捕捉中断*/   
/*===============================================================*/
void PCA0_Initial()
{                       //PCA CEX0配置为正负边沿均捕捉
	PCA0CPM0 = 0x31;    //正负边沿触发模式,CEX0捕捉中断使能
 	PCA0CPL0 = 0x00;    
 	PCA0CPH0 = 0x00;    
}
void PCA_Initial()
{
	PCA0MD=0x08;        //PCA采用系统时钟,且PCA溢出中断禁止
	PCA0CN=0x40;        //启动PCA计数器
	EIE1|=0x08;         //PCA中断使能
}

float PCA_Capture()
{   
                        //把捕捉端口配置到P0.0
    if(isnewdata)       //捕捉十次
	{				  		  
		isnewdata=0;
			if(number>=12)
			{
                sum0=PCA0_Value[1]+PCA0_Value[3]+PCA0_Value[5]+PCA0_Value[7]+PCA0_Value[9];
				sum1=PCA0_Value[2]+PCA0_Value[4]+PCA0_Value[6]+PCA0_Value[8]+PCA0_Value[10];
				if(sum0<sum1)
				{   
				    value=sum0;
					value=(float)value*0.2;
					value=(float)value/3.999892398;  
				}
				else
				{
				    value=sum1;
					value=(float)value*0.2;	
					value=(float)value/3.999892398; 			
				
				}
//				value=sum0<sum1? x:y;
//              value=sum;
//				value=(float)value*0.2;
//				value=(float)value/3.999892398;                  
                number=0;
			}	
	}
	return(value);
}
/*
  捕捉思想:在中断程序中放个静态变量,电平的跳变间隔就是当前的捕捉值与上次捕捉
            值之差。
*/
void PCA_ISR(void) interrupt 9 using 1 
{
	static xdata uint temp_count=0;
	if(CCF0)
	{
		PCA0_Value[number] = PCA0CPL0+PCA0CPH0*256-temp_count;
		temp_count = PCA0CPL0+PCA0CPH0*256;
		number++;
		CCF0=0;
	}
	isnewdata=1;
  }		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -