C51语言检测脉冲个数,c51:测脉冲周期

原标题:c51:测脉冲周期

/*函数功能:测量

测量参数

t1:脉冲起始时间,

t2:脉冲结束时间

counter:TF2溢出计数

测量标志

fstart:开始测量标志,初始fstart=0,,测得t1,fstart=1。测得t1、t2,fstart=0.

fenable:允许测量标志,fenable=1表示允许测量。

初始fenable=1;

当测得t1,t2时,fenable=0,不允许测量。

当t1、t2数据处理结束,fenable=1,允许测量。

fready:测量数据准备好标志

初始fready=0;

当测得t1、t2,fready=1.

当t1、t2数据处理完成,fready=0,

*/

#include"reg52.h"

#define uchar unsigned char

#define uint unsigned int

//声明T2初始化程序

void init_timer2();

//声明变量初始化程序

void init_variable();

//声明数据处理函数

void process();

//设置变量,

uchar bdata flag; //标志

sbit fstart=flag^0;

sbit fenable=flag^1;

sbit fready=flag^2;

//设置计数器

uchar counter;

//缓存,存放脉冲起始、终止计数

uint buf1,buf2;

//定义捕获寄存器

16 RCAP2=0xca;

//脉冲周期

uint pulse;

void main()

{

init_timer2();

init_variable();

while(1)

{

if(fready==1)

{

process();

fready=0;

fenable=1;

counter=0;

}

}

}

void init_timer2()

{

//设T2初值

TL2=0;

TH2=0;

//T2捕获方式,EXEN2=1,TR2=1,CP/RL2=1

T2CON=0x0D;

//开中断

EA=1;

ET2=1;

}

void init_variable()

{

//初始化变量

flag=0;

buf1=0;

buf2=0;

counter=0;

fenable=1;

fstart=0;

fready=0;

}

//数据处理

void process()

{

pulse=counter*65536+buf2-buf1;

}

//T2 中断程序

void timer2() 5

{

//处理TF2标志

if(TF2==1)

{

TF2=0;

if(fstart==1) counter++;

}

//处理EXF2标志

if(EXF2==1)

{

EXF2=0;

if(fenable==1)

{

if(fstart==0)

{

buf1=RCAP2;

fstart=1;

}

else

{

buf2=RCAP2;

fenable=0;

fready=1;

fstart=0;

}

}

}

}

38c84c1056ff585d8439a7df425d0c34.png

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值