elet0021 - interrupcoes no pic

14
UNIVASF UNIVASF Microprocessadores e Microprocessadores e Microcontroladores Microcontroladores Prof. Rodrigo Ramos [email protected] Interrupções Interrupções

Upload: ramon-luiz-santos-goncalves

Post on 30-Jan-2016

263 views

Category:

Documents


1 download

DESCRIPTION

Apostila PIC 16F877A

TRANSCRIPT

Page 1: ELET0021 - Interrupcoes No PIC

UNIVASFUNIVASFMicroprocessadores e Microprocessadores e MicrocontroladoresMicrocontroladores

Prof. Rodrigo Ramos

[email protected]

InterrupçõesInterrupções

Page 2: ELET0021 - Interrupcoes No PIC

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

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

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

Interrupções (cont.)Interrupções (cont.)

PIEx/PIRx INTCON

Interrupção de periféricos

Page 6: ELET0021 - Interrupcoes No PIC

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

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

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

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

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

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

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

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

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.