搜索
bottom↓
回复: 2

ccp1捕捉一直不正确,帮忙看一下

[复制链接]

出0入0汤圆

发表于 2009-11-20 18:18:04 | 显示全部楼层 |阅读模式
刚学pic,用ccp1捕捉模块的时候一直不正确,大家帮忙看看哪错了

谢谢

#include<p18f4520.h>

unsigned        char        CCP1_Count=0;        // CCP1捕捉个数计数(>1清0)
unsigned        int        CCPRE[2];                   // CCP1捕捉的2个脉冲的计数值
const rom unsigned char SZ[17]={0x3f  , 0x06 , 0x5b , 0x4f , 0x66 ,
                         0x6d ,0x7d , 0x07 , 0x7f  , 0x6f , 0x77 , 0x7c ,
                         0x39 , 0x5e , 0x79 , 0x71 , 0x00};
void ccp1(void);
void ccp1_captuer_init(void)
{
        TRISCbits.TRISC2=1;
        CCP1CON=0x05;/* 设置CCP1模块为捕捉方式,捕捉第1个脉冲上升沿 */
        T3CON=0x00;//TMER1 IS THE CLOCK
        T1CON=0x30;//tmr1一次对16位操作,
        RCONbits.IPEN=1;//开优先级
        PIR1bits.CCP1IF=0;//清除ccp1中断标志
        PIE1bits.TMR1IE=0;//关tmr1中断
        PIE1bits.CCP1IE=1;/* CCP1捕捉中断使能 */
        IPR1bits.CCP1IP=0;//低优先级
        TMR1H=0;
        TMR1L=0;
        CCPR1H=0;
        CCPR1L=0;
        ADCON1=0xff;

        INTCONbits.GIE=1;//开全局中断
        INTCONbits.GIEL=1;
}

void ccp1(void);
#pragma code ccp1_duan=0x18
void ccp1_rukou(void)
{
        _asm
        goto ccp1
        _endasm;
}
#pragma code

#pragma interruptlow ccp1

void ccp1(void)
{
        CCPRE[CCP1_Count]=CCPR1L+(CCPR1H<<8);/* 记下16位捕捉值到存放捕捉数组 */
        CCP1_Count=CCP1_Count+1;        /* 捕捉次数加1 */
               
        if(CCP1_Count>1)
        {
                CCP1_Count=0;                        /* 本程序只存放2次捕捉值 */
                PIE1bits.CCP1IE=0;/* 关CCP1捕捉中断使能 */
                T1CONbits.TMR1ON=0;//关定时器
        }
        PIR1bits.CCP1IF=0;//清除ccp1中断标志
}

void delay(void)
{
        unsigned int i;
        for(i=0;i<100;i++);
}

void main(void)
{
        unsigned int j;
        unsigned char a,b,c,d,e;
        ccp1_captuer_init();
        T1CONbits.TMR1ON=1;//开定时器
        while(1)
        {
                j=CCPRE[1]-CCPRE[0];
                a=j/10000;
                b=(j%10000)/1000;
                c=(j%1000)/100;
                d=(j%100)/10;
                e=j%10;
                TRISD=0;
                TRISA=0;
                PORTA=0xff;       
               
                PORTD=SZ[a];
                PORTAbits.RA0=0;
                delay();
                PORTAbits.RA0=1;
               
                PORTD=SZ;
                PORTAbits.RA1=0;
                delay();
                PORTAbits.RA1=1;
               
                PORTD=SZ[c];
                PORTAbits.RA2=0;
                delay();
                PORTAbits.RA2=1;
               
                PORTD=SZ[d];
                PORTAbits.RA3=0;
                delay();
                PORTAbits.RA3=1;
               
                PORTD=SZ[e];
                PORTAbits.RA4=0;
                delay();
                PORTAbits.RA4=1;
        }
}

出0入0汤圆

发表于 2009-11-30 10:13:00 | 显示全部楼层
CCPRE[CCP1_Count]=CCPR1L+(CCPR1H<<8);这里直接让CCPR1H左移8位是不是就是直接让CCPRIH清空了!

出0入0汤圆

发表于 2009-11-30 10:34:54 | 显示全部楼层
【1楼】 liansh
CCPRE[CCP1_Count]=CCPR1L+(CCPR1H<<8);这里直接让CCPR1H左移8位是不是就是直接让CCPRIH清空了!
------------------------------------------------------------------------------------------------
不会,ccpre是int型
不过是不是该用 CCPR1L|(CCPR1H<<8) 啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 11:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表