使用PIC18F25K80的ECCP功能和Usart2功能 单独使用都正常 两个一起工作 Usart2就进入不了中断,两个的中断都设置为低优先级中断
void CCP_Init(void)
{
T1GCON = 0x00;
T1CON = 0x24; // FOSC/4 TMR1关闭
TMR1H = 0;
TMR1L = 0; //定时器1清0
TRISBbits.TRISB4 = 1; // 设置RB4为输入,CCP1
CCP1CON = 0x05; //捕捉上升沿
CCPTMRS = 0x00; //TMR1
PIR3bits.CCP1IF = 0; //
PIE3bits.CCP1IE = 1; //使能CCP1中断
IPR3bits.CCP1IP = 1; //CCP1中断低优先
TMR1ON = 0;
TMR1ON = 1; //开TMR1
}
void USART2_Init(void)
{
BAUDCON2 = 0x08;
SPBRG2 = 0x82;
SPBRGH2 = 0x06;
TXSTA2 = 0x04;
RCSTA2 = 0x90;
PIE3bits.TX2IE = 0;
PIE3bits.RC2IE = 1;
IPR3bits.RC2IP = 0;
}
上面是配置
下面是中断程序
void interrupt low_priority low_isr()
{
unsigned char data2;
if(PIE3bits.RC2IE && PIR3bits.RC2IF)
{
PIR3bits.RC2IF = 0;
data2 = RCREG2;
UsartCmd_** = Usart_Cmd(data2);
}
// if(PIE3bits.CCP1IE && PIR3bits.CCP1IF)
// {
// PIR3bits.CCP1IF = 0;
// if((CCP1CON & 0x01)==1)
// {
// CCP1CON = 0x04;
//
// TMR1ON = 0;
// CP_HF = TMR1H;
// CP_LF = TMR1L;
// CP_H[CP_Sum] = CP_HF *256 + CP_LF;
//
// TMR1H = 0;
// TMR1L = 0; //定时器1清0
//
// TMR1ON = 1; //开TMR1
//
//
// }
// else
// {
// CCP1CON = 0x05;
//
// TMR1ON = 0;
// CP_HF = TMR1H;
// CP_LF = TMR1L;
//
// CP_L[CP_Sum] = CP_HF *256 + CP_LF;
// TMR1H = 0;
// TMR1L = 0; //定时器1清0
// TMR1ON = 1;
//
// CP_Sum++;
// if(CP_Sum>9)
// CP_Sum = 0;
// }
// }
希望大神能指点一下 |