微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STC12C5A60S2的PCA捕获功能问题

STC12C5A60S2的PCA捕获功能问题

时间:10-02 整理:3721RD 点击:
这几天正在学习STC12C5A60S2的PCA捕获功能,我按着芯片资料的例程写的捕获程序,但是呢,没反应,进入不了PCA中断,而且捕获输入口P1.3一直为高电平,不止为何,求帮助。

把程序贴出来看看

这个是PCA初始化的程序

  1. void pca_init()         //捕获模块初始化
  2. {
  3. CCON=0;
  4. CMOD = 0x00; //初始化PCA模式寄存器,晶振12分频 为2MHZ
  5. CCAPM0=0x11; //CCAPM0下降沿捕获,        允许中断
  6. CL=0;                  //清空PCA基本计数器
  7. CH=0;
  8. CR=1; //启动PCA
  9. }

复制代码


这个是中断程序只用到一个模块

  1. void PCA_interrupt (void) interrupt 7 //检测输入脉冲频率中断           
  2. {
  3. if(CCF0==1)
  4. {
  5.         CCF0=0;
  6.         if(start_check==0)   //如果是开机检测
  7.         {
  8.           CL=0;                  //清空PCA基本计数器
  9.           CH=0;
  10.           start_fre_num=start_fre_num+1;        //脉冲计数标志位加1;
  11.     }
  12.    else  //正常运行
  13.         {
  14.           in_f_H=CCAP0H;
  15.           in_f_L=CCAP0L;  
  16.         }
  17.   }
  18.   if(CCF1==1)
  19.   {
  20.      CCF1=0;
  21.   }
  22.   if(CF==1)          //计数溢出的话,清除标志位
  23.   {
  24.    CF = 0;
  25.   }
  26. }         

复制代码


这个是主程序使用PCA的部分

  1.   pca_init();      //开始捕获输入脉冲
  2.   //IT1=1;
  3.   //EX1=1;
  4.   Delay_1ms(5000);        //等待采集输入脉冲数
  5.   if(start_fre_num>3)        //收到的脉冲数大于3,开机正常
  6.   {
  7.            start_check=1;   //开始正常运行
  8.         f_led=0;        //输入脉冲指示灯亮
  9.         //EX1=0;
  10.   }
  11.   else   //采集脉冲数不够3个
  12.   {
  13.    f_led=1;          //脉冲输入指示灯不亮
  14.    TR0=0;     //停止输出脉冲(与PCA无关)
  15.   }

复制代码


有个指示灯,亮的话表示采集到的脉冲数大于3,没亮的话采集到的数小于3,用外部中断采集是了,可行的,但是这个PCA捕获不好使,求指点。

刚测了测,P1.3为低电平,原先产生脉冲的输出口接上去,脉冲就没有了,变为了低电平,断开,脉冲就又有了。

刚又想了想,看了下数据手册,在初始化的时候将P1.3配置成输入口,加了两行代码,我昨天也用此方法试来,不过没好,今天又试,竟然好使了,嘿嘿。

  1. P1M1=P1M1|0x08;  //配置P1.3仅为输入口
  2. P1M0=P1M0&0xf7;

复制代码

不知道小编为什么使用捕获模式来计数?小编初学单片机的吧!

这是系统上电之后开机检测脉冲数,后面进入主循环后还要用他测输入脉冲频率的,那儿的延时就是让单片机在那儿等着的,等待脉冲数大于一个值。不愧是大神,被你发现了,确实是新手小白,求赐教。

2个下降沿之间的时间就是周期T,频率F=1/T,你这程序测不了频率吧!

啥意思,求出周期不就能算出频率了吗?

啥意思,求出周期不就能算出频率了吗?

中断里没处理啊!中断里一直读CCAP0H,CCAP0L,好像没意义吧!CCAP0H,CCAP0L也没清零,早就溢出了

嗯,测频率的还没加呢。CCAP0H,CCAP0L是捕获的CH,CL的值,还是说将CH,CL的值加进去啊?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top