PROJETO 8: Implementações utilizando o PIC 16F84
DEL - ________
1) Verifique o funcionamento dos programas abaixo.
;
;
;
;
PROGRAMA 1
PROGRAMA DESENVOLVIDO NO LIVRO TEXTO.
SISTEMA PARA REPRESENTAR O ESTADO.
DE UM BOTÃO ATRAVÉS DE UM LED.
#INCLUDE <P16F84.INC>
; DEFINIÇÕES
#DEFINE
BANK0 BCF STATUS,RP0
#DEFINE
BANK1 BSF STATUS,RP0
; Pinos de Entrada
#DEFINE
BOTAO
PORTA,2;PORTA DO BOTÃO
; 0 -> PRESSIONADO
; 1 -> LIBERADO
; Pinos de Saída
#DEFINE
;
;
;
INICIO
LED
PORTB,0;PORTA DO LED
; 0 -> APAGADO
; 1 -> ACESO
RESET
ORG
0x00
GOTO
INICIO
Interrupção
ORG
0x04 ;ENDEREÇO INTERRUPÇÃO
RETFIE ;RETORNA DA INTERRUPÇÃO
Início
BANK1
MOVLW B'00000100'
MOVWF TRISA ;DEFINE RA2 COMO ENTRADA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'10000000'
MOVWF OPTION_REG
;PRESCALER 1:2 NO TMR0 - PULL-UPS DESABILITADOS
MOVLW B'00000000'
MOVWF INTCON
BANK0
; Inicialização de Variáveis
CLRF
PORTA
CLRF
PORTB
; Rotina Principal
MAIN
BTFSC BOTAO;O BOTÃO ESTÁ PRESSIONADO?
GOTO
BOTAO_LIB;NÃO
GOTO
BOTAO_PRES;SIM
BOTAO_LIB
BCF
GOTO
BOTAO_PRES
BSF
GOTO
END
LED;APAGA O LED
MAIN
LED;ACENDE O LED
MAIN
; PROGRAMA 2
; PROGRAMA DESENVOLVIDO NO LIVRO TEXTO.
; INCREMENTA VALOR MOSTRADO EM PORTB DE MIN.
; ATÉ MAX AO PRESSIONAR O BOTÃO.
; ATINGIDO MAX PASSA A DECREMENTAR.
#INCLUDE <P16F84.INC>
; DEFINIÇÕES
#DEFINE
BANK0 BCF STATUS,RP0
#DEFINE
BANK1 BSF STATUS,RP0
; VARIÁVEIS
CBLOCK 0x0C
CONTADOR;ARMAZENA O VALOR DA CONTAGEM
FLAGS ;ARMAZENA OS FLAGS DE CONTROLE
FILTRO ;FILTRAGEM PARA O BOTÃO
ENDC
#DEFINE
SENTIDOFLAGS,0;FLAG DE SENTIDO
; 0 -> SOMANDO
; 1 -> SUBTRAINDO
; Constantes
MIN
EQU .1 ;VALOR MÍNIMO PARA O CONTADOR
MAX
EQU .10;VALOR MÁXIMO PARA O CONTADOR
T_FILTRO
EQU .10; FILTRO PARA BOTÃO
; Pinos de Entrada
#DEFINEBOTAO PORTA,2;PORTA DO BOTÃO
; 0 -> PRESSIONADO
; 1 -> LIBERADO
;
RESET
ORG
0x00
GOTO
INICIO
;
Interrupção
ORG
0x04
RETFIE
; INICIO DO PROGRAMA
INICIO
BANK1
MOVLW B'00000100'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'10000000'
MOVWF OPTION_REG;PRESCALER 1:2 NO TMR0
MOVLW B'00000000'
MOVWF INTCON ;INTERRUPÇÕES DESLIGADAS
BANK0
; Inicialização de Variáveis
CLRF
PORTA
CLRF
PORTB
MOVLW MIN
MOVWF CONTADOR
; Rotina Principal
MAIN
MOVLW T_FILTRO
MOVWF FILTRO
CHECA_BT
BTFSC BOTAO
GOTO
MAIN
DECFSZ FILTRO,F
GOTO
CHECA_BT
TRATA_BT
BTFSS SENTIDO;SENTIDO=0?
GOTO
SOMA
;SIM
SUBTRAI
DECF
MOVLW
SUBWF
BTFSC
GOTO
INCF
BCF
GOTO
SOMA
INCF
MOVLW
;NÃO
CONTADOR,F
MIN
CONTADOR,W;W = CONTADOR - MIN
STATUS,C;RESULTADO NEGATIVO?
ATUALIZA;NÃO : CONTADOR >= MIN
CONTADOR,F;SIM : CONTADOR < MIN
SENTIDO
MAIN
CONTADOR,F
MAX
SUBWF
BTFSS
GOTO
BSF
GOTO
ATUALIZA
MOVF
MOVWF
BTFSS
GOTO
GOTO
END
CONTADOR,W;W = CONTADOR - MAX
STATUS,C;RESULTADO POSITIVO?
ATUALIZA;NÃO : CONTADOR < MAX
SENTIDO;SIM : CONTADOR >= MAX
MAIN
CONTADOR,W
PORTB
BOTAO;BOTÃO continua pressionado?
$-1
MAIN
Exemplo de sinal gerado por uma chave ao ser acionada:
Exercícios:
1) Crie um programa que faça um led qualquer acender T segundos após o botão ser pressionado.
2) Crie um programa que apresente apenas um dos leds ligados ao microcontrolador acendendo durante 5 segundos.
Após este tempo, um novo led deverá ser aceso, de acordo com a seqüência: led-0, led-1, led-2, led-3, led-4, led-5,
led-6, led -7, led -0 ...
3) Crie um programa que inverta a seqüência de acendimento acima quando o botão for pressionado.
Tabela para auxiliar a simulação dos programas: MIN ______ , MAX ______ e T_FILTRO ______
FLAG
FILTRO
CONTADOR
W
PORTA
PORTB STATUS
Z C
Download

Utilizando o PIC - Tratamento de Bounce