打印

CCP一直进中断,求求大家帮我看看程序,很短谢谢

[复制链接]
1467|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hpfily|  楼主 | 2013-3-8 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, TE, ps, Time1, ck
本帖最后由 hpfily 于 2013-3-8 15:34 编辑

这是个计算脉冲高电平宽度的程序


#include "pic.h"
int time1,time2;
int i;

void ccp(void)
{
        
        CCP1IF=0;
        CCP1IE=1;
        T1CKPS1=0;
        T1CKPS0=0;
        T1OSCEN=0;

    //上升沿
        CCP1M3=0;
        CCP1M2=1;
        CCP1M1=0;
        CCP1M0=1;

        TMR1CS=0;
        
        TMR1ON=1;
        PEIE=1;
        GIE=1;
}
void interrupt CCP1INT(void)
{
        if(CCP1IF)
        {
                CCP1IF=0;
                if(CCP1M0==1) //如果是上升沿
                {
                unsigned int temp=0;
               
                temp=CCPR1H;
                time1=(temp<<8)+CCPR1L;
                CCP1M0=0; //改成下降沿
                return;
                }
                else //下降沿
                {
                        unsigned int temp=0;
                        temp=CCPR1H;
                        time2=(temp<<8)+CCPR1L;
                        CCP1M0=1; //继续改成上升沿
                        i=time2-time1;
                        CCP1IE=0;
                        CCPR1H=CCPR1L=0;
                }
               
        }
        else
        {
                TMR1IF=0;
        }


}


void main()
{
        
        TRISC=0xff;
        time1=0;
        time2=0;
        TRISD=0x00;
        PORTD=0x00;
        ccp();
        while(1)
        {CCP1IE=1;}
        
        
}
沙发
兰天白云| | 2013-3-8 15:44 | 只看该作者
至少以下几项不合适
1: if(CCP1IF)
2:while(1)
        {CCP1IE=1;}
3:外部的CCP信号是否一直有,有的话当然要进中断,除非你禁止CCP中断,你可以在CCP中断服务程序中禁止CCP中断,然后看看还会不会一直CCP中断

使用特权

评论回复
板凳
hpfily|  楼主 | 2013-3-8 16:02 | 只看该作者
兰天白云 发表于 2013-3-8 15:44
至少以下几项不合适
1: if(CCP1IF)
2:while(1)

谢谢斑竹大大

2 中while(1)一直开中断,是因为我在中断中把CCP1IE关掉了。

3 外部我给的是一个周期的方波信号,用来测量方波的宽度。

我想问我用的是protues的单步调试,测出高低电平的值,无论外部的方波的频率,测量值一直是在40-50us之间,单步调试中程序也是偶尔才退出中断,返回while循环,这个让我很是不解

使用特权

评论回复
地板
hpfily|  楼主 | 2013-3-8 16:05 | 只看该作者
兰天白云 发表于 2013-3-8 15:44
至少以下几项不合适
1: if(CCP1IF)
2:while(1)

2 中断中我把CCP关掉了,所以在循环中打开;

3 我用protues的单步调试中,无论我的外部产生的方波频率大小,程序测量出的高电平宽度都是在40-50us之间,单步调试中程序在走完中断,还是会连续进入中断,偶尔才返回while循环

使用特权

评论回复
5
兰天白云| | 2013-3-8 16:08 | 只看该作者
protues调试从没用过,如果外部方波频率很高,你启动后自然还会再进中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

36

帖子

0

粉丝