📄 capturetest.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 + -