/*******************************************************************************
* 本人使用的是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
}
一周热门 更多>