capturetest.c
来自「C8051F020捕获测试...C8051F020捕获测试...C8051F02」· C语言 代码 · 共 86 行
C
86 行
#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 + =
减小字号Ctrl + -
显示快捷键?