Laboratório – Tratamento de Interrupções com o PIC 16F628A
 

O objetivo deste laboratório é mostrar ao aluno como funciona o recurso de interrupção através dos microcontroladores PIC. Neste laboratório também abordaremos a forma de tratamento de interrupção.

Uma tabela com o descritivo de cada uma das instruções do PIC pode ser encontrada AQUI.

Os slides da aula teórica pode ser baixados AQUI.

O Problema

Fazer um program que através de toque em um botão acenda um led. Com outro toque no botão o led apague.

O Montagem da Solução

O botão estará em RB0. O led estará em RA0. Conforme o circuito abaixo.

Solução 1: Sem interrupção

Abaixo o diagrama de Fluxo do programa e código sem o uso de interrupção:

Fluxograma:
Código:
__CONFIG  0x2D18

ORG 0x00			;Vetor de reset
GOTO CONFIGURACOES

CONFIGURACOES
	
	BSF  3H,5		;Liga o Bit 5 (RP0) do registrador 3h (STATUS); Seleciona banco 
				;de memória 1. TRISA e TRISB estão no banco 1
	MOVLW b'0000001'	;Move '00000001' para o registrador W 
	MOVWF 86H		;Move W para o registrador 86H (TRISB) ou Seja TRISB='00000001'
				;RB0 como INPUT e os demais pinos do PORTB como output
	CLRF 85H		;Todos os pinos do PORTA como OUTPUT
	BCF  3H,5		;Desliga o Bit 5 (RP0) do registrador 3h (STATUS)  seleciona o
				;banco de memória 0
	GOTO INICIO
INICIO
	BTFSS 6H,0		;Teste RB0
	GOTO INICIO		;Fica no loop até aparecer '1' em RB0

	BTFSS 5H,0		;Verifica se RA0 ja esta aceso
	GOTO LIGA_RA0		;Salta para instrucao que LIGA RA0
	GOTO DESLIGA_RA0	;Salta para a instrucao que desliga RA0

LIGA_RA0
    	BSF 5H,0		;Liga o pino 0 do PORTA (RA0)
	GOTO VERIFICA		;Vai para loop de verficacao de RB0

DESLIGA_RA0
    	BCF 5H,0		;Desliga o pino 0 do PORTA (RA0)

VERIFICA
	
	BTFSC 6H,0		;Teste RB0
	GOTO VERIFICA		;Fica no loop até RB0 voltar a '0'

	GOTO INICIO
END

Solução 2: Com interrupção

Abaixo o diagrama de Fluxo do programa e código com uso de interrupção:

Fluxograma:
Código:
__CONFIG  0x2D18

ORG 0x00			;Vetor de reset
GOTO CONFIGURACOES
ORG 0x04

	BTFSS 5H,0		;Verifica se RA0 ja esta aceso
	GOTO LIGA_RA0		;Salta para instrucao que LIGA RA0
	GOTO DESLIGA_RA0	;Salta para a instrucao que desliga RA0

LIGA_RA0
    	BSF 5H,0		;Liga o pino 0 do PORTA (RA0)
	GOTO SAIINT		;Vai para loop de verficacao de RB0

DESLIGA_RA0
    	BCF 5H,0		;Desliga o pino 0 do PORTA (RA0)

SAIINT
	BCF 0Bh,1		;Desliga a flag de interrupcao (ativada por hardware)
	RETFIE			;Retorna da Chamada da interrupcao

CONFIGURACOES
	BSF  0BH,7		;Liga as interrupcoes
	BSF  0BH,4		;Ativa interrupcao externa
	
	BSF  3H,5		;Liga o Bit 5 (RP0) do registrador 3h (STATUS)
				;Seleciona banco de memroria 1. TRISA e TRISB estao no banco 1
	MOVLW b'0000001'	;Move '00000001' para o registrador W 
	MOVWF 86H		;Move W para o registrador 86H (TRISB) ou Seja TRISB='00000001'
				;RB0 como INPUT e os demais pinos do PORTB como output
	CLRF 85H		;Todos os pinos do PORTA como OUTPUT
	BCF  3H,5		;Desliga o Bit 5 (RP0) do registrador 3h (STATUS)  seleciona o
				;banco de memoria 0
	GOTO INICIO
INICIO
	GOTO INICIO		;Fica no loop ateh ser gerada uma interrupcao em RB0

END