?? pca_capture.c
字號:
/*===============================================================*/
/*函數名稱: PCA_Capture.c */
/*函數功能: 主函數,調用各模塊 */
/*基本思想: 正負邊沿均捕捉脈沖 */
/*修改記錄: 無修改記錄 */
/*編寫作者: t483-4-19chenyong */
/*編寫日期: 2007-4-14 */
/*===============================================================*/
#include"common.h"
#include"PCA.h"
#include<math.h>
xdata uint PCA0_Value[12],i;
xdata ulong sum0,sum1,x,y;
uchar number=0;
float value;
bit isnewdata;
/*===============================================================*/
/* 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()
{
//把捕捉端口配置到P0.0
if(isnewdata) //捕捉十次
{
isnewdata=0;
if(number>=12)
{
sum0=PCA0_Value[1]+PCA0_Value[3]+PCA0_Value[5]+PCA0_Value[7]+PCA0_Value[9];
sum1=PCA0_Value[2]+PCA0_Value[4]+PCA0_Value[6]+PCA0_Value[8]+PCA0_Value[10];
if(sum0<sum1)
{
value=sum0;
value=(float)value*0.2;
value=(float)value/3.999892398;
}
else
{
value=sum1;
value=(float)value*0.2;
value=(float)value/3.999892398;
}
// value=sum0<sum1? x:y;
// value=sum;
// value=(float)value*0.2;
// value=(float)value/3.999892398;
number=0;
}
}
return(value);
}
/*
捕捉思想:在中斷程序中放個靜態變量,電平的跳變間隔就是當前的捕捉值與上次捕捉
值之差。
*/
void PCA_ISR(void) interrupt 9 using 1
{
static xdata uint temp_count=0;
if(CCF0)
{
PCA0_Value[number] = PCA0CPL0+PCA0CPH0*256-temp_count;
temp_count = PCA0CPL0+PCA0CPH0*256;
number++;
CCF0=0;
}
isnewdata=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -