PIC18单片的外设中断引脚配置

2020-02-07 09:39发布

/*******************************************************************************
*  本人使用的是PIC18f26j50的单片机,编译器用的是XC8.
*        在网上找好久的外部中断程序,看到的都是 RB0 , RB4到RB7的引脚外部中断
*                后来发现,PIC18的外部中断的外设中断不同。想要用其他引脚必须
*                用外设中断才可以。
*        本人用的引脚是RB2/RP5映射到外部中断1上的程序。
*        仅供参照,如何有什么错误,请各位大虾指点,  邮箱:853728579@qq.com
*******************************************************************************/


# include <p18f26j50.h>


void EnableHighInterrupts(void)
{
    RPINR1 = 0x05;                //根椐不同的引脚,配置不同的I/O, RPx
    INTCONbits.GIE = 1;
    INTCONbits.PEIE = 1;        //看数据手册
    INTCON2bits.RBPU = 0;
    INTCON2bits.INTEDG1 = 1;
    INTCON3bits.INT1IP = 1;
    INTCON3bits.INT1IE = 1;
    INTCON3bits.INT1IF = 0;
}
void PortInit(void)
{
    TRISBbits.TRISB2 = 0;
    LATBbits.LATB2 = 1;
    PORTBbits.RB2 = 1;
    TRISBbits.TRISB2    = 1;
    ANCON1bits.PCFG8   = 1;
}
//根椐引脚不同有不同的设置
void LEDInit(void)
{
    LATCbits.LATC2      = 0;
    TRISCbits.TRISC2    = 0;
    ANCON1bits.PCFG11   = 1;
}

int main(void)
{
    LEDInit();
    PortInit();
    EnableHighInterrupts();

    PORTCbits.RC2 = 1;  
    while (1);

    return 0;
}


void interrupt high_ISR (void)
{
# if 1               
    if (INTCON3bits.INT1IF == 1)
    {
        INTCON3bits.INT1IF = 0;
        PORTCbits.RC2 = ~PORTCbits.RC2;
    }
# endif
# if 0
    if (INTCONbits.INT0IF == 1)
    {
        INTCONbits.INT0IF = 0;
        PORTCbits.RC2 = ~PORTCbits.RC2;
    }
# endif
# if 0
    if (INTCON3bits.INT2IF == 1)
    {
        INTCON3bits.INT2IF = 0;
        PORTCbits.RC2 = ~PORTCbits.RC2;
    }
#endif
}
0条回答

一周热门 更多>