PIC16LF1618의 RC7에서 인터럽트 중 변경을 사용 중입니다.실행 런타임 중 인터럽트 변경시
void I_O_C_Initialize (void) {
INTCONbits.IOCIF = 0;
IOCCFbits.IOCCF7 = 0;
INTCONbits.IOCIE = 1;
IOCCP = 0x80;
}
내가 RC7에 긍정적 인 트리거를 이용하여 파워 다운 모드 (SLEEP)에서 PIC를 깨울 수 있어요 : 여기 I-O-C에 사용하는 초기화 비트입니다. 그러나 RC7에 대한 긍정적 인 트리거가 PIC를 재설정하고 main() 함수의 첫 번째 줄로 이동해야하는 것처럼 실행 시간 동안이 트리거를 사용할 수있게하려고합니다.
이 방법에 대해 알려주십시오.
추신 : 가능한 한 빨리 리셋해야하고 실행 시간이 중요하기 때문에 RC7에서 긍정적 인 트리거를 확인하기 위해 주 함수 내에 여러 if 문을 추가 할 수 없습니다. 따라서 지연이나 함수 루프를 실행하는 경우에도 PIC를 다시 설정하는 인터럽트 옵션을 찾고 있습니다.
덕분에 대부분의 8 비트 PIC 장치에서
예, 저는 XC8을 사용하고 있습니다. 그러면 도움이 될만한 것이 있습니까? #define RESET() asm ("reset") 메인 루프 내부 : \t // 나는 SLEEP 함수를 호출하기 때문에 일반적으로 GIE 및 PEIE 비트를 비활성화해야합니다. \t INTCONbits.GIE = 1; \t INTCONbits.PEIE = 1; SLEEP 함수 전에 : // \t SLEEP 모드 \t INTCONbits.GIE = 0에서 일어나 위해 상기 GIE 및 PEIE 비트를 비활성화; \t INTCONbits.PEIE = 0; void 인터럽트 ISR (void) { if (RC7 == 1) { \t INTCONbits.GIE = 0; \t INTCONbits.PEIE = 0; \t IOCCF = ((IOCCF^0xFF) & IOCCF); \t RESET(); } } –
@ArunKumar 그것은 이미 정의되었으므로 논리에서 당신이 필요로하는 곳이면 어디에서라도'RESET(); '을 사용하십시오 - 그 논리가 당신의 선택 일뿐입니다, 나는 당신에게 PIC의 하드웨어 리셋을 강제하는 방법을 알려줍니다 코드에서. 인터럽트에서는 관련 레지스터를 검사하여 방금 잠에서 깨어 났는지 여부를 확인할 수 있습니다. –
RESET() 잘 작동합니다. 그러나, 그것은 완전한 소프트 재부팅을하고 나는 그것을 피하고 싶습니다. ISR 인터럽트에서 main() 내의 레이블로 점프하는 방법이 있습니까? –