24
Cap´ ıtulo 1 Interrup¸ ao Externa Se¸c˜ ao 1.1 No¸c˜oesb´asicassobreinterrup¸c˜oesemMicrocontroladoresPIC Interrup¸ c˜oes´ eobriga¸c˜ ao em uma programa¸ c˜aoprofissional. Quando um evento ocorrer, uma bandeira de interrup¸c˜ ao ser´a definida for¸cando o programa a desviar para o endere¸co de interrup¸c˜ ao. Isso libera a necessidade de um loop a espera do evento. As interrup¸c˜ oes podem ocorrer na mudan¸ ca de port, transbordo do temporizador, na comunica¸ c˜aoserial ··· Interrup¸ c˜oes recursos que permitem o tratamento imediato a eventos de maior prioridade interrompendo a execu¸ c˜ao normal do programa para executar tarefas de maior prioridade no momento. Atende determinados eventos executando o c´odigo armazenado em uma posi¸c˜ ao de mem´oria vinculada a pr´opria interrup¸ c˜ao e depois tem retorno imediato a execu¸ c˜ao normal do programa. As interrup¸c˜ oess˜ao tratadas como sub-rotinas de hardware. Observe que a distˆ ancia entre o vetor de inicializa¸ c˜ao (0000h) e o vetor de reset (0004h) ´ e de apenas 4 endere¸cos. Dessa forma quando as interrup¸ c˜oesest˜ ao desabilitadas o PC passa por 0004h normalmente durante a execu¸ c˜ao de um programa. Quando se faz necess´ ario o uso de 1

Interrup˘c~ao Externa - ederterceiro.weebly.comederterceiro.weebly.com/uploads/2/4/2/7/24278436/microcontrolador... · intervalo entre o vetor de inicializa˘c~ao e o vetor de reset

  • Upload
    vonhu

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Capıtulo 1

Interrupcao Externa

Secao 1.1

Nocoes basicas sobre interrupcoes em Microcontroladores PIC

Interrupcoes e obrigacao em uma programacao profissional.

Quando um evento ocorrer, uma bandeira de interrupcao sera definida forcando o programa a desviar

para o endereco de interrupcao. Isso libera a necessidade de um loop a espera do evento. As interrupcoes

podem ocorrer na mudanca de port, transbordo do temporizador, na comunicacao serial · · ·Interrupcoes recursos que permitem o tratamento imediato a eventos de maior prioridade interrompendo

a execucao normal do programa para executar tarefas de maior prioridade no momento.

Atende determinados eventos executando o codigo armazenado em uma posicao de memoria vinculada

a propria interrupcao e depois tem retorno imediato a execucao normal do programa. As interrupcoes sao

tratadas como sub-rotinas de hardware. Observe que a distancia entre o vetor de inicializacao (0000h) e o

vetor de reset (0004h) e de apenas 4 enderecos. Dessa forma quando as interrupcoes estao desabilitadas o

PC passa por 0004h normalmente durante a execucao de um programa. Quando se faz necessario o uso de

1

2 CAPITULO 1. INTERRUPCAO EXTERNA

interrupcoes, as rotinas de tratamento de interrupcao sao colocadas a partir do vetor de reset 0004h. No

intervalo entre o vetor de inicializacao e o vetor de reset e colocado um desvio para um endereco apos as

rotinas de interrupcao a partir do qual o programa realmente comeca.

Quando da interrupcao, o programa e desviado para um endereco pre-estabelecido, o vetor de reset

(0004h). O tratamento da interrupcao e feito a partir desse endereco executando rotinas associadas ao

evento da interrupcao.

O PIC 16F877A possui 15 fontes de interrupcoes:

1. Interrupcao do timer 0;

2. Interrupcao do timer 1;

3. Interrupcao do timer 2;

4. Interrupcao externa (RB0/INT);

5. Interrupcao por mudanca de estado (bits 4 a 7 do portal B);

6. Interrupcao de transmissao serial;

7. Interrupcao de recepcao serial;

8. Interrupcao do modulo comparador analogico;

9. Interrupcao do modulo CCP1;

10. Interrupcao do modulo CCP2;

1.1. NOCOES BASICAS SOBRE INTERRUPCOES EM MICROCONTROLADORES PIC 3

11. Interrupcao da memoria EEPROM;

12. Interrupcao do conversor analogico para digital;

13. Interrupcao da porta paralela escrava;

14. Interrupcao da comunicacao SPI;

15. Interrupcao por colisao no barramento I2C.

Na interrupcao estao associados quatro bits: o flag indicador de interrupcao, setado na interrupcao ou

pelo proprio programa, o bit de habilitacao de interrupcao ser alterado apenas pelo programa, PEIE inter-

rupcoes dos perifericos eGIE (bit de habilitacao global) interrupcao global quando em ‘0’ todas interrupcoes

estao desabilitadas em ‘1’ as interrupcoes habilitadas geram interrupcao na CPU.

Os flags das interrupcoes sao setados por um evento mesmo que essa interrupcao desabilitada. A inter-

rupccao INT atende diretamente os eventos externos ao microcontrolador e a interrupcao RB0 atende as

mudancas de estado do port B.

As demais interrupcoes sao internas e causadas pelos perifericos para indicar determinados eventos

(chegada de dado pelo portal serial, ”estouro”de timer, etc).

Qualquer interrupcao sempre chama o vetor de interrupcao no endereco (0004h). Obviamente e o

endereco para qualquer a rotina de tratamento de interrupcao

O teste dos bits de flags determinam interrupcao ocorrida entre todas as interrupcoes ativas. A prioridade

das interrupcoes fica determinada pela ordem dos bits do flag.

4 CAPITULO 1. INTERRUPCAO EXTERNA

Numa interrupcao nenhum registro e salvo automaticamente. Ha a necessidade de salvar os registros W,

STATUS e qualquer outro SFR antes do tratamento da interrupcao, o chamado salvamento de contexto.

Recomenda se que o registro STATUS seja zerado. Tudo isso enseja que a criacao de variaveis para

manter esses registros.

Tambem nao se deve usar durante o tratamento da interrupcao de registros em uso em outro segmento

do programa

Esses cuidados garantem o tratamento adequado das interrupcoes. pode ocorrer a qualquer momento.

Na execucao de um trecho qualquer do programa determinados enderecos de memoria (variaveis do

programa ou SFR) sao usadas, e seus valores devem ser reestabelecidos apos a interrupcao ser tratada.

Recomenda se um codigo curto para o tratamento das interrupcoes

Durante o tratamento de qualquer interrupcao chamada, todas as demais permanecem desabilitadas,

pois GIE e resetado ate a execucao da intrucao RETFIE que o seta novamente.

Os eventuais pedidos de interrupcao nesse intervalo nao sao descartados O tratamento da interrupcao e

realizado atraves do flag setado correspondente da interrupcao.

Assim e necessario resetar o flag associado a ela ao fim do tratamento . Ao contrario o programa trava

pela necessidade de responder novamente a tal interrupcao

A latencia natural e o atraso decorrente entre a chamada da interrupcao e seu tratamento, pois alem

do controle observar um processo interno de varredura de interrupcoes sera necessario um desvio para o

endereco 0004h alem das medidas preventivas ja ditas.

Valores usuais sao de 3 ciclos de maquina apos para uma interrupcao interna, e de 3 a 3,75 ciclos de

maquina para interrupcao externa. Em aplicacoes com precisao de tempo e importante considerar tais

1.2. REGISTRADORES RELACIONADOS AS INTERRUPCOES 5

atrasos.

A configuracao do periferico associado a interrupcao e o primeiro passo para o tratamento, normalmente

executada na inicializacao programa e eventualmente reconfigurado em outros trechos .

A habilitacao das interrupcoes depende da sua persistencia, em alguns casos se quer ela disponıvel todo o

tempo de execucao e assim sua habilitacao deve ser feita na inicializacao. Em outros casos o interesse pela

a interrupcao so existira a partir de um certo instante e sua habilitacao ocorre num instnate conveniente

O bit de habilitacao global (GIE) estiver habilitado para as interrupcoes geram as chamadas.

Finalmente as Rotinas de Tratamento de Interrupcao (RTI) serao chamadas para o tratamento das as

interrupcoes habilitadas.Secao 1.2

Registradores relacionados as Interrupcoes

Registradores de Controle da CPU OPTION REG

Configura:

1. PSA define TMR0 ou watchdog

2. PS2,PS1,PS0 valores do prescaler

3. TOSE Sentido da transicao da borda do sinal aplicado am TMR0

4. TOCS fonte de impulsos para TMR0: clock ou impulso externo

5. INDEDG define bordo para ativacao da interrupcao RB0/INTCON

6 CAPITULO 1. INTERRUPCAO EXTERNA

6. RBPU habilita resistor pull-up do port B

7. Na programacao usa-se option-reg , pois em PICs mais antigos existia uma instrucao option.

Figura 1.1: OPTION REG

Configura a Identificacao e configuracao de interrupcoes

1. /RBPU, Habilitacao de pull-up na porta B,

(a) 1 desabilita pull-up

(b) 0 habilita pull-up.

2. INTEDG, Selecao de borda de interrupcao,

1.2. REGISTRADORES RELACIONADOS AS INTERRUPCOES 7

(a) 1 interrupcao na borda de subida do pino RB0/INT

(b) 0 interrupcao na borda de descida do pino RB0/INT.

3. T0CS, Selecao da fonte de clock do TMR0,

(a) 1 clock na entrada do pino RA4/T0CKI

(b) 0 clock interno.

4. T0SE, Selecao da borda da fonte de clock do TMR0,

(a) 1 incrementa na borda descendente no pino RA4/T0CKI

(b) 0 incrementa na borda ascendente no pino RA4/T0CKI.

5. PSA, Sinalizacao do “prescaler”,

(a) 1 assinala o “prescaler” ao WDT

(b) 0 assinala o “prescaler” ao TMR0.

6. PS2, PS1 e PS0, Selecao da razao da escala do “prescaler”

8 CAPITULO 1. INTERRUPCAO EXTERNA

PS2 PS1 PS0 WDT TMR0

0 0 0 1 : 1 1 : 2

0 0 1 1 : 2 1 : 4

0 1 0 1 : 4 1 : 8

0 1 1 1 : 8 1 : 16

1 0 0 1 : 16 1 : 32

1 0 1 1 : 32 1 : 64

1 1 0 1 : 64 1 : 128

1 1 1 1 : 128 1 : 256

(1.1)

Registradores de Controle da CPU INTCON

Configura a Identificacao e configuracao de interrupcoes

1. GIE – Habilita tratamento Global de Interrupcoes

(a) 1 = Trata interrupcoes.

(b) 0 = Ignora interrupcoes.

2. PEIE Habilita interrupcoes dos perifericos

(a) 1 = habilitadas.

1.2. REGISTRADORES RELACIONADOS AS INTERRUPCOES 9

Figura 1.2: INTCON

(b) 0 = desabilitadas.

3. T0IE – Habilitacao da interrupcao de transbordo do Timer0

(a) 1 = habilitada.

(b) 0 = deshabilitada.

4. INTE – Habilitacao da interrupcao externa (RB0/INT)

(a) 1 = habilitada.

(b) 0 = desabilitada.

5. RBIE – Habilitacao de interrupcao por mudanca de estado na porta B (pinos RB4 a RB7)

10 CAPITULO 1. INTERRUPCAO EXTERNA

(a) 1 = habilitada.

(b) 0 = desabilitada.

6. T0IF – Flag sinalizador de estouro do timer 0

(a) 1 = houve transbordo do timer 0.

(b) 0 = nao houve transbordo.

7. INTF – Flag sinalizador de interrupcao externa (RB0/INT)

(a) 1 = ha pedido externo de interrupcao

(b) 0 = Nao ha pedido externo de interrupcao

8. RBIF – Flag sinalizador de alteracao nos pinos RB4 a RB7

(a) 1 = Houve alteracao.

(b) 0 = Nao houve alteracao.

Secao 1.3

Interrupcao em XC8

As principais caracterısticas da programacao estao mostradas na figura 1.3

1.3. INTERRUPCAO EM XC8 11

Figura 1.3: Programando interrupcao no XC8

12 CAPITULO 1. INTERRUPCAO EXTERNA

Circuito com Interrupcao Externa

Objetivo: Verificar o tratamento de interrupcoes e a insercao de uma chave simples para alterar o

sequencia de comandos. Uso dos registradores OPTION REG e INTCON.

O codigo descreve a estrutura para tratamento de interrupcoes acendendo um led pendurado no PORTd,

desde que a interrupcao tenha sido estabelecida pela mudanca interrupcao externa no pino RB)/INT

1 p r o c e s s o r 16 f877a

2 #i n c l u d e p16f877a . inc

3

4 CONFIG FOSC XT & WDTE OFF & PWRTE OFF & BOREN OFF & LVP OFF & CPD OFF & WRT OFF & CP OFF

5

6 ; DEFINE O ENDEREO INICIAL E O VETOR DE INTERRUP O

7 ORG 0x00

8 goto c o n f i g u r a r

9 ORG 0x04

10 ; c a l l i n t e r rupcao

11

13

14 CAPITULO 1. INTERRUPCAO EXTERNA

12 CBLOCK 0x20

13 Loop1 , Loop2

14 ENDC

15

16 c o n f i g u r a r

17 BSF STATUS,RP0

18 CLRF TRISD

19 BSF STATUS,RP0

20 ; CONFIGURAR AS INTERRUP ES

21 ; REGISTRADOR OPTION REG

22 BCF OPTION REG, 7 ; RESISTORES PULLUP DESABILITADOS

23 BCF OPTION REG, 6 ; INTERRUPCAO EXTERNA NA BORDA DE DESCIDA

24 BCF OPTION REG, 5 ; CLOCK INTERNO PARA TIMER0

25 BCF OPTION REG, 4 ; INCREMENTA TIMER0 NA BORDA ASCENDENTE

26 BCF OPTION REG, PSA ; PREESCALER USADO PRO TIMER0

27 ; PRESCALER 1:256 NO TIMERO

28 BSF OPTION REG, 2

29 BSF OPTION REG, 1

30 BSF OPTION REG, 0

31 ; REGISTRADOR INTCON

1.3. INTERRUPCAO EM XC8 15

32 BSF INTCON, GIE ; HABILITA TRATAMENTO GLOBAL DE INTERRUPCOES

33 BCF INTCON, PEIE ; DESABILITA INTERRUPCOES DOS PERIFERICOS

34 BCF INTCON, T0IE ; DESABILITA INTERRUP O DO TIMERO

35 BSF INTCON, INTE ; HABILITA INTERRUP O EXTERNA

36 BCF INTCON, RBIE ; DESABILITA INTERRUP O DO PORTB

37 BCF INTCON, T0IF ; LIMPA O FLAG DO TIMER0

38 BCF INTCON, INTF ; LIMPA O FLAG DA INTERRUPCAO EXTERNA

39 BCF INTCON, RBIF ; LIMPA O FLAG DO PORTB

40

41 p r i n c i p a l

42 movlw 0x01

43 c a l l a c e n d e r l e d s

44 goto p r i n c i p a l

45

46 a c e n d e r l e d s

47 movwf PORTD

48 CALL at ra so

49 RRF PORTD

50 BTFSS PORTD, 7

51 GOTO a c e n d e r l e d s

16 CAPITULO 1. INTERRUPCAO EXTERNA

52 RETURN

53

54 a t ra so

55 MOVLW 0XFF

56 MOVWF Loop1

57 externo

58 MOVLW 0XFF

59 MOVWF Loop2

60 i n t e r n o

61 NOP

62 DECFSZ Loop2

63 GOTO i n t e r n o

64 DECFSZ Loop1

65 GOTO externo

66 re turn

67

68 in t e r rupcao

69 CLRF PORTD

70 CALL at ra so

71 BCF INTCON, INTF ; RESETA FLAG DA INTERRUPCAO EXTERNA

1.3. INTERRUPCAO EM XC8 17

72 RETFIE

73

74 end

O circuito, na figura 1.4 descreve a conexao de uma interrupcao externa no pic16f877:

Figura 1.4: Uso de interupcao externa Figura 1.5: Pinagem do pic16f877a

18 CAPITULO 1. INTERRUPCAO EXTERNA

*************************************** **********************************

1 p r o c e s s o r 16 f628a

2 #i n c l u d e p16f628a . inc

3

4 ORG 0x00

5 GOTO p r i n c i p a l

6 ORG 0x04

7 GOTO inte r rupcao

8

9 p r i n c i p a l

10 BSF STATUS,RP0 ;BANK1

11 MOVLW 0xFF

12 MOVWF TRISB ; portb entrada

13 CLRF TRISA ; porta sa ida

14

15 BCF STATUS,RP0 ; va i para banco 0

16 MOVLW 0x08

17 MOVWF INTCON ; Conf igura a i n t e r r u p o pe la mudan a de estado PORTB

18 BSF INTCON, GIE ; L i b e r a o g e r a l das i n t e r r u p e s S t a r t g e n e r a l i n t e r r u p t s

1.3. INTERRUPCAO EM XC8 19

19

20 LOOP ; Criado um loop cont inuo sem i n s t r u c o e s apenas esperando uma i n t e r r u p o

21 GOTO LOOP

22

23 in t e r rupcao

24 BTFSS INTCON, RBIF ; Testa se a i n t e r r u p o f o i causada pe la mudan a no PORTB

25 GOTO nao portb ; Se nao f o r o caso re to rna

26 MOVLW 0x01 ;

27 MOVWF PORTA ; Acende l ed para i n d i c a r in t e r rupcao pe lo PORTA

28 BCF INTCON, RBIF ; Limpa o f l a g de in t e r rupcao do PORTB

29

30 nao portb ; Retorno se in t e r rupcao nao f o i pe lo portb

31 RETFIE ; De qualquer forma re to rna da in t e r rupcao

32

33 end

Para o PIC16F628A visto na figura ?? :

1. Refaca o circuito e altere de forma adequada as ligacoes. Montando um conjunto entre 4 e 8 leds.

2. Escolhe convenientemente os ports para pendurar os leds

3. Insira a chave no pino de interrupcao RB0/INT e reescreva o codigo para tratar a interupcao.

20 CAPITULO 1. INTERRUPCAO EXTERNA

Secao 1.4

Uso da Interrupcao externa em assembler

1

2 LIST P=16F628 , R=DEC ; Declara o uso de ucont ro lador e s i s tema de n u m e r a o

3

4 #i n c l u d e p16f628 . inc ; I n c l u s o do arquivo de c a b e a l h o em assembler

5 ; D i r e t i v a s de c o m p i l a o

6 c o n f i g INTRC OSC NOCLKOUT & LVP OFF & WDT OFF & PWRTE ON & BODEN ON

7

8 CBLOCK 0x20 ; d e c l a r a v a r i v e i s e p o s i o na m e m r i a

9 COUNT ; contador , i n d i c a r quantos i n t e r r u p e s aconteceram

10 TEMP ; a u x i l i a r

11 Loop1 , Loop2

12 ENDC

13 ; −−−−−−−−−−−14 ; I n c i o

15 ; −−−−−−−−−−−16 org 0x00 ; I n c i o do programa em 0x00

17 GOTO CONFIG

18 ; −−−−−−−−−−−

1.4. USO DA INTERRUPCAO EXTERNA EM ASSEMBLER 21

19 ; Rotina Tratamento de I n t e r r u p o

20 ; −−−−−−−−−−−21 org 0x04 ; ve tor de i n t e r r u p o

22 movwf TEMP ; guarda v a l o r de w

23 i n c f COUNT, 1 ; incrementa COUNT com reto rno ne la mesmo

24 movlw 0x0A ; ca r r ega va l o r 10 em w

25 subwf COUNT, 0 ; subtrae w de count , e devo lve r e s u l t a d o em w.

26 b t f s s STATUS, 0 ; Testa se houve 10 i n t e r r u p e s

27 goto cont inua contador ; cont inua a cont inua contador se n o f o r 10

28 goto l impar contador ; l impa o contador

29

30

31

32 cont inua contador

33 bc f INTCON, 1 ; l impa f l a g da i n t e r r u p o para p e r m i t i r novas i n t e r r u p e s

34 movfw TEMP ; vo l t a v a l o r o r i g i n a l , antes da i n t e r r u p o , a W

35 r e t f i e ; Retornar da i n t e r r u p o

36 l impar contador

37 c l r f COUNT ; limpa contador

38 bc f INTCON, 1 ; l impa f l a g da i n t e r r u p o para p e r m i t i r novas i n t e r r u p e s

22 CAPITULO 1. INTERRUPCAO EXTERNA

39 r e t f i e ; Retornar da i n t e r r u p o

40

41 CONFIG

42 b s f STATUS, RP0 ; Trans f e r e para o banco de m e m r i a 1 , e s t o TRISx

43 c l r f TRISA ; Limpa TRISA, todos os p inos s e r o de s a d a

44 b s f TRISB , 0 ; Rb0 E S T COMO entrada

45 bc f STATUS, RP0 ; Retorna ao banco de m e m r i a 0 , e s t o PORTx

46

47

48

49 ; −−−−−−−−−−−−−−−−−−−−−−−−50 ; Def ine a f u n o dos p inos a t r a v s do r e g i s t r a d o r CMCON

51 ; −−−−−−−−−−−−−−−−−−−−−−−−52 MOVLW 0x07

53 MOVWF CMCON ; Todos os p inos s e r o d i g i t a i s , comparador e s t d e s l i g a d o

54 ; −−−−−−−−−−−−−−−−−−−−−−−−55 ; Def ine comportamento das i n t e r r u p e s

56 ; −−−−−−−−−−−−−−−−−−−−−−−−57 b s f INTCON, 7 ; GIE =1 , h a b i l i t a i n t e r r u p o g l o b a l

58 b s f INTCON, 4 ; INTE = 1 , h a b i l i t a i n t e r r u p o externa

1.4. USO DA INTERRUPCAO EXTERNA EM ASSEMBLER 23

59 bc f INTCON, 1 ; INTF = 0 , limpa f l a g de i n t e r r u p o g l o b a l

60 ; −−−−−−−−−−61 ; Loop P r i n c i p a l

62 ; −−−−−−−−−−63 p r i n c i p a l

64 movlw 0x04

65 movwf PORTA

66 CALL at ra so

67 movwf PORTA

68 CALL at ra so

69 GOTO p r i n c i p a l

70 ; e s c r e v e r r o t i n a para mostrar c a l o r de contador

71 ; −−−−−−−−−−−−−−−72 ; F u n o de a t ra so

73 ; −−−−−−−−−−−−−−−74 a t ra so movlw 0xFA

75 movwf Loop1

76 Externo movlw 0x80

77 movwf Loop2

78 Inte rno nop

24 CAPITULO 1. INTERRUPCAO EXTERNA

79 nop

80 d e c f s z Loop2 , F

81 goto Inte rno

82 d e c f s z Loop1 , F

83 goto Externo

84 re turn

85

86 end ; f im do programa