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