Aula Microprocessadores
Aula Microprocessadores
Aula Microprocessadores
Microprocessadores
Edição 2005/2006
Sistemas de interrupções
Interrupção...
• Acontecimento assíncrono, inesperado para um processador
• Resulta na invocação automática de uma subrotina
desencadeada por hardware (event-driven subroutine call)
Vcc
P0 P1 P2 P3 (P3.2 e P3.3)
RI
– RI, TI
0023h
Pedidos de • Pinos
interrupção
TI – INT0 = P3.2
TF1 001Bh – INT1 = P3.3
0
INT1 IE1 0013h
1
Bit
IT1
Pino
Interrupções externas
• Assinaladas nos bits IE0 (INT0) e IE1 (INT1) do registo TCON
• Activas ao nível baixo ou à transição descendente no pino
respectivo (P3.2 para INT0, P3.3 para INT1)
• Activação à transição descendente
– É necessário que o bit ITx=1
– O bit IEx é limpo automaticamente quando a rotina de
atendimento é invocada
• Activação ao nível baixo
– Quando o bit ITx=0
– O bit IEx terá que ser limpo manualmente por software
Gestão do atendimento
• Registos IE e IP
– IE permite activar individual ou globalmente o atendimento dos
pedidos de interrupção
– IP permite definir duas classes de prioridade no atendimento dos
pedidos pendentes
Registo IP
Interrupções no dScope...
P1.6
P1.6
cseg at 0000h
ljmp main ; Programa principal
Barreira óptica...
cseg at 0100h
main: mov total,#0 ; Inicializa variável
setb it0 ; INT0 activo à transição
mov ie,#81h ; EA = EX0 = 1
newbox: mov box,#0 ; Caixa vazia...
setb P1.6 ; Sobe êmbolo
clr P1.7 ; Arranca transportador
wait: mov a,box ; Espera que
cjne box,#5,wait ; a caixa encha
setb P1.7 ; Pára transportador
clr p1.6 ; Baixa êmbolo
inc total ; Mais uma caixa pronta...
sjmp newbox
end
Botão rotativo...
• Possível solução:
– Programa principal
• Inicializa variáveis e configura o sistema de interrupções
• Trata de outras coisas...
– Rotina de atendimento da interrupção
• Invocada por uma descida na saída A (ligada a INT1)
• Testa a saída B e actualiza a frequência de
acordo com o sentido de rotação detectado.
dseg at 30h
freq: ds 2 ; Frequência
Botão rotativo...
; Continuação do programa principal
; --------------------------------------------------
cseg at 0100h
main: clr a ; Inicializa variável
mov freq,a ; MSB = 0
mov freq+1,a ; LSB = 0
setb it1 ; INT1 activo à transição
mov ie,#84h ; EA = EX1 = 1
sjmp $
Botão rotativo...
incr: mov a,freq+1 ; Verifica se já chegou ao
cjne a,#9Fh,ok ; valor máximo. Nesse
mov a,freq ; caso não faz nada!
cjne a,#8Ch,ok ; Nota: 35999 = 8C9Fh
reti
ok: inc freq+1 ; LSB++
mov a,freq+1
jnz exiti
inc freq ; Se LSB=0 então MSB++
exiti: reti ; Fim de interrupção
end
Avaliação e aprofundamento...
• Perceber, conhecer:
– Os conceitos genéricos associados às interrupções
– As funcionalidades oferecidas pelo sistema de interrupções da
família 51
• Estudar:
– Livro 1, pp. 183 a 185, 189 a 193
– Livro 2, pp. 275 e 276
– 80C51 family architecture, pp. 15
– 80C51 family hardware description, pp. 16 a 18