Curso Básico - Microcontrolador PIC - Parte 4

Interrupções

O PIC 16F628A tem 10 fontes de interrupção:

  • Externa através do pino RB0/INT;

  • Mudanças de estados nos pinos 7 até 4 do PORTB;

  • Estouro do Timer 0;

  • Estouro do Timer 1;

  • Coincidência no Timer 2;

  • Comparador;

  • Módulo CCP;

  • Transmissão na USART;

  • Recepção na USART;

  • EEPROM;

TODAS APONTAM PARA O MESMO ENDEREÇO DE PROGRAMA!!!!!!!!

ORG 0x0004

E funcionam de acordo com a lógica mostrada na figura a seguir.

Lógica das interrupções no PIC

Os tempos para responder a uma interrupção são mostrados no gráfico abaixo:

Timing das interrupções no PIC

Estrutura de tratamento de interrupções

Ao acontecer uma interrupção, o valor do Program Counter (PC) é automaticamente salvo na pilha (STACK). Mas APENAS ISSO é salvo automaticamente. O restante dos registradores SFR ou GPR e o WREG NÃO SÃO SALVOS automaticamente.

Antes de atender a interrupção que solicitou a parada no fluxo do programa, sua rotina de tratamento de interrupção deve prever o salvamento de todos os registradores que você julgar necessário, sendo obrigatório o salvamento dos SFR STATUS e WREG.

Após salvar os registradores, a interrupção é tratada e ao término desta atividade os registradores devem ser recuperados, ou seja, as informações que foram salvas devem voltar para seus devidos lugares.

Só após a recuperação do contexto é que se deve utilizar o comando RETFIE para sair da interrupção.

Como saber quem interrompeu o uC?

Veja que TODAS as 10 interrupções do PIC16F628A apontam para o mesmo endereço! Como saber quem foi que gerou uma interrupção, quando eu tenho mais de uma interrupção habilitada?

Basta testar as FLAGS de interrupção, como no exemplo a seguir.

Veja as questões de prioridade de interrupção e o que acontece quando se está tratando uma interrupção e outra interrupção também acontece, ao mesmo tempo.

Para entender isto, de uma olhada na página 135 do Livro Desbravando o PIC, onde é apresentado um fluxo do funcionamento interno do hardware quando acontece uma interrupção.

OPCODE

COMENTÁRIO

  

ORG 0x0004

 
  

SALVA_CONTEXTO

 
  

MOVWF W_TEMP

;Salva o WREG no W_TEMP

SWAPF STATUS,W

;Salva o STATUS no STATUS_TEMP. Note que a operação

MOVWF STATUS_TEMP

;SWAPF não altera os FLAGS, por isso é utilizada

  

TESTA_INTERRUPÇÃO

 
  

BTFSS INTCON,T0IF

;Testa se essa é a FLAG que acionou a interrupção

GOTO RECUPERA

;Se não for sai da interrupção ou vai para próximo teste

BCF INTCON,T0IF

;Limpa a FLAG de interrupção antes de qualquer coisa

..................

;Faz o tratamento da interrupção

  

RECUPERA

 
  

SWAPF STATUS_TEMP,W

;Recupera o valor do STATUS

MOVWF STATUS

 

SWAPF W_TEMP,F

;Recupera o valor do WREG

SWAPF W_TEMP,W

 

RETFIE

;Sai da interrupção

No próximo artigo aprenderemos um pouco sobre temporizadores e watchdog no PIC. Aguardem!

Saiba mais

Curso de C com microcontroladores MCF51QE128 e MC9S08QE128 - Parte 1

PIC na IoT com ESP8266 e ThingSpeak

Microchip - Microcontroladores PIC de 8 bits

Outros artigos da série

<< Curso Básico - Microcontrolador PIC - Parte 3Curso Básico - Microcontrolador PIC - Parte 5 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Hardware » Sistemas Digitais » Curso Básico - Microcontrolador PIC - Parte 4
Talvez você goste:
Comentários:

Deixe um comentário

avatar
  Notificações  
Notificar

Séries



Outros da Série

Menu