Post on 24-Feb-2023
transcript
Roteiro
InterrupçõesInterrupçõesIntroduçãoRegistradoresRegistradoresContexto da aplicaçãoFontes de interrupçõesFontes de interrupções
2 Saulo O. D. Luiz
Interrupções
Permitem que o microcontrolador responda a eventos quando eles ocorremresponda a eventos quando eles ocorremPara atender a um evento, o
i t l d tmicrocontrolador executa um subprograma: a rotina de atendimento de i t ãinterrupção
3 Saulo O. D. Luiz
Interrupções
Exemplo de interrupção externa14 f t d i t ã14 fontes de interrupçãoHabilitação: registradores INTCON, PIE1 e PIE2PIE2GIE (bit 7, registrador INTCON)
habilita a CPU a receber req isições dehabilita a CPU a receber requisições de interrupção
bit de habilitação individual da interrupçãobit de habilitação individual da interrupçãobit de flag
sinaliza a ocorrência do evento associado a
4 Saulo O. D. Luiz
sinaliza a ocorrência do evento associado a interrupção
Interrupções
Condição para solicitação de uma interrupção:interrupção:
Habilitação simultânea deGIEGIEbit de habilitação individual da interrupçãobit de flagbit de flag
5 Saulo O. D. Luiz
Interrupções
família PIC 16F87x 14 f t d i t ã14 fontes de interrupçãoPrograma
sendoexecutado
6 Saulo O. D. Luiz
Registrador INTCON
Endereço 0x0BC t bit d h bilit ã dContem os bits de habilitação das interrupções
9 Saulo O. D. Luiz
Registrador INTCON
Bit 0 RBIF (flag que indica variação na porta B): Bit que informa que houve mudança nos níveis lógicos nos pinos 4 5 6 ou 7 da porta Bhouve mudança nos níveis lógicos nos pinos 4, 5, 6 ou 7 da porta B.1= pelo menos um destes pinos mudou de nível lógico0= não ocorreu nenhuma variação nestes pinos
Bit 1 INTF (flag de interrupção externa INT): Ocorrência de uma interrupção externa 1= ocorreu uma interrupção externa
10 Saulo O. D. Luiz
0= não ocorreu uma interrupção externa
Registrador INTCON
Bit 2 TOIF (Flag de interrupção por transbordo de TMR0): O contador TMR0, transbordou.1= o contador mudou a contagem de FFh para 00h0= o contador não transbordouPara que esta interrupção seja detectada, o programa deve resetar este bit.
Bit 3 RBIE (bit de habilitação de interrupção por variação na porta B): Habilitação da interrupção por variação dos níveis lógicos nos pinos 4, 5, 6 e 7 da porta B.1= habilita a interrupção por variação dos níveis lógicos0= inibe a interrupção por variação dos níveis lógicos
11 Saulo O. D. Luiz
A interrupção só pode ocorrer se RBIE e RBIF estiverem simultaneamente em ‘1’ lógico.
Registrador INTCON
Bit 4 INTE (bit de habilitação da interrupção externa INT): Bit que habilita uma interrupção externa no bit RB0/INT.1= interrupção externa habilitada0= interrupção externa desabilitadaA interrupção só pode ocorrer se INTE e INTF estiverem simultaneamente em‘1’ lógico.
Bit 5 TOIE (bit de habilitação de interrupção por transbordo de TMR0): Bit que habilita a interrupção por transbordo do contador TMR0.1= interrupção habilitada0= interrupção desabilitada
12 Saulo O. D. Luiz
A interrupção só pode ocorrer se TOIE e TOIF estiverem simultaneamente em ‘1’ lógico.
Registrador INTCON
Bit 6 PEIE (bit de habilitação de interrupção dos periféricos): Bit que habilita as interrupções geradas pelos periféricos.g1= habilita todas as interrupções dos periféricos0= desabilita todas as interrupções dos periféricos
Bit 7 GIE (bit de habilitação global de interrupção): Bit que habilita ou desabilita todas as interrupções. 1= todas as interrupções são permitidas0= todas as interrupções impedidasGIE permite que a execução de uma parte crítica do programa não seja interrompida por
13 Saulo O. D. Luiz
uma interrupção
Registrador PIE1
Endereço 0x8CC t bit d h bilit ã dContem os bits de habilitação das interrupções de periféricos
14 Saulo O. D. Luiz
Registrador PIE1
Bit 0 (bit TMR1IE, habilitação da interrupção do TMR1) – Este bit habilita a interrupção gerada quando ocorre um “overflow” no contador do Timer 1, TMR1 ou seja quando o contador conta de FFFFh para 0000hTMR1, ou seja, quando o contador conta de FFFFh para 0000h. 1= habilita interrupção0= desabilita interrupçãoBit 1 (bit TMR2IE, habilitação da interrupção do TMR2) – Este bit habilita a interrupção gerada quando os valores do contador do Timer 2, TMR2 e o valor do registrador PR2 coincidem 1= habilita interrupção0= desabilita interrupção
15 Saulo O. D. Luiz
0= desabilita interrupção
Registrador PIE1
Bit 2 (bit CCP1IE, habilitação da interrupção do bloco CCP1) – Este bit habilita a interrupção gerada por um evento de Capture ou Compare do bloco CCP1CCP1 .1= habilita interrupção do bloco CCP1.0= desabilita interrupção do bloco CCP1.
Bit 3 (bit SSPIE, habilitação da interrupção da porta serial síncrona) –Este bit habilita uma interrupção gerada por uma de um conjunto de condições associadas a porta serial assíncrona..1= habilita a interrupção da SSP (Synchronous Serial Port)
16 Saulo O. D. Luiz
1= habilita a interrupção da SSP (Synchronous Serial Port)0= desabilita a interrupção da SSP (Synchronous Serial Port)
Registrador PIE1
Bit 4 (bit TXIE, habilitação da interrupção de transmissão da USART) –Este bit habilita uma interrupção quando é concluída a transmissão de um byte pela USART (buffer de transmissão vazio)pela USART (buffer de transmissão vazio).1= interrupção habilitada0= interrupção desabilitada
Bit 5 (bit RCIE, habilitação da interrupção de recepção da USART) – Este bit habilita a interrupção quando um byte é recebido pela USART (buffer de recepção cheio).1= interrupção habilitada
17 Saulo O. D. Luiz
1= interrupção habilitada.0= interrupção desabilitada
Registrador PIE1
Bit 6 (bit ADIE, habilitação da interrupção do conversor A/D) – Este bit habilita uma interrupção gerando pela conclusão de uma conversão A/D.habilita uma interrupção gerando pela conclusão de uma conversão A/D.1= interrupção habilitada0= interrupção desabilitada.
Bit 7 (bit PSPIE h bilit ã d i t ã d t l l )Bit 7 (bit PSPIE, habilitação da interrupção da porta paralela escrava) –Este bit habilita uma interrupção gerada por uma operação de escrita/leitura na porta paralela (porta D).1= todas as interrupções são permitidas
18 Saulo O. D. Luiz
pç p0= todas as interrupções impedidas
Registrador PIR1
Endereço 0x0CC t bit d fl d i t õContem os bits de flag das interrupções de periféricos
19 Saulo O. D. Luiz
Registrador PIR1
Bit 0 (bit TMR1IF, indica a ocorrência de um overflow do contador TMR1)– Este bit indica a ocorrência de um “overflow” no contado TMR1, ou seja, o contador contou de FFFFh para 0000hcontador contou de FFFFh para 0000h.1 = ocorreu um “overflow” em TMR10 = não ocorreu “overflow” em TMR1.
Bit 1 (bit TMR2IF, indica que os valores de TMR2 e PR2 coincidem) – Este bit indica a ocorrência do evento em que o valor do registrador de contagem do Timer 2, TMR2, coincide com o valor armazenado no registrador PR2.1 = TMR2 é igual a PR2
20 Saulo O. D. Luiz
1 = TMR2 é igual a PR20 = TMR2 é diferente de PR2.
Registrador PIR1Bit 2 (bit CCP1IF, indica se um evento de Capture ou Compare do módulo CCP1 ocorreu) – Este bit indica a ocorrência de um dos evento abaixo no módulo CCP1:Modo “capture”1 = Um evento de captura do valor de contagem do TMR1 ocorreu1 = Um evento de captura do valor de contagem do TMR1 ocorreu0 = Nenhum evento de captura ocorreu;Modo “compare”1 = Um evento de comparação (valor de contagem do TMR1 coincidiu com valor do registrador de comparação) ocorreuregistrador de comparação) ocorreu0 = Nenhum evento de comparação ocorreu;Modo PWM
Não usado nesse modo.
Bit 3 (bit SSPIF, indica se um evento do conjunto associado a porta serial síncrona ocorreu) – Este bit indica a ocorrência de um dos evento abaixo na porta serial síncrona:síncrona:1 = SPI – Uma transmissão/recepção ocorreu;0 = Nenhuma condição de interrupção do módulo SSP ocorreu.
21 Saulo O. D. Luiz
Registrador PIR1
Bit 4 (bit TXIF, indica se um byte já foi enviado pela USART) – Este bit indica o evento decorrente da transmissão completa de um byte que foi enviado a USART pela CPUenviado a USART pela CPU.
1= buffer de transmissão da USART vazio 0= buffer de transmissão da USART cheio.
Bit 5 (bit RCIF, indica se o buffer de recepção da USART possui um byte novo) – Este bit indica o evento decorrente da recepção de um byte pela porta serial assíncrona (USART).
1= buffer de recepção da USART cheio
22 Saulo O. D. Luiz
1= buffer de recepção da USART cheio 0= buffer de recepção da USART vazio.
Registrador PIR1
Bit 6 (bit ADIF, indica conclusão de uma conversão A/D) – Este bit indica se o conversor A/D concluiu uma conversão analógica/digital.o conversor A/D concluiu uma conversão analógica/digital. 1= conversão concluída 0= conversão não concluída.
Bit 7 (bit PSPIF i di ã d it /l it t l lBit 7 (bit PSPIF, indica operação de escrita/leitura na porta paralela escrava) – Este bit indica o evento decorrente de uma operação de escrita/leitura na porta paralela escrava. 1= uma operação de leitura ou escrita ocorreu na porta paralela
23 Saulo O. D. Luiz
p ç p p0= não ocorreu nenhuma operação de leitura ou escrita na porta paralela
Contexto da aplicação
Durante uma interrupção, o único valor salvo é o do contador de programasalvo é o do contador de programaMas há outros registradores importantes
i i l Wpara o programa principal, e.g. o W e o STATUS
24 Saulo O. D. Luiz
Contexto da aplicação
Operação para salvar registradores importantes antes de desviar para a subrotina de interrupçãoantes de desviar para a subrotina de interrupção
PUSHOperação para recuperar valores importantesOperação para recuperar valores importantes após o atendimento da subrotina de interrupção
POP
26 Saulo O. D. Luiz
Contexto da aplicação
Ex. PUSH e POP:PUSHPUSH
MOVWF w_temp ;Salva o valor de W num registrador temporárioSWAPF STATUS,W ;Swap em status e o copia em WCLRF STATUS ;banco 0, Limpar IRP,RP1,RP0MOVWF t t t S l STATUS i t d t á iMOVWF status_temp ;Salva STATUS em um registrador temporáriogoto CODIGO_ISR
CODIGO_ISR;(ISR);(ISR);
POPSWAPF status_temp,W ;Swap em status_temp e o copia em W
( l d b d ó i é t d );(selecao de banco de memória é restaurada)MOVWF STATUS ;Restaurar STATUSSWAPF w_temp,F ;Swap em w_tempSWAPF w_temp,W ;Swap em w_temp e copia em W
27 Saulo O. D. Luiz
Contexto da aplicação
Ex. PUSH e POP como macros:PUSH macroPUSH macro
MOVWF w_temp ;Salva o valor de W num registrador temporárioSWAPF STATUS,W ;Swap em status e o copia em WCLRF STATUS ;bank 0, Limpar IRP,RP1,RP0MOVWF status_temp ;Salva STATUS em um registrador temporário
endm ;Fim do macro PUSHendm ;Fim do macro PUSH
POP macroSWAPF status_temp,W ;Swap em status_temp e o copia em W
;(selecao de banco de memória é restaurada)MOVWF STATUS ;Restaurar STATUSSWAPF w_temp,F ;Swap em w_tempSWAPF w_temp,W ;Swap em w_temp e copia em W
endm ;Fim do macro POP
;;;;
MOVLW 0X06PUSHADDLW 0X02 ;Alterou W e STATUS
28 Saulo O. D. Luiz
;POP
Interrupção externa no pino RB0/INT
Transição positivaSe o bit INTEDG = 1 no registrador OPTION<6>Se o bit INTEDG = 1 no registrador OPTION<6>
Transição negativaSe o bit INTEDG = 0 no registrador OPTION<6>Se o bit INTEDG 0 no registrador OPTION 6
30 Saulo O. D. Luiz
Interrupção externa no pino RB0/INT
Programasendo sendo
executado
INTF = 1
BCF INTCON INTF Limpar o bit para q eBCF INTCON,INTF ; Limpar o bit para que; o programa; não volte à rotina
31 Saulo O. D. Luiz
Interrupção externa no pino RB0/INT
Para inibir a interrupçãoLimpar o bit de habilitação INTE (INTCON<4>)Limpar o bit de habilitação INTE (INTCON<4>)
32 Saulo O. D. Luiz
Interrupção devido ao “overflow” do contador TMR0
overflow do contador TMR0 passagem de FFh para 00hseta o bit TOIF (INTCON<2>)
Para inibir a interrupçãoLimpar o bit de habilitação TOIE (INTCON<5>)
33 Saulo O. D. Luiz
Interrupção devido ao “overflow” do contador TMR0
overflow do contador TMR0 passagem de FFh para 00hseta o bit TOIF (INTCON<2>)
P i ibi i ãPara inibir a interrupçãoLimpar o bit de habilitação TOIE (INTCON<5>)
34 Saulo O. D. Luiz
Interrupção por variação nos pinos 4, 5, 6 e 7 do porto B
variação em um dos 4 bits de entrada da Porta çB (bits 4 a 7)
seta o bit RBIF (INTCON<0>)Os pinos devem ser definidos como entradas
Para inibir a interrupçãoPara inibir a interrupçãoLimpar o bit de habilitação RBIE (INTCON<3>)
35 Saulo O. D. Luiz
Interrupção por fim de escrita na EEPROM
Fim da operação de escritap çseta o bit EEIF do registrador EECON1
Para inibir a interrupçãopLimpar o bit de habilitação EEIE do registrador INTCON
36 Saulo O. D. Luiz
Iniciação da interrupção
Procedimentos para que o microcontrolador p qpossa atender a interrupçõesHabilitar as interrupções às quais se deseja atender
37 Saulo O. D. Luiz
Iniciação da interrupção
Ex. iniciação da interrupção externa no pino RB0RB0
CLRF INTCON ;Desabilita todas as interrupçõesBSF INTCON,GIE ;Habilitar a CPU a atender interrupçõesBSF INTCON INTE ;Habilitar a interrupção externaBSF INTCON,INTE ;Habilitar a interrupção externa
38 Saulo O. D. Luiz
Ex.: Atendimento a interrupções
Salvando o contexto
w_temp EQU 0x7E ; variável para salvar o contextostatus_temp EQU 0x7F ; variável para salvar o contexto
;***** DEFINICOES DE MACROS; DEFINICOES DE MACROSPUSH macro
MOVWF w_temp ;Salva o valor de W num registrador temporárioSWAPF STATUS,W ;Swap em status e o copia em WCLRF STATUS ;bank 0, Limpar IRP,RP1,RP0MOVWF status_temp ;Salva STATUS em um registrador temporário
endm ;Fim do macro PUSH
POP macroSWAPF status_temp,W ;Swap em status_temp e o copia em W
;(selecao de banco de memória é restaurada)MOVWF STATUS ;Restaurar STATUSMOVWF STATUS ;Restaurar STATUSSWAPF w_temp,F ;Swap em w_tempSWAPF w_temp,W ;Swap em w_temp e copia em W
endm ;Fim do macro POP
40 Saulo O. D. Luiz
Ex.: Atendimento a interrupções
Macros para seleção de bancosBANK0 MACROBANK0 MACRO
BCF STATUS,RP0BCF STATUS,RP1BCF STATUS,IRPENDM
BANK1 MACROBSF STATUS,RP0BCF STATUS,RP1BCF STATUS,IRPENDM
BANK2 MACROBCF STATUS,RP0BSF STATUS,RP1BSF STATUS,IRPENDMENDM
BANK3 MACROBSF STATUS,RP0BSF STATUS,RP1BSF STATUS,IRP
41 Saulo O. D. Luiz
,ENDM
Ex.: Atendimento a interrupções
Rotinas de atendimento de interrupção
ORG 0x004 ; interrupt vector locationPUSH ;Salvar o contextoBTFSC INTCON,RBIF;Testa se houve variação nos pinos 4, 5, 6 e 7 da porta Bç p pgoto ISR_PORTB ;Ir para a rotina de atendimento de interrupção da porta BBTFSC INTCON,INTF;Testa se houve interrupção externa em RB0goto ISR_RB0 ;Ir para a rotina de atendimento de interrupção externa em RB0BTFSC INTCON,T0IF ;Testa se houve overflow no TMR0goto ISR TMR0 ;Ir para a rotina de atendimento de interrupção do TMR0goto ISR_TMR0 ;Ir para a rotina de atendimento de interrupção do TMR0BANK1 ;Selecionar banco 1 para acessar EECON1BTFSC EECON1,EEIF ;Testa se a escrita na EEPROM foi finalizadagoto ISR_EEPROM ;Ir para a rotina de atendimento de interrupção da EEPROMBANK0
ISR_PORTB;rotina de atendimento de interrupção goto END_ISR ;saída da rotina de atendimento de interrupção
42 Saulo O. D. Luiz
Iniciação da interrupção
Rotinas de atendimento de interrupçãoISR_RB0;rotina de atendimento de interrupção ADDLW 0X02 ;Alterou W e STATUS (instrução dumb para testar o POP)BCF INTCON,INTF ; Limpar o bit para que o programa não volte à rotina goto END ISR ;saída da rotina de atendimento de interrupçãogoto END_ISR ;saída da rotina de atendimento de interrupção
ISR_TMR0;rotina de atendimento de interrupção goto END_ISR ;saída da rotina de atendimento de interrupção
ISR_EEPROM;rotina de atendimento de interrupção goto END_ISR ;saída da rotina de atendimento de interrupção
END_ISR
POP ;Recuperar o contexto
RETFIE ;retorna e habilita GIE
43 Saulo O. D. Luiz
RETFIE ;retorna e habilita GIE