저는 PIC 프로그래밍을 처음 접했고 MPLAb를 사용하고 있습니다. 나는 인터럽트에 대한 질문 .. 나는 다음 버튼을 누르면 그래서 내가하고 싶은 것은, 내가 0 LED를 켜려고 있고, 내가 버튼을 놓으면 그때 나는 감각을 쓴 코드를 생각 1. LED를 켜 그러나 그것은 작동하지 않았다.PIC 프로그래밍 인터럽트 오작동.
여기 일 것입니다. 버튼을 누르면 인터럽트 핀의 초기 상태가 로우 (0)라고 가정 해 보겠습니다. 그러면 LED 0이 켜지고 버튼을 놓으면 LED 1이 켜집니다. 버튼을 다시 누르면 LED 0이 켜지지만 LED 1은 켜져 있고 절대로 상태를 변경하지 않을 것으로 예상됩니다.
나는 인터럽트 핀의 상태를 볼 수있는 마지막 줄을 추가하고, 인터럽트가 높은되면, 그것은 당신이 내 오해 뭔지를 알려 주시기 바랍니다 수 있습니다 .. 저로 변경하지?
미리 감사드립니다. 당신은 ISR 함수에서 인터럽트 플래그를 재설정해야하거나 그냥 트리거 계속됩니다
void interrupt ISR(void)
{
if(INTCONbits.INTF)
{
nextLED = 1;
LATC = Output_Code_Buffer[nextLED];
__delay_ms(250);
}
else
{
nextLED = 0;
LATC = Output_Code_Buffer[nextLED];
__delay_ms(250);
}
nextLED = INTCONbits.INTF + 2;
LATC = Output_Code_Buffer[nextLED];
__delay_ms(250);
}
// Interrupt Enable settings
INTCONbits.INTE = 1;
INTCONbits.TMR0IE = 1; // Enable TMR0 interrupts
INTCONbits.TMR0IF = 0; // Clear TMR0 interrupt flag
INTCONbits.GIE = 1; // Enable global interrupts
'__delay_ms (250)'인터럽트 hanlder에 ** 매우 ** 나쁜 생각입니다. – Olaf
긴 처리 유형의 인터럽트를 작성하면 안된다는 것을 알고 있습니다. 이 프로그램의 목적은 인터럽트가 어떻게 작동하는지 이해하려고하기 때문에 시각적 프리젠 테이션 출력 (LEDs)을 작성했습니다. 이것은 인터럽트 구동 코드이며, 주요 기능은 기본적으로 비어 있습니다. 네가 나 한테 제안 할 수 있으면 고맙겠다. –