Download - ELET0021 - Interrupcoes No PIC
![Page 1: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/1.jpg)
UNIVASFUNIVASFMicroprocessadores e Microprocessadores e MicrocontroladoresMicrocontroladores
Prof. Rodrigo Ramos
InterrupçõesInterrupções
![Page 2: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/2.jpg)
Evento externo ao programa que provoca sua parada, verificação e tratamento do evento, após o que o programa retorna ao ponto em que havia sido interrompido.
Utilizadas para que CPU atenda eventos de alta prioridade.
Ciclo de instrução:
instrução atual é completada;
conteúdo do PC armazenado na pilha;
programa desviado para endereço conhecido como vetor de interrupções (0x0004 no PIC)
Sub-rotina no vetor de interrupções para tratamento e retorno.
Dois tipos:
Não mascarável: evento é atendido imediatamente e não pode ser desativado (mascarado);
Mascarável: evento é atendido desde não esteja desabilitado.
InterrupçõesInterrupções
![Page 3: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/3.jpg)
No PIC, só estão implementadas interrupções mascaráveis (com bit de habilitação).
Os primeiros PICs possuíam apenas quatro tipos (controladas pelo registrador INTCON):
− interrupção externa (INTF);
− int. por mudança lógica no PORTB (RBIF);
− int. do Timer 0 (T0IF);
− int. de periférico (EEPROM – EEIF, Conversor A/D – ADIF).
Com a evolução, criou-se outra arquitetura para permitir novas interrupções, mantendo INTCON (com as três primeiras) e demais chamadas de int. de periféricos:
− Reg. PIEx: controle de habilitação individual
− Reg. PIRx: sinalização dos eventos de interrupção.
InterrupçõesInterrupções
![Page 4: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/4.jpg)
PIC16F877A tem 15 interrupções distintas.
Seu funcionamento baseia-se em quatro bits (ativos nível '1'):
− GIE (Global Interrupt Enable): bit de controle geral das interrupções (“chave geral”) ;
− PEIE (Peripheral Interrupt Enable): bit de controle das interrupções de periféricos;
− Controle individual das interrupções: bit de habilitação individual (bit E);
− Sinalizador (flag) individual de interrupção: bit F, ativado pela fonte de interrupção na ocorrência de um evento.
Interrupções (cont.)Interrupções (cont.)
![Page 5: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/5.jpg)
Interrupções (cont.)Interrupções (cont.)
PIEx/PIRx INTCON
Interrupção de periféricos
![Page 6: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/6.jpg)
Ocorrência de interrupção:
− Bit F correspondente é setado;
− Se GIE = 1, endereço da próxima instrução é salvo na pilha;
− Bit GIE é ressetado;
− Programa desvia para endereço 0x0004.
− Após tratamento, uma instrução retfie fará GIE = 1 e retornará o programa para a instrução posterior à ocorrência da interrupção.
Flags são setados independentemente do bit de habilitação correspondente.
IMPORTANTE: Flag da interrupção não é ressetado, devendo ser feito pelo programador (caso contrário, pode haver loop infinito).
Interrupções (cont.)Interrupções (cont.)
![Page 7: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/7.jpg)
Rotina típica de tratamento de interrupção:
− Salvar contexto (já pronto no MPLAB);
− Verificar tipo de evento de interrupção;
− Apagar flag indicador da interrupção;
− Tratar a interrupção;
− Restaurar contexto (já pronto no MPLAB);
− Retornar da interrupção (retfie).
Recomenda-se minimizar as chamadas de subrotinas no tratamento de interrupções.
Interrupções (cont.)Interrupções (cont.)
![Page 8: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/8.jpg)
Latência de Interrupções: atraso de tempo existente entre a ocorrência de um evento e o efetivo desvio para o vetor de interrupções.
− Três ou quatro ciclos, dependendo da instrução: 2 para o próprio salto + 1 ou 2 para finalizar a instrução atual.
Interrupções (cont.)Interrupções (cont.)
![Page 9: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/9.jpg)
Registrador INTCON (espelhado):
RBIF: Interrupção por mudança do nível lógico nos pinos PORTB<7:4> (RB7 a RB4).
INTF: Interrupção externa no pino RB0/INT. Pode ser ativada na borda de subida ou descida (setando ou resetando OPTION_REG<INTEDG>).
TMR0IF: Interrupção do timer 0 (ocorre no overflow FF → 00).
Tipos de InterrupçãoTipos de Interrupção
![Page 10: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/10.jpg)
TMR1IF: Int. do Timer 1. Ocorre no overflow de 65535 para 0 (16 bits).
TMR2IF: Int. do Timer 2. Ocorre após n coincidências entre o valor da contagem e o valor do registrador PR2 (n pode ser 1, 2, 4, 8 ou 16).
CCP1IF: Int. do módulo de captura/comparação/PWM 1. Duas formas: 1) quando uma captura é realizada; 2) quando uma comparação é verdadeira.
SSPIF: Int. do modo serial síncrono. Sinaliza fim da transmissão/recepção.
TXIF: Int. de transmissão USART.
RCIF: Int. de recepção USART.
ADIF: Int. do conversor A/D. Sinaliza o fim de um ciclo de conversão.
PSPIF: Int. de escrita/leitura na porta escrava paralela. Sinaliza operação.
Tipos de Interrupção (cont.)Tipos de Interrupção (cont.)
Banco 0
Banco 1
![Page 11: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/11.jpg)
CCP1IF: Int. do módulo de captura/comparação/PWM 2.
BCLIF: Int. de colisão de barramento no modo SSP I2C Master.
EEIF: Int. de escrita na EEPROM. Sinaliza fim da escrita.
CMIF: Int. do módulo comparador analógico. Sinaliza mudança no estado de saída dos comparadores.
Tipos de Interrupção (cont.)Tipos de Interrupção (cont.)
Banco 0
Banco 1
![Page 12: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/12.jpg)
Exemplo de tratamento de interrupçãoorg 0x0004
Int:
; SALVA CONTEXTO
btfsc INTCON, INTF ; testa se ocorreu int. externa
goto Trata_INTF ; se sim, desvia para o tratamento
Fim_Int:
; RESTAURA CONTEXTO
retfie
Trata_INTF:
bcf INTCON, INTF
...
goto Fim_Int
InterrupçõesInterrupções
O retorno pode ser return, retlw ou retfie (recomendada, pois é a única que seta GIE)
![Page 13: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/13.jpg)
ExercícioExercício
Escreva um programa em assembly que acenda 4 leds na barra gráfica, cada um sendo acionada durante ~100ms com os demais apagados, quando da ocorrência de uma interrupção externa (pino RB0/INT).
Após o acionamento o programa deve aguardar por uma nova interrução.
Utilize uma rotina de atraso para gerar os 100ms.
![Page 14: ELET0021 - Interrupcoes No PIC](https://reader036.vdocuments.com.br/reader036/viewer/2022082202/5695d1451a28ab9b0295d63d/html5/thumbnails/14.jpg)
BibliografiaBibliografia
MPASM User's Guide, Microchip Technology Inc., 2005.
PIC16F87xA Data Sheet, Microchip Technology Inc., 2003.
M. Predko, “Programming and Customizing the PIC Microcontroller”, 3rd. Ed., McGraw-Hill, 2008.
F. Pereira, “Microcontroladores PIC: Técnicas Avançadas – 16F627 e 16F628”, 5a. Ed., Érica, 2008.