STC12C5A60S2的PCA捕获功能问题
时间:10-02
整理:3721RD
点击:
这几天正在学习STC12C5A60S2的PCA捕获功能,我按着芯片资料的例程写的捕获程序,但是呢,没反应,进入不了PCA中断,而且捕获输入口P1.3一直为高电平,不止为何,求帮助。
这个是中断程序只用到一个模块
这个是主程序使用PCA的部分
有个指示灯,亮的话表示采集到的脉冲数大于3,没亮的话采集到的数小于3,用外部中断采集是了,可行的,但是这个PCA捕获不好使,求指点。
把程序贴出来看看
这个是PCA初始化的程序
- void pca_init() //捕获模块初始化
- {
- CCON=0;
- CMOD = 0x00; //初始化PCA模式寄存器,晶振12分频 为2MHZ
- CCAPM0=0x11; //CCAPM0下降沿捕获, 允许中断
- CL=0; //清空PCA基本计数器
- CH=0;
- CR=1; //启动PCA
- }
这个是中断程序只用到一个模块
- void PCA_interrupt (void) interrupt 7 //检测输入脉冲频率中断
- {
- if(CCF0==1)
- {
- CCF0=0;
- if(start_check==0) //如果是开机检测
- {
- CL=0; //清空PCA基本计数器
- CH=0;
- start_fre_num=start_fre_num+1; //脉冲计数标志位加1;
- }
- else //正常运行
- {
- in_f_H=CCAP0H;
- in_f_L=CCAP0L;
- }
- }
- if(CCF1==1)
- {
- CCF1=0;
- }
- if(CF==1) //计数溢出的话,清除标志位
- {
- CF = 0;
- }
- }
这个是主程序使用PCA的部分
- pca_init(); //开始捕获输入脉冲
- //IT1=1;
- //EX1=1;
- Delay_1ms(5000); //等待采集输入脉冲数
- if(start_fre_num>3) //收到的脉冲数大于3,开机正常
- {
- start_check=1; //开始正常运行
- f_led=0; //输入脉冲指示灯亮
- //EX1=0;
- }
- else //采集脉冲数不够3个
- {
- f_led=1; //脉冲输入指示灯不亮
- TR0=0; //停止输出脉冲(与PCA无关)
- }
有个指示灯,亮的话表示采集到的脉冲数大于3,没亮的话采集到的数小于3,用外部中断采集是了,可行的,但是这个PCA捕获不好使,求指点。
刚测了测,P1.3为低电平,原先产生脉冲的输出口接上去,脉冲就没有了,变为了低电平,断开,脉冲就又有了。
刚又想了想,看了下数据手册,在初始化的时候将P1.3配置成输入口,加了两行代码,我昨天也用此方法试来,不过没好,今天又试,竟然好使了,嘿嘿。
- P1M1=P1M1|0x08; //配置P1.3仅为输入口
- P1M0=P1M0&0xf7;
不知道小编为什么使用捕获模式来计数?小编初学单片机的吧!
这是系统上电之后开机检测脉冲数,后面进入主循环后还要用他测输入脉冲频率的,那儿的延时就是让单片机在那儿等着的,等待脉冲数大于一个值。不愧是大神,被你发现了,确实是新手小白,求赐教。
2个下降沿之间的时间就是周期T,频率F=1/T,你这程序测不了频率吧!
啥意思,求出周期不就能算出频率了吗?
啥意思,求出周期不就能算出频率了吗?
中断里没处理啊!中断里一直读CCAP0H,CCAP0L,好像没意义吧!CCAP0H,CCAP0L也没清零,早就溢出了
嗯,测频率的还没加呢。CCAP0H,CCAP0L是捕获的CH,CL的值,还是说将CH,CL的值加进去啊?