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

📄 capturetest.c

📁 C8051F020捕获测试...C8051F020捕获测试...C8051F020捕获测试...
💻 C
字号:
#include <C8051F020.H>
#include "pwmtest.h"
#include "uart.h"
#include "stdio.h"
#include "intrins.h"

unsigned char CaptureFlag=0;
unsigned int temp=0;

void PCAInit()
{
	EA=1;  //允许总中断
	EIE1|=0X08; // 允许PCA0中断(EIE1.3=1)
	PCA0CPM1|=0X21;//CEX1上升沿触发

}

unsigned int Capture(void)
{
	unsigned int period,Hold_val,Curr_val;
	union cap_val
	{
		char a[2];
		unsigned int b;
	} CAP_VAL;
    

	while(CaptureFlag==0);

	EA=0;

	Hold_val=temp;
	CAP_VAL.a[1]=PCA0CPL1;
	CAP_VAL.a[0]=PCA0CPH1;
	Curr_val=CAP_VAL.b;
	
	if(Curr_val<Hold_val)
	period=0xffff+Curr_val-Hold_val;
	else
	period=Curr_val-Hold_val;	
	
	temp=Curr_val;		//保存上次的值
	CaptureFlag=0; 
	EIE1|=0X08; 		//开PCA0中断(EIE1.3=1)

	EA=1;

	return period;
}

void main()
{ 
	unsigned int Period;
	float Frequency;
	PORT_Init(); //CEX0 连到P0.0 CEX1连到P0.1
	ClkInit();
	PWMInit();
	PCAInit();
	UartInit();
	TI0=1;
	//printf("UART is OK!\n");

	while(1)
	{
		Period=Capture();
		Frequency=1843200/Period/2;
		//printf("Period=%d\n",Period);
		//printf("Frequency=%f\n",Frequency);

	}
}




void CapInterrupt() interrupt 9
{

	EIE1&=0Xf7;  // 关PCA0中断(EIE1.3=0)
	PCA0CN&=0XFD;  //清CCF1中断标志
	CaptureFlag=1; 

	_nop_();
	//EIE1|=0X08; // 开PCA0中断(EIE1.3=1)

}

⌨️ 快捷键说明

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