1. 8051 - Interrupção Def.: Consiste de um evento assíncrono que faz com que o fluxo de um programa seja desviado para uma Rotina de Tratamento de Interrupção (ISR). Faz uso da estrutura de controle da pilha pelo processador para armazenar automaticamente o endereço de retorno, assim como para recuperá-lo quando do final do tratamento. O evento assíncrono é gerado por um hardware externo ou interno ao 8051. O endereço da ISR é chamado Vetor de Interrupção. 1
Interrupção Programa Principal 2. Fluxo da Interrupção Vetor de Interrupção PC Rotina Tratamento Interrupção 2
2. Fluxo da Interrupção Programa principal Requisição da interrupção Seta bit de sinalização Atendimento da Interrupção Reseta bit de sinalização Programa principal 3
2. Fluxo da Interrupção PC pilha Vetor de Interrupção PC Tratamento da Interrupção RETI Pilha PC A preservação do conteúdo dos registradores fica por conta do programador 4
3. Fontes de Interrupção - 8051 Fonte Características Vetor INT0 Externa, Pino P3.2 0003h INT1 Externa, Pino P3.3 0013h T/C0 Interna T/C0 000Bh T/C1 Interna T/C1 001Bh Serial Serial 0023h 5
3. Fontes de Interrupção - 8051 ; INTERRUPCOES ;****************************** ORG 0000h JMP INICIO ORG 0003h JMP ISREX0 ; Ext0 ORG 000BH JMP ISRT0 ;Timer0 ORG 0013H JMP ISREX1 ; Ext1 ORG 001BH JMP ISRT1 ;Timer1 ORG 0023H JMP ISRSER ; Serial ISREX0:...... RETI ISRRT0:...... RETI ISREX1:...... RETI ISRRT1:...... RET ISRSER:...... RETI INICIO:... 6
4. Controle de Habilitação de Interrupções - 8051 Registro de Habilitação de Interrupção - IE IE EA --- --- ES ET1 EX1 ET0 EX0 habilita todos habilita int. serial habilita int. T/C1 habilita INT1 habilita int. T/C0 habilita INT0 Bit 1 Habilita Bit 0 Desabilita Para habilitar uma interrupção EA e seu enable individual devem estar ativados simultaneamente. 7
5. Interrupções - Externas Sensibilidade a borda de descida: Terminais amostrados a cada 12 ciclos de clock. Interrupção ocorre ao ser detectada uma borda de descida entre duas amostragens consecutivas. Sensibilidade a nível lógico baixo: Terminais amostrados ao final de cada instrução executada. Interrupção ocorre ao ser detectado nível lógico baixo 8
5. Interrupções - Externas Pinos /INT0 e /INT1 Borda ou nível Bits IE1 e IE0 do TCON = bits de sinalização Registro Timer Control - TCON TCON IEn (HW): 1 quando INTn 0 quand a int. é atendida IE1 IT1 IE0 IT0 ITn: 1 borda 0 nível 9
6. Prioridades de Interrupção - 8051 Pooling: INT0 T/C0 INT1 T/C1 Serial Registro de Controle de Nível Prioridade de Interrupção - IP IP --- --- --- PS PT1 PX1 PT0 PX0 Serial T/C1 INT1 T/C0 INT0 1- coloca em alta prioridade 0 prioridade normal 10
6. 1 CONSIDERAÇÕES Apenas uma interrupção de maior nível de prioridade (IP) interrompe outra de menor prioridade enquanto esta estiver sendo tratada (ISR), seja sensível a nível ou borda. Interrupções de mesmo nível de prioridade só serão tratadas após a ISR atual terminar. Se for sensível a nível ainda deve estar ativo o pedido, caso sensível a borda não precisa estar. A definição de nível de prioridade e pooling definem o tratamento de interrupções pedidas simultaneamente. O uso de reti faz com que a lógica de tratamento de interrupções seja restabelecida, o uso de ret comum faz com que não mais sejam tratados pedidos de interrupção. 11
7. Exemplo Interrupção Externa (INT 0) Rótulo Instrução/Diretiva Comentário ORG 0000H ; reset JMP Inicio ; salta endereço do vetor interrupção da INT 0 ORG 0003h ; vetor interrupção da INT 0 LMP ISR0 ; desvia para a Rotina de Serviço de Interrupção ; Inicialização dos registradores de controle Inicio: MOV IE,#00000001B ; inicializa registrador IE com EA = 1 e EX0 = 1 MOV TCON,#1 ; programa INT 0 sens. a borda de descida IT0 = 1 SETB EA ; habilita interrupções faz_algo: instrução 1 instrução 2 ; Programa principal ; início do programa principal ;... instrução n JMP faz_algo ;... ; programa faz_algo enquanto aguarda interrupção ; Rotina de serviço da interrupção (ISR Interrupt Service Routine) ISR0: instrução 1 ; início da ISR instrução 2 ;... instrução n RETI ;... ; retorna da interrupção 12
7. Exercício Interrupção Externa 1) Faça um programa que comute dois LEDs (LED0 P1.0 e LED1 P1.1). Uma chave é ligada no pino INT0: [CPU-82s59A \ projeto-ex_int e int_a.asm] a) Primeiro faça que a interrupção seja sensível a borda e depois sensível a nível. Tire as conclusões quanto a diferença no funcionamento. [idem alterando (;)] b) Repita o programa colocando duas chaves, uma em INT0 e outra em INT1, ambas a borda. Quatro leds devem ser ligados em P1. Quando INT0 for gerado o nibble deve ser incrementado, enquanto INT1 deve decrementá-lo. [CPU-82s59B\ projeto-ex_int e int_b.asm] 13
7. Exercício Interrupção Externa c) Repita o item (b) colocando uma única chave em INT0 e INT1, para gerá-los simultaneamente. Execute o programa e tire as conclusões. [CPU-82s59C \ projeto-ex_int e int_c.asm] (Proteus e Keil) d) Altere o programa anterior colocando INT1 em alta prioridade e INT0 em baixa prioridade. Execute o programa e tire as conclusões. [CPU-82s59C \ projeto-ex_int e int_c.asm] (Keil) (-;;) 14