我用的电路是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; //
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>