elet0021 - interrupcoes no pic

Post on 30-Jan-2016

263 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Apostila PIC 16F877A

TRANSCRIPT

UNIVASFUNIVASFMicroprocessadores e Microprocessadores e MicrocontroladoresMicrocontroladores

Prof. Rodrigo Ramos

godoga@gmail.com

InterrupçõesInterrupções

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

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

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.)

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

PIEx/PIRx INTCON

Interrupção de periféricos

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.)

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.)

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.)

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

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

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

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)

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.

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.

top related