STC12C5A60S2的PCA捕获功能问题

2019-07-15 17:17发布

这几天正在学习STC12C5A60S2的PCA捕获功能,我按着芯片资料的例程写的捕获程序,但是呢,没反应,进入不了PCA中断,而且捕获输入口P1.3一直为高电平,不止为何,求帮助。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
Aidaohuakai
1楼-- · 2019-07-15 18:23
把程序贴出来看看
xinghuayu
2楼-- · 2019-07-15 23:55
本帖最后由 xinghuayu 于 2015-5-7 08:46 编辑
Aidaohuakai 发表于 2015-5-6 23:00
把程序贴出来看看

这个是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捕获不好使,求指点。
xinghuayu
3楼-- · 2019-07-16 05:50
刚测了测,P1.3为低电平,原先产生脉冲的输出口接上去,脉冲就没有了,变为了低电平,断开,脉冲就又有了。
xinghuayu
4楼-- · 2019-07-16 08:08
刚又想了想,看了下数据手册,在初始化的时候将P1.3配置成输入口,加了两行代码,我昨天也用此方法试来,不过没好,今天又试,竟然好使了,嘿嘿。
  1. P1M1=P1M1|0x08;  //配置P1.3仅为输入口
  2. P1M0=P1M0&0xf7;
复制代码
Aidaohuakai
5楼-- · 2019-07-16 13:58
 精彩回答 2  元偷偷看……
xinghuayu
6楼-- · 2019-07-16 15:02
Aidaohuakai 发表于 2015-5-7 09:44
不知道楼主为什么使用捕获模式来计数?楼主初学单片机的吧!

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

一周热门 更多>