📄 startcount.c
字号:
/*===============================================================*/
/*函数名称: startCount.c */
/*函数功能: 对frenum个脉冲进行计时 */
/*入口参数: val-----------------------------------所计的脉冲数目*/
/*函数说明: T4被配置在P0.0口上面,加外部脉冲时最好加个3 k的上拉电阻
*/
/*修改记录: 无修改记录 */
/*编写作者: t483-4-19chenyong */
/*编写日期: 2007-4-06 */
/*===============================================================*/
#include"common.h"
extern ulong freTime;
extern bit isnewdata;
uchar tf2num;
//bit isfilter;
/*================================================================*/
/*开始计时 */
/*================================================================*/
void startCount(uint val)
{
// T4_Setvalue(1);
// while(!isfilter); //等待上升沿的到来
T4_Setvalue(val); //设定要计数的脉冲个数
T4CON|=0x04;
tf2num=0;
T2_Start();
isnewdata=0;
}
/*================================================================*/
/*计数器初始化说明: 计数器工作在自动重载模式下,采用系统时钟12分频
中断益处时需要软件对标志位清0,但是不能位寻址,只
能进行字操作.计数时,不需时钟设置.
C/T2(计数模式)--------------------------------1
CP/RL4(自动重载)------------------------------0
*/
/*================================================================*/
void T4_Initial() //T4为计数模式
{
T4CON=0X02; //CT4=1,T4为计数器模式,下降沿触发加1
EIE2|=0X04; //T4中断使能
}
/*================================================================*/
/*定时器2初始化说明:定时器2工作在自动重载模式下,采用系统时钟12分频
中断益处时需要软件对标志位清0,
C/T2(定时器模式)------------------------------0
CP/RL2(自动重载)------------------------------0
T2M(系统时钟12分频)---------------------------0
*/
/*================================================================*/
void T2_Initial() //t2为定时器模式,采用系统时钟12分频
{
T2CON=0X00; //定时器模式,自动重载
CKCON=0x00; //采用系统时钟12分频
RCAP2H=0x00;
RCAP2L=0x00;
TH2=0x00;
TL2=0x00; //定时初始化
IE|=0X20; //T2中断使能
}
/*================================================================*/
/*定时器2开始工作 */
/*================================================================*/
void T2_Start()
{
TH2=0x00;
TL2=0x00;
TF2=0;
TR2=1; //启动定时器
}
/*================================================================*/
/*设置计数器要计的脉冲数 */
/*================================================================*/
void T4_Setvalue(uint val)
{
RCAP4H=(~val+1)/256;
RCAP4L=(~val+1)%256;
TH4=RCAP4H;
TL4=RCAP4L; //装载初始值
}
/*================================================================*/
/*中断服务函数 */
/*================================================================*/
void T2_Service() interrupt 5
{ //T2定时溢出处理
TF2=0;
tf2num++;
}
void T4_Service() interrupt 16
{
//frenum个频率计满,产生T4中断
TR2=0;
freTime=256*TH2+TL2; //计算所用时间
T4CON=0x00; //关闭计数器
isnewdata=1;
// isfilter=1;
freTime+=65536L*tf2num; //需要加上T2的溢出时间
freTime=freTime*0.344140206;
//0.3441402此数据为经验值,对50个数据处理的结果
}
/*=============================end=================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -