2019-07-15 17:17发布
Aidaohuakai 发表于 2015-5-6 23:00 把程序贴出来看看
Aidaohuakai 发表于 2015-5-7 09:44 不知道楼主为什么使用捕获模式来计数?楼主初学单片机的吧!
最多设置5个标签!
这个是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捕获不好使,求指点。
- P1M1=P1M1|0x08; //配置P1.3仅为输入口
- P1M0=P1M0&0xf7;
复制代码这是系统上电之后开机检测脉冲数,后面进入主循环后还要用他测输入脉冲频率的,那儿的延时就是让单片机在那儿等着的,等待脉冲数大于一个值。不愧是大神,被你发现了,确实是新手小白,求赐教。
一周热门 更多>