Você está na página 1de 37

Interrupes do 8051 Interrupes do 8051

2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk


UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
Interrupes
Interrupes

Interrupes do 8051 Interrupes do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

Evento aleatrio sequncia normal do


programa;

Quando ocorre o evento, o programa


desviado para a funo de atendimento da
interrupo;

O endereo da funo de atendimento


obtido do vetor de interrupo
Interrupo Vetor Nmero
Externa 0 0x03 0
Timer 0 0x0B 1
Externa 1 0x13 2
Timer 1 0x1B 3
Serial 0x23 4

Interrupes do 8051 Interrupes do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

!o "#$% todas as interrup&es podem ser


'abilitadas ou desabilitadas individualmente;

!o "#$% e(istem dois n)veis de prioridade


para cada interrupo;

Os registradores que configuram as


interrup&es so o *E e o *+
E, E-. / E0 E1# E-# E1% E-%
*E23 *E2$ *E24 *E25 *E2# *E2% *E2. *E26
+, +-. / / +1# +-# +1% +-%
*+23 *+2$ *+24 *+25 *+2# *+2% *+2. *+26
*+
*E

Interrupes do 8051 Interrupes do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

PT2 Deine a priori!a!e !a interrupo !o timer 2"

PS Deine a priori!a!e !a interrupo !a intera#e $erial"

PT1 Deine a priori!a!e !a interrupo !o timer 1"

P%2 Deine a priori!a!e !a interrupo externa$ 1"

PT1 Deine a priori!a!e !a interrupo timer 0"

P%0 Deine a priori!a!e !a interrupo externa$ 0"

Bit i&ual a 0 '(ero) *aixa priori!a!e"

Bit i&ual a 1 'um) alta priori!a!e"

Para interrup+e$ #om me$ma priori!a!e, a $e-u.n#ia !e


aten!imento $er/ !e P%0 para PT2"
+, +-. / / +1# +-# +1% +-%
*+23 *+2$ *+24 *+25 *+2# *+2% *+2. *+26
*+

Interrupes %-ternas do 8051 Interrupes %-ternas do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
I'T%!!U./%0 %1T%!'$0
I'T%!!U./%0 %1T%!'$0

Interrupes %-ternas do 8051 Interrupes %-ternas do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

Ocorrem quando um sinal 7ero ou uma


transio de um para 7ero estiver presente no
pino correspondente 8+ino +62. ou +6269;

0s interrup&es e(ternas podem ser


configuradas para serem ativadas por n)vel ou
por borda de descida 8ver registrador -:O!9;
-;# -<# -;% -<% *-# *E# *-% *E%
":' "=' "E' "<' ""' ">' "0' "?'
-:O!

*E( @ *ndica a ocorrncia da iterrupo e(terna (;

*-( @ =efine o modo de operao da interrupo e(terna (

# @ sens)vel a n)vel;

% @ sens)vel a borda;

Interrupes %-ternas do 8051 Interrupes %-ternas do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

Quando a lu7 incide


sobre o foto/transistor,
ele condu7 fa7endo
com que o ?:$3"
sature2 *sto gera uma
rampa de descida no
pino+62., gerando a
interrupo2
%-e*plo

Interrupes do 8051 na lin)ua)e* 2 Interrupes do 8051 na lin)ua)e* 2
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
A este nBmero que
indica qual
interrupo serC
atendida por esta
funo2

0s fun&es de atendimento s interrup&es


em : so especificadas pela palavra/c'ave
interrupt
void inter0(void) interrupt 0
{
....
}
O nome da funo
apenas sugestivo, no
interfere em nada2

Interrupes do 8051 na lin)ua)e* 2 Interrupes do 8051 na lin)ua)e* 2
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

!Bmeros indicadores das interrup&es


void inter0(void) interrupt x
{
....
}

0 interrupo externa 0"

1 interrupo !o timer 0"

2 interrupo externa 1"

3 interrupo !o timer 1"

4 interrupo $erial"

0 interrupo !o timer 2"



Interrupes do 8051 na lin)ua)e* 2 Interrupes do 8051 na lin)ua)e* 2
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
Dsa o banco de
registradores %2

+ara mel'orar a performance, pode/se


especificar um outro banco de registradores
para atender a interrupo
void inter0(void) interrupt 0 using 1
{
....
}

Interrupes do 8051 Interrupes do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

E(erc)cio

Escreva um programa em : que altere o


estado de um led ligado ao pino 3 do port .
cada ve7 que uma c'ave no pino de
interrupo e(terna # 8pino . do port 69
gerar uma rampa de descida;

Interrupes do 8051 Interrupes do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

O circuito

Interrupes do 8051 Interrupes do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

O +rograma
#include <reg52.h>
sbit LED !2"#$%% de&ine ' v'ri'vel LED
%% vincul'd' 'o pino !2.#
bit (led 0$ %% de&ine ' v'ri'vel )ue indic'
%% o est'do do LED
%% De&ine ' &unc'o de 'tendi*ento ' interrupc'o
void 'cendeled (void) interrupt 0
{
i&((led0) %% veri&ic' o est'do 'tu'l do LED
{
(led+$ %% *ud' o est'do p'r' 'ceso
LED+$ %% 'cende o LED
}
else
{
(led0$ %% *ud' o est'do p'r' 'p'g'do
LED0$ %% 'p'g' o LED
}
}

Interrupes do 8051 Interrupes do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
void *'in()
{
,E 0-.+$ %% h'bilit' ' interrupc'o e-tern' 0
/012 0-0+$ %% con&igur' ' interrupc'o e-tern' 0
%% co*o bord' de descid'
(led 0-00$ %% de&ine est'do inici'l do LED co*o
%% 'p'g'do
LED 0-00$ %% 'p'g' o LED
3hile(+)$ %% per*'nece e* loop in&inito
}

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
T%+4!I5$#4!%0624'T$#4!%0
T%+4!I5$#4!%0624'T$#4!%0

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

+ossui . tempori7adoresEcontadores de " ou


%4 bits 8fam)lia $%9;

+ossui 6 tempori7adoresEcontadores de " ou


%4 bits 8fam)lia $.9;

-odos os tempori7adoresEcontadores operam


independentemente um do outro;

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

Estes contadores podem ser usados para

contagem de tempo;

contagem de eventos;

gerao de sinais +FG;

medio de largura de pulso;

etc2

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

=iagrama em blocos do tempori7adorEcontador


1$#ila!or
Interno
Di2i$or
por 12 T3n T4n
Tn
P3
Interrupo
T56n 7 0 'T81D)
T56n 7 1
'T81D)
T9n
'T61N)
:
1
1
T;n
'T61N)
INTn
P3
<n
'T81D)
?arramento de dados
interno

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

+odem atuar como contador 8com clocH


aplicado no pino -(, porta 69 ou como
tempori7ador 8usando o clocH interno9;

+odem gerara interrupo, quando a


contagem passa de #(<< 8ou #(<<<<9 para
#(## 8ou #(####9;

+ossuem 3 modos de operao;



Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
Godo -empori7ador 8usando o clocH interno9

!o modo tempori7ador o clocH dos


contadores obtido do prprio clocH do
microcontrolador, dividido por %.

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
Godo :ontador 8usando o clocH e(terno9

!o modo contador o clocH dos contadores


obtido dos pinos -# 8+6239 ou -% 8+62$9

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

;egistrador -:O!
-;# -<# -;% -<% *-# *E# *-% *E%
":' "=' "E' "<' ""' ">' "0' "?'
-:O!

-<( @ *ndica a ocorrncia de estouro do tempori7ador (;

-;( @ Iabilita ou desabilita a contagem do tempori7ador (



Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
G%2# G%2% :E-% J-%
bit# ?it 5
-GO=

J-( @ +ermite controlar a contagem pelo pino de interruo


e(terna;

:E-( @ seleciona o modo tempori7ador 8:E-(K#9 ou o modo


contador 8:E-(K%9;

G(2% e G(2# @ selecionam o modo de operao;


G#2# G#2% :E-# J-#
;egistrador -GO=

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

!o modo # o tempori7adorEcontador funciona


como tempori7ador ou contador de " bits 8em -I(9
com um divisor de $ bit 8divide por um valor entre .
e 6.9 em -L(
Godo #

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

!o modo % o tempori7adorEcontador funciona


como tempori7ador ou contador de %4 bits Muntando
os registradores -I( e -L( como um Bnico
registrador
Godo %

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

!o modo . o tempori7adorEcontador funciona


como tempori7ador ou contador de " bits em -L(2
Quando ocorre o estouro do registrador -L( o bit
-<( setado e -L( serC carregado com o valor
arma7enado em -I(, iniciando a contagem deste
valor
Godo .

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

!o modo 6 o registrador -I# funciona como


tempori7ador de " bits, gerando uma interrupo
como se fosse o timer %;

O registrador em -L# funciona como um


tempori7ador ou contador de " bits, gerando uma
interrupo como se fosse o timer #2

!este caso, o tempori7adorEcontador % pode


funcionar nos modos #, % ou . mas no serC capa7
de gerar interrupo2
Godo 6

Te*pori3adores do 8051 Te*pori3adores do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial
Godo 6

Inter7a(e 0erial do 8051 Inter7a(e 0erial do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

+ode funcionar no modo s)ncrono 'alf/duple( ou


no modo ass)ncrono full/duple(;

:omunicao serial s)ncrona 'alf/duple(

-ransmite ou recebe " bits serialmente pelo pino


;1=, sincroni7ados com um sinal de clocH pelo
pino -1=
*nterface ,erial

Inter7a(e 0erial do 8051 Inter7a(e 0erial do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

:omunicao serial ass)ncrona full/duple(

-ransmite e recebe " bits serialmente pelos


pinos -1 e ;1;
*nterface ,erial

Inter7a(e 0erial do 8051 Inter7a(e 0erial do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

+ara transmitir um bNte basta escrever no


registrador ,?D< que a transmisso inicia
automaticamente;

0o teminar a transmisso, uma interrupo pode


ser gerada para OavisarP que a transmisso
terminou;

0 recepo acontece automaticamente e uma


interrupo pode ser gerada para OavisarP que
e(iste um bNte pronto no registrador ,?D<;

O registrador ,?D< um registrador duplo,


sendo que um para a transmisso e o outro para
a recepo;
*nterface ,erial

Inter7a(e 0erial do 8051 Inter7a(e 0erial do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

;egistrador ,:O! controla e configura a


interface de comunicao serial
;egistradores de controle da *nterface ,erial
,G# ,G% ,G. ;E! -?" ;?" -* ;* ,:O!
?it # ?it 5

,G# e ,G% definem o modo de operao da


interface serial

Godo # modo s)ncrono com frequncia de


operao igual a freq de clocH dividida por %.;

Godo % modo ass)ncrono com frequncia de


operao determinada pelo -E:% e taman'o de
%#bit 8% start bit " bits de dados e % stop bit9;

Inter7a(e 0erial do 8051 Inter7a(e 0erial do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

Godo . modo ass)ncrono com frequncia de


operao igual a freq de clocH dividida por 6.
ou 43 8depende do bit ,GO= do registrador
+:O!9 e %% bits de dados 8% start bit " bits de
dados e . stop bits9;

Godo 6 modo ass)ncrono com frequncia de


operao determinada pelo -E:% e %% bits de
dados 8% start bit " bits de dados e . stop bits9;

Inter7a(e 0erial do 8051 Inter7a(e 0erial do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

,G.

no tem funo no modo #;

!o modo %, quando em n)vel lgico % desabilita


o pedido de interrupo se for recebido um stop
bit invClido;

!os modos . e 6, quando em n)vel lgico %


'abilita a comunicao serial entre vCrios
microcontroladores e desabilita o pedido de
interrupo se for recebido um nono bit de dado
igual a #

Inter7a(e 0erial do 8051 Inter7a(e 0erial do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

;E! em # desabilita a recepo e em % 'abilita a


recepo;

-?" define o calor do nono bit nos modos . e 6;

;?" indica o valor do nono bit recebido nos


modos 6 e 6;

-* indica que um pacote foi totalmente


transmitido, setado pelo IF da interface serial e
deve ser 7erado por softQare para permitir nova
interrupo;

;* indica que um pacote foi recebido, setado


pelo IF da interface serial e deve ser 7erado por
softQare para permitir nova interrupo;

Inter7a(e 0erial do 8051 Inter7a(e 0erial do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

!os modos % e 6, a ta(a de transmisso


controlada pelo -E:%, e dada pela seguinte
equao
Taxa=
2
SMOD
32

f
clock
12256TH1

Obs2 o uso de um cristal de clocH de %%,#$>.GI7


permite ta(a de transmisso de at >4##bps

Inter7a(e 0erial do 8051 Inter7a(e 0erial do 8051
2011 - Gabriel Kovalhuk 2011 - Gabriel Kovalhuk
UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial UTF! " #$%&' - Te(nolo)ia e* +e(atr,ni(a Industrial

+ara compatibili7ar os n)veis de tenso do circuito


digital com os valores definidos pelo padro ;,.6.
pode/se usar o circuito integrado G01.6.

Você também pode gostar