CCP比较模式启动后不能产生一个CCP1F的中断,,如果改变CCP1L、CCP1H值时同样输出一样的脉冲,这是啥回事?调试时用PIC18F4520 程序如下:
#pragma interruptlow CCP1_isr
void CCP1_isr(void){
PIR1bits.CCP1IF=0;
PORTDbits.RD2=~PORTDbits.RD2;
}
#pragma code
void main(void){
ClrWdt();
init();
while(1){
ClrWdt();
}
}
//*****************************************
// init
//*****************************************
void init(void){
PORTA=0;
LATA=0;
ADCON1=0X0F;
CMCON=0X07;
TRISA=0x04;
PORTA=0;
LATB=0;
TRISB=0Xc3;
PORTB=0x00;
LATC=0;
TRISC=0X00;
PORTC=0x00;
LATD=0;
TRISD=0X80;
PORTD=0x80;
LATE=0;
TRISE=0X00;
PORTE=0;
TRISCbits.TRISC2= 0; //设定RC2为输出
LATCbits.LATC2 = 0; //CCP1引脚置低位
TRISB = 0;//PB.0-.7口作输出
CCP1CON = 0x02;//CCP1比较模式,
//0x02电平翻转,0x0a软件中断,0x0b特殊事件触发
INTCONbits.GIE = 1;//全局中断打开
INTCONbits.PEIE=1;//外围设备中断打开
PIE2bits.TMR3IE=1;//定时器3中断打开
PIR2bits.TMR3IF=0;//定时器3溢出标志
IPR2bits.TMR3IP = 0;//定时器3溢出中断优先级为高中断
CCPR1H=0x53;//高8位初值
CCPR1L=0xe8;//低8位初值
PIE1bits.CCP1IE=1;//CCP1中断打开
PIR1bits.CCP1IF=0;//CCP1溢出标志
IPR1bits.CCP1IP = 1;//CCP1溢出中断优先级为高中断
T3CONbits.RD16 = 0;//关闭定时器3的16位读写
T3CONbits.T3CCP2 = 1;//定时器3是CCP1的时钟源
T3CONbits.T3CKPS1 = 0;//分频1:1
T3CONbits.T3CKPS0 = 0;
T3CONbits.T3CCP1 = 0;//定时器3是CCP1的时钟源
T3CONbits.TMR3CS = 0;//定时器3选择定时方式
T3CONbits.T3SYNC = 0;//无效
T3CONbits.TMR3ON = 1;//打开定时器3
} |