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

📄 pca.c

📁 电子设计训练课题
💻 C
字号:
/*===============================================================*/
/*函数名称: PCA_Capture.c                                       */
/*函数功能: 主函数,调用各模块                                   */
/*基本思想:  正负边沿均捕捉脉冲                                  */
/*修改记录: 无修改记录                                          */
/*编写作者: t483-4-19chenyong                                   */
/*编写日期: 2007-4-14                                           */
/*===============================================================*/
#include"common.h"
#include"PCA.h"
#include<math.h>
#define  M   0.32653061

float value;
float xdata  PCA0_Value[10];
long pca_temp;
float  period;
float  frequncy;
uchar number=0;
bit pca_flag;
/*===============================================================*/
/*  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()
{   

		if(pca_flag)  //捕捉十次
		{						  
			pca_flag=0;
			if(number>=10)
			{
			  	pca_temp = PCA0_Value[1]+PCA0_Value[3]+PCA0_Value[5]+PCA0_Value[7]+PCA0_Value[9];
				period = (float)pca_temp/5;
				period = (float)M*period*2;
				frequncy = (float)1000/period;
				frequncy = (float)1000*frequncy;
				number=0;
			}				
		}	
	    return(period);
}
/*捕捉思想:在中断程序中放个静态变量,电平的跳变间隔就是当前的捕捉值与上次捕捉
            值之差。
*/
void PCA_ISR(void) interrupt 9 using 1 
{
	static xdata uint temp_count=0,cnum=0;
	if(CF)
	{
	    cnum++;
		CF=0;	
	}
	if(CCF0)
	{
 		if(PCA0CP0<temp_count)
			  cnum--;	  
		if(number>=10)
			number=0;
        PCA0_Value[number] = PCA0CP0-temp_count;
		PCA0_Value[number]+=65536L*cnum;
		cnum=0;
		temp_count=PCA0CP0;
		number++;
		CCF0=0;
	}
	pca_flag=1;
  }	

⌨️ 快捷键说明

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