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

📄 sy5.bak

📁 数字频率计 c8051f单片机 使用PCA比较捕捉模块
💻 BAK
字号:
#include <c8051f000.h>

#define uchar unsigned char
#define uint unsigned int

void sysclk_init();
void port_init();
void pca_init();
void bl_init();


uchar bzw;
uchar bzw2;
uint i;						//pca计数器溢出次数
uchar cfbzw;
uchar ccf0bzw;
uchar pca0l;
uchar pca0h;
uchar pca0newl;					//第二次捕获下降沿时计数值
uchar pca0newh;
uchar pca0oldl;					//第一次捕获下降沿时计数值
uchar pca0oldh;
uint pca0old;
uint pca0new;
uint k;
float t;
uint n;
uint bi;


void main()
{
	sysclk_init();
	port_init();
	pca_init();
	EA=1;						//开总中断
	i=0;
	bl_init();
	for(;;)
	{
		if(k==0)
		{
			
			{
				pca0new=(pca0newh<<8)+pca0newl;
				pca0old=(pca0oldh<<8)+pca0oldl;
				t=(pca0new+(i*65536.0)-pca0old)/(16000000.0/12.0)/n;
				bl_init();
				bi=i;
				EA=1;
			}
		}
	}
}


void bl_init()
{
//	bzw=0;
//	bzw2=0;
//	i=0;
//	ccf0bzw=0;
//	cfbzw=0;
	n=10000;				//计n个周期
	k=n+1;
}

void sysclk_init()
{
	WDTCN=0XDE;					//关看门狗
	WDTCN=0XAD;
	OSCICN=0x07;				//内部16M时钟
}

void port_init()
{
	XBR0=0X10;					//CEX0,CEX1连接到端口
	XBR1=0X00;
	XBR2=0X40;					//交叉开关允许
	PRT0CF=0X00;				//P0口输出方式漏开
}

void pca_init()
{
	PCA0MD=0X01;				//系统时钟12分频,允许CF中断
	PCA0CPM0=0x11;				//PCA模块0下降沿触发捕捉,允许CCF0中断
	EIE1|=0X08;					//允许PCA中断
	PCA0CN=0x40;				//允许PCA计数器
}

void cf_int() interrupt 9
{
	

	if(CF)
	{
		CF=0;					//PCA中断标志清零
//		CCF0=0;
		i++;
	}
	else
	{
		CCF0=0;
		CF=0;
		ccf0bzw++;
		if(k==1)
		{
			pca0newl=PCA0CPL0;	//记下n+1次下降沿来时的计数值
			pca0newh=PCA0CPH0;
			EA=0;				//禁止中断
//			k--;				//两次计数完毕
		}
		if(k==n+1)
		{
			pca0oldl=PCA0CPL0;	//记下第一次下降沿来时的计数值
			pca0oldh=PCA0CPH0;
			i=0;
//			k--;
		}
		k--;
	}

	bzw++;
}

⌨️ 快捷键说明

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