高手请帮看看,触摸按键检测电路为什么不工作

2020-02-08 09:05发布

我用的电路是PIC16F1824,片内4M,用T0定时,T1对电容传感振荡器计数。T0T1测试过能正常工作,当T1计数源选系统时钟时能计到数,计数源选电容传感振荡器时计不到数,请帮看看问题出在哪里?初步判断是电容传感振荡器没有工作。以下是初始化和测量程序:

//*********************************************************
//名称:端口初始化程序
//备注:1、初始化A:RA0,RA1,RA2为数字输出口,RA4模拟(AD)口
//                2、初始化C:RC0,1,2,3为模拟口,RC4,5为数字输入口(TX,RX)
//                3、端口初始状态:RC4(TXD)开始时为低
//                4、RC0=CPS4,RC1=CPS5,RC2=CPS6;RC3=AN7(AD)
//                5、串口:RC4=TX,RC5=RX
//*********************************************************
void port_init()//端口初始化
{         
        APFCON0                =0;        //串口:RC4=TX,RC5=RX
       
        TRISA         = 0xF8;        //I/O方向控制,RA0,RA1,RA2为输出
        PORTA        = 0x07;        //RA0,RA1,RA2输出“1”     
        ANSELA        = 0x10;        //只有RA4为模拟I/O
       
        TRISC        = 0x0F;        //All input仅RC4为输出(TXD)
        ANSELC        = 0x0F;        //RC0,1,2,3为模拟口,其他数字口
        PORTC        = 0x00;        //
}//*********************************************************
//名称:系统初始化程序
//备注:1、初始化片内时钟:4M
//         2、高阈值:FVR=4.096V
//         3、低阈值:DAC=1.024V
//*********************************************************
void sys_init(void)
{
        OSCCON          = 0xEA; // 11101010使用内部时钟:4 MHz
        FVRCON                = 0xFF;        //高阈值:FVR=4.096V
        DACCON0                = 0xC8;        //使能,正参考电压,输入电压:FVR缓冲区,VSS负参考
        DACCON1                = 0x08;        //低阈值:DAC=1.024V
        CPSCON1                = 0x04;
        CPSCON0                = 0x8c;        //
}
//*********************************************************
//名称:T0T1初始化程序
//备注:1、T0采样定时(32ms)
//         2、T1对电容振荡器计数
//*********************************************************
void init_T0T1(void)
{
        OPTION_REG        = 0x06;        //T0定时周期32ms
        TMR0IF        = 0;
        TMR0IE        = 1;
        T1CON        = 0xC4;       
        T1GCON        = 0xe1;
        TMR1GIF        = 0;
        TMR1GIE = 1;
        GIE = 1;
}
//*********************************************************
//名称:通道测试程序
//备注:1、通道选择参数:ch
//         2、测试许可标志:T_flag==1
//         3、确定通道,使能T1计数
//*********************************************************
void cap_ch(void)
{
        if(T_flag==1)                //满足条件时开始测试
        {
                T_flag++;
                TMR0        =0;                //清T0
                TMR1H        =0;                //清T1
                TMR1L        =8;       
                CPSCON1        =ch+4;        //CPS4,5,6
                TMR1ON         =1;        //
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。