Microcontroladores no 8051 Prof. Guilherme Peron Prof. Heitor S. Lopes Prof. Ronnier Rohrich Prof. Rubão
O que é interrupção? Interrupção 2
Definição Qualquer evento interno ou externo que obriga o microcontrolador a suspender o que está fazendo para atender o evento que o interrompeu. Para que serve? Executar uma tarefa de prioridade mais alta. Funcionamento: O programa é desviado para um outro ponto da memória de programa onde se encontra a rotina de atendimento à interrupção (+- como uma subrotina). Após executar a rotina, o microcontrolador volta ao ponto imediatamente seguinte de onde foi interrompido. 3
Qual a diferença entre um CALL e uma Interrupção? 4
R: O CALL é uma instrução programada no Software para acontecer em um momento específico. Já a interrupção, não se sabe quando irá ocorrer. 5
Ordem dos eventos para atendimento de uma interrupção: 1) O valor atual do Program Counter (PC) é salvo na pilha interna (LSB primeiro); 2) de prioridade igual ou inferior são bloqueadas; 3) No caso de Timer e interrupções externas (INT0 e INT1) o flag correspondente é zerado; 4) A execução do programa é desviada para um endereço predeterminado para executar a rotina de tratamento de interrupção. 5) Ao final da rotina de interrupção está a instrução RETI, para restaurar o PC da pilha e o estado de interrupção anterior. 6
Interrupção vetorada e não-vetorada Não-vetorada: os endereços de desvio são fixos. Método comum à maioria dos microcontroladores. Vetorada: o dispositivo que interrompeu fornece o endereço (total ou parcial) de início de sua rotina de atendimento. Método especial para microcontroladores avançados. Mascaramento Controle via software da permissão para interromper. Origem e Prioridade: O microcontrolador deve ser capaz de determinar qual o dispositivo que o interrompeu e atendê-lo de acordo com uma lista de prioridades determinada pelo usuário. 7
8
Ordem de varredura das interrupções Resolve conflitos para interrupções concomitantes de mesma prioridade 9
IE (A8h): Interrupt Enable habilita interrupções (todas, externas, timers ou serial) EA: Enable All ET2/ET1/ET0: Enable Timer 2, 1, 0 ES: Enable Serial EX1/EX0: Enable External 1, 0 (INT1, INT0) 10
IP (B8h): Interrupt Priority estabelece a prioridade no atendimento de cada interrupção (alta ou baixa) - PT2/PT1/PT0: Priority Timer 2, 1, 0 - PS: Priority Serial - PX1/PX0: Priority External 1, 0 11
Controle das 12
Este registrador do SFR é compartilhado entre as interrupções e os timers. TF1 e TF0 flags de interrupção dos timers IE1 e IE0 flags das interrupções externas IT1 e IT0 seleção de interrupção externa por borda (1) ou por nível (0). 13
Bits que são testados para verificar se houve ou não uma interrupção. Os flags são amostrados em S5P2 de cada Ciclo. 14
Rotina de Atendimento Observar a possível sobreposição com os endereços de atendimento de outras interrupções ORG 0013h ;vetor da interrupção externa 1 EXT1: PUSH ACC ;salva acumulador PUSH PSW ;salva estado atual do programa MOV PSW, #08H ;muda para o banco de reg. 1 ;detalhes específicos da rotina POP PSW ;recupera estado ant. do prog. POP ACC ;recupera acumulador RETI 15
Muito importante!!!!!!!!!!!!!!! Ao utilizar interrupções observar: O uso adequado dos pinos do port P3 Inicializar a pilha (Stack Pointer SP) em um endereço adequado Reservar espaço de memória para as rotinas de tratamento de interrupções (não utilizar os endereços iniciais da MP) Quando necessário, preservar na pilha: PSW, DPTR (DPH/DPL), A, B, R0-R7* Lembrar que as interrupções externas podem ser ativadas independentemente por nível (ITi=0) ou por borda de descida (ITi=1) 16
no AT89C5131 17
Registradores IEN0 e IEN1 Verificar também IPL0, IPH0, IPL1, IPH1 18
Vetores de Interrupção do AT89C5131 19