Interrupções no 8051
Disciplina: Microcontroladores
Prof. Remy Eskinazi, MSc
UPE - POLI
1
O que é uma Interrupção?
• Ocorre quando o processador é solicitado a
interromper uma atividade atual para atender
outra de maior urgência naquele instante
EXT1
MOV A, #0FFh
INC DPTR
MOV R1, 0
MOV R2, 1
EXT1: PUSH 0Ah
PUSH 03H
MOV IE, #0FFh
RETI
MOV IE, #0
SETB 0
2
Outro exemplo
Program Execution
…
mov a, #2
mov b, #16
mul ab
mov R0, a
mov R1, b
mov a, #12
mov b, #20
mul ab
add a, R0
mov R0, a
mov a, R1
addc a, b
mov R1, a
end
interrupt
ISR:
orl
P1MDIN, #40h
orl
P1MDOUT,#40h
setb P1.6
here: sjmp here
cpl P1.6
reti
return
3
Características das interrupções
• Vetorização – Cada interrupção tem um vetor (endereço) onde
começa a rotina de atendimento;
• Mascaramento – Cada interrupção pode ser habilitada
(reconhecida) ou não em dado momento;
• Priorização – As interrupções podem ter um grau de prioridade
de forma a serem “escalonáveis”
• Modo de acionamento – Maneira como as interrupções são
acionadas
– HW
• Transição
• Nível
– SW
• Instruções INT
4
Mapa de Vetores das interrupções no
8051
ROM
07FFh
:
:
:
:
0033h
Timer 2
(8052/32)
0032h
002Bh
Serial Port
002Ah
0023h
Timer 1
0022h
001Bh
Ext. Int. 1
001Ah
0013h
Timer 0
0012h
000Bh
Ext. Int. 0
000Ah
0003h
Reset
0002h
0000h
8 bytes
5
Fontes de interrupção
• O 8051 apresenta 5 fontes de interrupções
–
–
–
–
–
External Interrupt 0
+
Timer 0 overflow
Priorização natural
External Interrupt 1
(Pooling sequence)
Timer 1 overflow
_
Serial Port events (buffer full, buffer empty)
• Variantes do 8051 apresentam mais fontes…
– timers, programmable counter array, ADC,
more external interrupts, another serial port
(UART)
6
Seqüência de interrupção
Se um pedido de interrupção ocorrer E o flag
da interrupção estiver habilitada E o flag de
habilitação global estiver habiltado E na
seqüência correta das prioridades, então:
1.
2.
3.
O PC atual é colocado na pilha;
A execução do programa continuano vetor da interrupção (PC
 (vetor) );
Quando a instrução RETI é encontrada o valor no topo da
pilha é carregado no PC e a execução retorna para o ponto
anterior a interrupção
7
Registradores de Controle das
Interrupções
IE – Interrupt Enable
Habilita as interrupções para as 5 fontes do 8051 standard
Serial (UART0)
Timer 1
External 1
Flag de habilitação global
Timer 0
External 0
1 = Habilita
0 = Desabilita
8
Registradores de Controle das
Interrupções
IP – Interrupt priority
0B8h
Prioriza as interrupções para as 5 fontes do 8051 standard
Serial (UART0)
Timer 1
External 1
Timer 0
External 0
1 = Alta prioridade
0 = Baixa prioridade
9
Controle das Interrupções
• Registrador Timer Control (TCON)
Controle das
interrupções
externas
Controle dos
Timers/Counters
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TCON (0X88)
Modo acionamento de int Ext0
Flag de interrupção int Ext0
Modo acionamento de int Ext1
Flag de interrupção int Ext1
Liga / desliga timer 0
Flag de interrupção int timer 0
Liga / desliga timer 1
Flag de interrupção int timer 1 10
Controle das Interrupções
• Registrador Serial Control (SCON)
Controle das
interrupções
externas
Controle dos
Timers/Counters
SM0
SM1
SM2
REN
TB8
RB8
RI
TI
SCON (0X98)
Flag de interrupção TX Serial
Flag de interrupção RX Serial
Recebe bit 8 (9o bit)
Transmite bit 8 (9o bit)
Habilita Recepção
Modo funcional 2
Modo funcional 1
Modo funcional 0
11
Programa acha zero com controle de
interrupção
INÍCIO
DPTR  ENDEREÇO INICIAL
Objetivo: Determinar
se em um range de
memória existe um
byte 0
A  M(DPTR)
A=0 ?
S
F0  1
N
DPTR  DPTR+1
N
FIM?
S
RET
12
Programa acha zero com controle de
interrupção
; Programa Acha Zero
; Autores: Turma Dispositivos
; Descrição: O Programa faz a busca no range 0000h a 01FFh de um byte 0.
; Se existir, sinalizamos com flag F0=1 e saímos do programa com DPTR=Posição
; do byte 0.
;***Reset***
ORG 0;
Diretiva de origem no endereco 0
LJMP INICIO;
Salto para o inicio do programa
;
;
***INT EXTERNA_0***
ORG 03h;
Externa 0
LJMP EXTERNA_0;
Salta para Rotina Externa 0
;
;
***INT TIMER_0***
ORG 0Bh;
TIMER 0
LJMP TIMER_0;
Salta para Rotina TIMER 0
;
;
***INT EXTERNA_1***
ORG 13h;
EXTERNA 1
LJMP EXTERNA_1;
Salta para Rotina EXTERNA 1
;
;
***INT TIMER_1***
ORG 1Bh;
TIMER 1
LJMP TIMER_1;
Salta para Rotina TIMER 1
;
;
***INT SERIAL***
ORG 23h;
SERIAL
LJMP SERIAL_COM;
Salta para Rotina SERIAL_COM
13
Programa acha zero com controle de
interrupção
INICIO:
MOV DPTR, #0h
CLR F0
MOVX A, @DPTR
; Inicia Ponteiro
; Limpa Flag F0
REPETE:
; Poe o dado da posição indicada pelo DPTR no
; Acumulador
CJNE A, #0h, CONTINUA ; Pula para CONTINUA se A=! 0
ACHOU:
SETB F0
; Sinaliza o encontro do valor zero com F0=1
SJMP FIM
; Finaliza programa
CONTINUA: INC DPTR
; Se não encontrou byte zero, aponta para próxima posição
MOV A, DPH
;
CJNE A, #02h, REPETE
; Se DPTR<0200h pula para REPETE
FIM:
SJMP FIM
; FIM
;Continua ...
14
Programa acha zero com controle de
interrupção
;************************* TRATAMENTO DAS INTERRUPÇÕES *************************
EXTERNA_0:
NOP
RETI
; Código de tratamento de externa0
TIMER_0:
NOP
RETI
; Código de tratamento de timer0
EXTERNA_1:
NOP
RETI
; Código de tratamento de externa1
TIMER_1:
NOP
RETI
; Código de tratamento de timer1
SERIAL_COM:
NOP
; Código de tratamento de serial
RETI
;*******************************************************************************
END
; Fim de Arquivo p/ compilação
15
Simulação
Fazer a simulação do programa Acha zero com controle de interrupção
•
•
•
•
Fazer a simulação do programa normalmente;
O que deve ser acrescentado ao programa para que este habilite as interrupções?
Acionar os bits indicados para solicitação da interrupção;
Verifique se a rotina de tratamento correspondente é atendida
“A diferença entre
Sonho e Realidade é a
quantidade certa de
Tempo e Trabalho”
W. Douglas
16
Download

Aula_4_int8051