Ir ao conteúdo

Qual comando devo usar??


Sugoi

Posts recomendados

Postado

Boa noite pessoal, eu estou criando uma fechadura controlada por senha usando como base minhas pesquisas, estou utilizando o PIC 16F628A e eu travei em uma parte... Eu queria saber qual comando devo utilizar para que o pic reconheça que o código que está sendo digitado é o correto, sendo que ao completar um sequencia de 4 digitos e o mesmo estiver correto, o LED verde deve acender, e caso essa mesma sequencia estiver incorreta, o vermelho deve acender, e queria saber se meu programa e circuito estão certos. Alguém pode me ajudar com isso? Seria de grande ajuda

Ja ia me esquecendo, sobre as definicões de entradas e saídas do PIC, está tudo certo?

semttulo2do.png

	LIST	p=16f628a  				;Escolhe Microcontrolador
#INCLUDE <P16F628A.INC> ;Inclui Arquivos de definição do PIC

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#DEFINE BANK0 BCF STATUS, RP0 ;Seta BANK0 da Memória
#DEFINE BANK1 BSF STATUS, RP0 ;Seta BANK1 da Memória
#DEFINE BANK2 BCF STATUS, RP1 ;Seta BANK0 da Memória
#DEFINE BANK3 BSF STATUS, RP1 ;Seta BANK1 da Memória
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0x00 ;Endereço Inicial de Processamento caso Resetado
GOTO INICIO ;Volta ao inicio do programa
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0X04 ;Endereço Inicial de Processamento caso Interrompido
RETFIE ;Volta ao ponto que ocorreu o desvio
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO
BANK1

MOVLW B'10000000' ;Define Pull - UP do Bit RBPU
MOVWF OPTION_REG ;Armazena no registro OPTION_REG

MOVLW B'00000000' ;Define Entrade e Saída (I/O)
MOVWF INTCON


MOVLW B'00000000' ;Define Entrade e Saída (I/O)
MOVWF T1CON

MOVLW B'00001011' ;Define Entrade e Saída (I/O)
MOVWF PCON

MOVLW B'11000010' ;Define Entrade e Saída (I/O)
MOVWF TRISA ;Pinos do PORTA

MOVLW B'11110000' ;Define Entrada e Saída (I/O)
MOVWF TRISB ;Pinos do PORTB


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

BANK0

MOVLW B'00000111' ;Define Entrade e Saída (I/O)
MOVWF CMCON

MOVLW B'00000000' ;Define Entrade e Saída (I/O)
MOVWF T2CON

MOVLW B'00000000' ;Define Entrade e Saída (I/O)
MOVWF CCP1CON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO2
BSF PORTB, 1 ;Liga Pino 1 do PORTB
BCF PORTB, 2 ;Desliga Pino 2 do PORTB
BCF PORTB, 3 ;Desliga Pino 3 do PORTB


BTFSC PORTB, 4 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_1 ;Salta para "N_1"

BTFSC PORTB, 5 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_4 ;Salta para "N_4"


BTFSC PORTB, 6 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_7 ;Salta para "N_7"

BTFSC PORTB, 7 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_10 ;Salta para "N_10"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

BCF PORTB, 1 ;Desliga Pino 1 do PORTB
BSF PORTB, 2 ;Liga Pino 2 do PORTB
BCF PORTB, 3 ;Desliga Pino 3 do PORTB

BTFSC PORTB, 4 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_2 ;Salta para "N_2"

BTFSC PORTB, 5 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_5 ;Salta para "N_5"


BTFSC PORTB, 6 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_8 ;Salta para "N_8"

BTFSC PORTB, 7 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_0 ;Salta para "N_0"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

BCF PORTB, 1 ;Desliga Pino 1 do PORTB
BCF PORTB, 2 ;Desliga Pino 2 do PORTB
BSF PORTB, 3 ;Liga Pino 3 do PORTB

BTFSC PORTB, 4 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_3 ;Salta para "N_3"


BTFSC PORTB, 5 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_6 ;Salta para "N_6"


BTFSC PORTB, 6 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_9 ;Salta para "N_9"

BTFSC PORTB, 7 ;Testa o bit e salta uma linha se for 0
GOTO $+2 ;Pula 2 linhas
GOTO $+2 ;Pula 5 linhas
GOTO N_11 ;Salta para "N_11"

GOTO INICIO2 ;Volta para o começo do programa
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; CONFIGURAÇÃO DAS TECLAS ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_0 MOVLW .0 ;Linha 0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_1 MOVLW .1 ;Linha 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_2 MOVLW .2 ;Linha 2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_3 MOVLW .3 ;Linha 3

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_4 MOVLW .4 ;Linha 4

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_5 MOVLW .5 ;Linha 5

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_6 MOVLW .6 ;Linha 6

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_7 MOVLW .7 ;Linha 7

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_8 MOVLW .8 ;Linha 8

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_9 MOVLW .9 ;Linha 9

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_10 MOVLW .10 ;Linha *

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

N_11 MOVLW .11 ;Linha #

Obrigado galera do Clube do Hardware

Postado
Não existe um "comando" que faça todo o trabalho de fazer a varredura do teclado e a decodificação do mesmo.

Você deverá desenvolver um algorítimo para fazer essa parte.

Disso eu sei, mas eu queria saber como fazer isso, por exemplo

nesse comando"N_3 MOVLW .3" Eu estou mostrando que o botão a ser configurado será o 3, mas eu queria saber como configurar esse tal botão de forma que ao ser apertado o PIC perceba se ele é o correto, se ele é o segundo botão apertado... assim por diante

minha lógica é o seguinte, quando o botão 3 do teclado ser apertado, o programa deve conferir se é o certo, se não for o certo devo usar o GOTO e pular pra outro comando, e se for o certo, usar o GOTO novamente mas pular para outro comando diferente do errado, sendo que um levará a abertura da fechadura. Sendo assim, eu queria saber qual comando eu devo usar para que o PIC reconheça qual é a unica senha que permitira passar

Obrigado pela sua resposta Projetos_afg

Postado

Só uma dica:

evite ficar usando "GOTO $+3" ou mesmo GOTO LABEL, isso deixa o programa

as vezes difícil de entender, dê preferência as subrotinas CALL.

esse seu código, terá que adcionar debouncing para as teclas e rotinas para verificar se o botão ja foi solto.

Veja se o código abaixo te ajuda em algo, não testei


FLAG_DIGITOS
DIGITO
BIT_0_SENHA
BIT_1_SENHA
BIT_2_SENHA
BIT_3_SENHA
SENHA_1
SENHA_2
SENHA_3
SENHA_4
ENDC


CALL ZERA_REGISTRADORES_SENHA
INICIO2
.
.
.
.

N_3
MOVLW .3
CALL ARMAZENA_VALOR
GOTO INICIO2

ARMAZENA_VALOR
MOVWF DIGITO
INCF FLAG_DIGITOS

MOVLW B'00000001'
XORWF FLAG_DIGITO,W
BTFSS STATUS,Z
GOTO DIGITO_4

MOVLW B'00000010'
XORWF FLAG_DIGITO,W
BTFSS STATUS,Z
GOTO DIGITO_3

MOVLW B'00000011'
XORWF FLAG_DIGITO,W
BTFSS STATUS,Z
GOTO DIGITO_2

MOVLW B'00000100'
XORWF FLAG_DIGITO,W
BTFSS STATUS,Z
GOTO DIGITO_1

DIGITO_4
MOVF DIGITO,W
MOVWF BIT_3_SENHA
RETURN

DIGITO_3
MOVF DIGITO,W
MOVWF BIT_2_SENHA
RETURN

DIGITO_2
MOVF DIGITO,W
MOVWF BIT_1_SENHA
RETURN

DIGITO_1
MOVF DIGITO,W
MOVWF BIT_0_SENHA
CALL CHECA_SENHA
RETURN

CHECA_SENHA

MOVF BYTE_3_SENHA,W
XORWF SENHA_4
BTFSS STATUS,Z
GOTO SENHA_ERRADA

MOVF BYTE_2_SENHA,W
XORWF SENHA_3
BTFSS STATUS,Z
GOTO SENHA_ERRADA

MOVF BYTE_1_SENHA,W
XORWF SENHA_2
BTFSS STATUS,Z
GOTO SENHA_ERRADA

MOVF BYTE_0_SENHA,W
XORWF SENHA_1
BTFSS STATUS,Z
GOTO SENHA_ERRADA

GOTO SENHA_CORRETA

SENHA_CORRETA
.
. ; AQUI VOCÊ CONFIGURA OS LEDS E A SAÍDA PARA A TRANCA
.
.
CALL ZERA_REGISTRADORES_SENHA
RETURN

SENHA_ERRADA
.
. ; AQUI VOCÊ CONFIGURA OS LEDS E A SAÍDA PARA A TRANCA
.
.
CALL ZERA_REGISTRADORES_SENHA
RETURN

ZERA_REGISTRADORES_SENHA

CLRF FLAG_DIGITO
CLRF BYTE_0_SENHA
CLRF BYTE_1_SENHA
CLRF BYTE_2_SENHA
CLRF BYTE_3_SENHA
CLRF DIGITO
RETURN



          CBLOCK   H'20'

  • Coordenador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!