Interrupção Pic 16F628A

Ola a todos, preciso aprender como fazer interrupçao nesse pic, mas ja tentei sozinho e nao consegui, procurei internet afora e nao encontrei nada esclarecedor, acabei de entrar no forum, gostaria da ajuda de vcs, desde ja obrigado.
Vou colocar o q eu fiz pra tentar mostrar o q eu preciso:
cpp code
Só q o delay ficou muito como gambiarra, é onde eu precisava da interrupçao...
Vou colocar o q eu fiz pra tentar mostrar o q eu preciso:
cpp code
#include <16F628A.h>
#FUSES NOWDT //Sem Timer Cão de Guarda
#FUSES INTRC_IO //Oscilador Interno e dois pinos de I/O liberados
#FUSES NOPUT //Sem timer de alimentação
#FUSES NOPROTECT //Epprom desprotegida (permite a leitura)
#FUSES NOBROWNOUT //Brownout desabilitado
#FUSES NOMCLR //Pino Master Clear habilitado como porta I/O
#FUSES NOLVP //Programação em baixa tensão desabilitada
#FUSES NOCPD //Código desprotegido (permite a leitura)
//A frequencia do Clock Interno é de 1Mhz
//A sentença abaixo informa ao compilador essa frequencia para que este
//calcule corretamente os delays em mili-segundos
#use delay(clock=4000000)
#define PINO_LED PIN_A3 //Define em qual pino o LED está ligado
void main() {
int temp = 0, temp1 = 0, init = 1, blk = 0;
enable_interrupts(INT_EXT);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
output_high(PIN_A3);
while (TRUE) {
if (init == 1) {
if(input(PIN_B0)){
init=0;
output_high(PIN_A3);
delay_ms(1);
}
if (temp1 == 480) {
output_low(PIN_A3);
init = 0;
temp1 = 0;
}
delay_ms(125);
temp1++;
delay_ms(1);
}
delay_ms(1);
if (input(PIN_B0)) {
output_high(PIN_A3);
delay_ms(1); // Liga o Led
}
if (blk == 1) {
goto rotblk;
}
if (input(PIN_B1)) {
blk = 1;
rotblk:
if (temp <= 480) {
if (temp == 480) {
output_low(PIN_A3);
blk = 0;
temp = 0;
}
delay_ms(125);
temp++;
delay_ms(1);
}
}
delay_ms(1);
}
}
Só q o delay ficou muito como gambiarra, é onde eu precisava da interrupçao...