Teoria linguagem c



Baixar 2.75 Mb.
Página18/30
Encontro30.10.2016
Tamanho2.75 Mb.
1   ...   14   15   16   17   18   19   20   21   ...   30

Tipos de Interrupção

Os microcontroladores 8051 possuem vários tipos de interrupção:


  • RST, pino 9

  • P3.2 à INT0, interrupção externa 0

  • P3.3 à INT1, interrupção externa 1

  • P3.4 à T0, entrada para o timer 0

  • P3.5 à T1, entrada para o timer 1

  • P3.0 à RxD, entrada serial

  • P3.1 à TxD, saída serial

A interrupção é um evento externo ou interno que obriga o microcontrolador a suspender suas atividades temporariamente, para atender a esse evento que a interrompeu. Em resumo é uma ocorrência que faz o microprocessador parar sua rotina e desviar para outra função do programa, em que se localiza o serviço de interrupção que foi gerado pela ocorrência. Após o tratamento da rotina de interrupção, normalmente o microcontrolador retorna ao ponto do programa em que havia sido interrompido.


Para ligarmos as interrupções, é necessário selecionar as interrupções desejadas nos registradores especiais chamados (SFR’s) que fazem parte do registrador (Interrupt Enable), bastando colocar o valor 1 para habilitar e 0 para desabilitar cada tipo interrupção.
Os nomes dos registradores especiais podem ser acessados na linguagem C devido às definições do arquivo header (arquivo com a extensão .h). Veja o conteúdo parcial do header AT89x52.h que define o registrador IE (Interrupt Enable):


/* IE */


sbit at 0xA8 EX0 ; à apelida o bit na posição 0xA8 como EX0

sbit at 0xA9 ET0 ; à apelida o bit na posição 0xA9 como ET0

sbit at 0xAA EX1 ; à apelida o bit na posição 0xAA como EX1

sbit at 0xAB ET1 ; à apelida o bit na posição 0xAB como ET1

sbit at 0xAC ES ; à apelida o bit na posição 0xAC como ES

sbit at 0xAD ET2 ; à apelida o bit na posição 0xAD como ET2

sbit at 0xAF EA ; à apelida o bit na posição 0xAF como EA

Na linguagem C para microcontroladores 8051, para habilitar as interrupções, é preciso utilizar as seguintes instruções:


EA=1; //habilita a chave geral das interrupções

EA=0; //desabilita todas as interrupções
Esta instrução funciona como uma “chave geral” das interrupções. Quando a utilizamos, habilitamos o uso de todas as interrupções do microcontrolador.
Mas para habilitar as interrupções, é necessário, além do acionamento da chave geral, habilitar individualmente as interrupções que se deseja acionar.
Na tabela a seguir temos o nome de todas as interrupções disponíveis no registrador IE (Interrupt Enable):



Registrador IE


Nome da interrupção


Função

Palavra de associação

EX0

External

interrupt 0

TR0

Timer 0

interrupt 1

EX1

External

interrupt 2

TR1

Timer 1 interrupt 2

interrupt 2

RI

TI


Serial data received interrupt

Serial data transmit interrupt


interrupt 4



TR2

Timer 2

interrupt 5

EA

Chave geral das interrupções

Imagine que o registrador especial EA (Enable All Interrupts) funcione como a chave geral de uma casa, ou seja, como o disjuntor e as demais interrupções são os interruptores internos da casa.


Isto significa que para podermos acender uma lâmpada, no interior da casa, é preciso que, primeiramente, a chave geral esteja ligada (EA=1).



    1. Prioridade das Interrupções

Vamos supor que temos duas interrupções sendo solicitadas simultaneamente. Qual interrupção será atendida primeiro? É por esse motivo que devemos conhecer a hierarquia de importância das interrupções. Além disso, existe o registrador de função especial chamado IP (Interrupt Priority) que permite alterar a prioridade de interrupções padrão do microcontrolador.
Abaixo temos o conteúdo parcial do header AT89X52.h que define o registrador IP (Interrupt Priority):
/* IP */

sbit at 0xB8 PX0 ;

sbit at 0xB9 PT0 ;

sbit at 0xBA PX1 ;

sbit at 0xBB PT1 ;

sbit at 0xBC PS ;

sbit at 0xBD PT2 ;

Na tabela a seguir temos o significado de cada bit do registrador IP (Interrupt Priority):




Interrupção

Prioridade

0

PX0 : Entrada externa 0

Maior prioridade

1

PT0 : Passagem de tempo Timer 0

\......./

2

PX1 : Entrada externa 0

\...../

3

PT1 : Passagem de tempo Timer 1

\.../

4

PS : Comunicação Serial

\./

5

PT2 : Passagem de tempo Timer 2

Menor prioridade

Tabela 7.1- Prioridade padrão das interrupções.


A entrada RST (reset) é a interrupção mais importante do microcontrolador e sempre será atendida primeiro.

Nota


Podemos fazer com que uma ou mais interrupções sejam transferidas para o grupo de alta prioridade. Caso haja mais de uma interrupção nesse grupo, a hirerarquia de atendimento seguirá a ordem da próxima tabela. Por exemplo: a interrupção externa 0 (IE0) é mais importante do que a interrupção de TIMER0 (TR0), mas se colocarmos TIMER0 no grupo de alta prioridade, nesse caso a interrupção de TIMER0 será mais importante, e portanto, será atendida primeiro. Se colocarmos a interrupção externa 0 e interrupção de TIMER0, ambas no grupo de alta prioridade, então o 8051 usa a ordem hierárquica padrão: Atende a interrupção externa primeiro (IE0).
Exemplo para tornar a interrupção Serial mais importante do que a interrupção externa 0:
PX0=0; //define Interrupção Externa 0 como do grupo

//de baixa prioridade (priority external)

PS=1; //Define a Interrupção Serial como sendo do

//grupo de alta prioridade (priority serial)

Vejamos outro exemplo:
Suponha que as interrupções externas EX0 e EX1 sejam solicitadas ao microcontrolador simultaneamente. De acordo com a hierarquia de prioridades da tabela 7.1, o microcontrolador irá atender primeiramente, a interrupção EX0, ou seja, irá desviar o programa para a rotina de tratamento desta interrupção (EX0) e depois, irá desviar para a rotina de tratamento da interrupção EX1.
No entanto, caso esta hierarquia de interrupções não atenda às necessidades do programador, é possível alterá-las no registrador IP (Interrupt Priority). O exemplo abaixo altera a hierarquia das prioridades das interrupções, fazendo com que a interrupção externa 1 (EX1) se torne importante do que a interrupção externa 0 (EX0):
PX0=0; //define baixa prioridade para interrupção

//externa 0


PX1=1; //define alta prioridade para interrupção

//externa 1




    1. Interrupções Externas

Os microcontroladores da família 8051 possuem duas interrupções externas:


  • P3.2 à INT0, interrupção externa 0

  • P3.3 à INT1, interrupção externa 1

Mas para que serve uma interrupção externa?


A interrupção externa fará com que o programa em execução seja momentaneamente interrompido e desviado para o endereço de uma sub-rotina/função em que se encontra o tratamento desta interrupção sempre que o microcontrolador receber um sinal externo através das entradas P3.2 ou P3.3.
Após o tratamento da rotina de interrupção, normalmente o microcontrolador retorna ao ponto do programa em que havia sido interrompido, dando seqüência normal à execução do programa.
As interrupções na família 8051 podem ser disparadas interna ou externamente, uma vez que o microcontrolador possui periféricos internos que também geram esses eventos.


      1. Tipos de disparo das Interrupções Externas

As interrupções externas são sempre disparadas pela transição de nível alto para baixo do sinal aplicado aos seus respectivos pinos (de 1 para 0). O 8051 permite ainda a programação do tipo de disparo dessas interrupções pelo nível ou pela borda do sinal.
Devido ao fato de interrupções possuírem hierarquia, se duas interrupções acontecerem simultaneamente, o 8051 atenderá aquela que tem prioridade mais alta (conforme apresentado na tabela 7.1).


Este livro abordará as interrupções externas com disparo na borda de descida, configuração padrão do microcontrolador.

Nota


Todas as interrupções do microcontrolador 8051 encontram-se no registrador especial IE (Interrupt Enable). Cada interrupção é ativada com quando recebe o valor 1 e é desativada quando recebe o valor 0.
Exemplo:


EX0=1; //habilita interrupção externa 0

EX0=0; //desabilita interrupção externa 0






ET0=1; //habilita interrupção do TIMER 0

ET0=0; //desabilita interrupção do TIMER 0






EX1=1; //habilita interrupção externa 1

EX1=0; //desabilita interrupção externa 1






ET1=1; //habilita interrupção do TIMER 1

ET1=0; //desabilita interrupção do TIMER 1






ES=1; //habilita interrupção via porta serial

ET1=0; //desabilita interrupção via porta serial






ET2=1; //habilita interrupção do TIMER 2

ET2=0; //desabilita interrupção do TIMER 2






EA=1; //habilita chave geral das interrupções

EA=0; //desab. chave geral das interrupções

Para habilitar uma interrupção em C utilizamos:



#include //contém as definições do chip


void main(){ //declara início do programa

EA=1; //habilita chave geral das interrupções

EX0=1; //habilita interrupção externa 0

... //comandos do programa...

} //declara fim do programa

O programa de exemplo acima habilita a interrupção externa int0 do microcontrolador. A partir de agora, toda mudança de nível lógico 1 para 0 no pino do P3.2 (int0) gera uma interrupção no microcontrolador, na qual acarreta um desvio no processamento do programa principal para a realização da interrupção.



A instrução EA=1 (Enable All interrupts) faz com que o microcontrolador ative o uso das interrupções, pois na verdade estes recursos especiais não estão habilitados automaticamente. Depois disso, a instrução EX0=1 informa ao microcontrolador que o pino P3.2 terá uma função especial, ou seja, servirá para interromper o processamento toda vez que neste pino, ocorrer a transição de nível alto para baixo (acionamento pela borda de descida).



    1. Exercício Resolvido

No circuito a seguir (figura 3.1) existe uma tecla (push-button) conectado no pino de interrupção externa 0 (INT0), localizado no pino P3.2. Cada vez que a chave for acionada, uma interrupção será gerada e a rotina de atendimento à interrupção deverá acionar os pinos P2.0 e P2.1.



Figura 8.2 – Uso da Interrupção Externa EX0


#include //contém as definições do chip


void atendeInterrupcao() interrupt 0{

P2_0=0; //liga LED P2.0

P2_1=0; //liga LED P2.1

}
void main(){ //declara início do programa



Baixar 2.75 Mb.

Compartilhe com seus amigos:
1   ...   14   15   16   17   18   19   20   21   ...   30




©bemvin.org 2020
enviar mensagem

    Página principal
Prefeitura municipal
santa catarina
Universidade federal
prefeitura municipal
pregão presencial
universidade federal
outras providências
processo seletivo
catarina prefeitura
minas gerais
secretaria municipal
CÂmara municipal
ensino fundamental
ensino médio
concurso público
catarina município
Dispõe sobre
reunião ordinária
Serviço público
câmara municipal
público federal
Processo seletivo
processo licitatório
educaçÃo universidade
seletivo simplificado
Secretaria municipal
sessão ordinária
ensino superior
Relatório técnico
Universidade estadual
Conselho municipal
técnico científico
direitos humanos
científico período
espírito santo
pregão eletrônico
Curriculum vitae
Sequência didática
Quarta feira
prefeito municipal
distrito federal
conselho municipal
língua portuguesa
nossa senhora
educaçÃo secretaria
segunda feira
Pregão presencial
recursos humanos
Terça feira
educaçÃO ciência
agricultura familiar