10385|3

40

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

stc12c5a60s2单片机 捕获模式 测频率的问题 求助各位老师 [复制链接]

我用的是stc12c5a60s2   用捕获模式测量方波频率   希望测几十hz到十几khz的频率   我写了一段程序  但是真的不知道问题出在哪  希望老师能帮我看看 我的问题出在哪里  先跪谢了。。。
/**********************************************************PCA初始化函数**************************************************************************/
//pwm模块初始化,并开启中断

void pca1_init()
{
  CMOD=0x80;     //  系统时钟12分频   小周期为1us  不允许溢出中断
  CCON=0;     //各个标志位清零(CR,CF溢出标志,CFFn捕获标志)
  CCAPM1=0x21;   //  设置为16位CEXn上升沿触发捕捉功能 并开启捕捉中断
  CCAP1L=0;
  CCAP1H=0;   //捕捉寄存器清零
  CL=0;CH=0; //计时器清零
}
/*****************************************************     中断服务程序   ***************************************************************************/
void pca_intr(void) interrupt 7  //中断服务程序
{  if(CCF1)
   {   CCF1=0; //清楚标志位
       if(capture1==0) //判断是否首个上升沿
    {   capture1=CCAP1H;
       capture1=(capture1<<8)+CCAP1L;   //将首次捕获值装入capture1中
     }
    else   //若是第二个上升沿
    {
         capture2=CCAP1H;
      capture2=(capture2<<8)+CCAP1L; //将第二次捕获值装入capture2中
      CCAP1L=CCAP1H=0; // 清零捕获寄存器
      CL=CH=0;    //计时器清零
      CR=0;     //关闭计时器
      EA=0;                 //关闭中断
      capture_ok=1;
    }
   }
}
/*****************************************************************  主函数  ****************************************/
void main()
{
   P1_6=1;P1_7=1;

   
  while(1)
   {   
       if(P1_6==0)          // P1.6作为初始化控制键
           {   
        delay(50);  //消抖动
        if(P1_6==0)
    {
       capture_ok=0; // 捕获完成标志位清零
       pca1_init(); // 开启捕获中断CCAPM0
                EA=1;            //允许中断
          CR=1;   // 开启PCA定时器
     }     
      }
   
  if(capture_ok)
      {
        capture_ok=0;
     period=capture2-capture1; //计算一个脉冲周期共计数多少次
        frequency=1000000/period;  // 计算频率
        
     led_display(frequency);   //调用显示函数
    }
    }

}
此帖出自单片机论坛

最新回复

你是要让程序一直测量还是只测量一次,要是一直测量, CR=0;     //关闭计时器       EA=0;                 //关闭中断;这两句关了没再打开,程序就停了。我不知道你是不是这个问题  详情 回复 发表于 2015-1-25 23:15
点赞 关注
 

回复
举报

138

帖子

0

TA的资源

五彩晶圆(初级)

推荐
 
你的变量定义的何种数据类型?有没有溢出?另外使用串口随时输出几个标志位,以及捕获的值,能帮助你快速定位问题出在哪里。
此帖出自单片机论坛
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
CR=0;     //关闭计时器       EA=0;                 //关闭中断
此帖出自单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 
你是要让程序一直测量还是只测量一次,要是一直测量, CR=0;     //关闭计时器       EA=0;                 //关闭中断;这两句关了没再打开,程序就停了。我不知道你是不是这个问题
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【有奖直播】2025是德科技数字月-数字新品来助阵
直播时间:3月19日(周三)14:00
直播奖励:小米口红充电宝、倍思充电线、是德科技十周年鼠标垫

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表