Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
santos.matheus

Chamada de função PIC linguagem C

Recommended Posts

Boa tarde pessoal, alguém poderia me dizer como faço para "chamar" uma função na programação de microcontroladores utilizando linguagem C e o compilador CCS. Bom, eu desenvolvi um programa para verificação de senha através de um display LCD e um teclado matricial, contudo utilizo várias vezes a lógica para ler as teclas digitadas. Queria criar uma função para a leitura dessas teclas de modo que posso simplesmente chamá-la durante o desenrolar do programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo:

#include <18F4550.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //Crystal osc > 4mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=8000000) //meu clock

[COLOR="Red"][B]void inicia_pic(void)
{[/B][/COLOR]
SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_8);
SETUP_TIMER_2 (T2_DIV_BY_1,200,1);
setup_ccp1 (CCP_CAPTURE_RE);
setup_ccp2 (CCP_CAPTURE_RE);
enable_interrupts (INT_CCP1);
enable_interrupts (INT_CCP2);
enable_interrupts(INT_EXT);
ext_int_edge(1,H_TO_L);
enable_interrupts(INT_EXT1);
ext_int_edge(1,H_TO_L);
enable_interrupts (INT_TIMER1); //Habilitar Interrupções
enable_interrupts (INT_TIMER2); //Habilitar Interrupções
enable_interrupts (global);
set_timer1(3036); //Preload do timer1 64286 1ms @20Mhz e pres = 4
[COLOR="Red"][B]}[/B][/COLOR]

/*==============================
Rotina Principal:
================================*/

void main()
{
[COLOR="Red"][B]inicia_pic();[/B][/COLOR]

while (TRUE)
{
ALGUMA COISA AQUI!
}
}

Falou

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro MatheusLPS,

Muitíssimo obrigado por sua ajuda, abaixo irei postar o código com comentários do que eu pretendo fazer para que talvez você possa me auxiliar. Desde já muito obrigado.


#include <16f877a.h>
#use delay(clock=4000000)
#fuses XT

#include <lcd.c>

int digitar_senha(int i,int botao,int condicao,int confirma,int digito[],int senha_padrao[],int teste)
//função para o usuário digitar a senha
//é um avarredura usada em tres portas do pic para analisar qual botao foi digitado
//noo caso para uma senha de 4 digitos
{
teste=0;
for(i=0; i<4; i++)
{
while (condicao==0)
{output_high(pin_e1);
delay_ms(50);
if(input(pin_a3)){botao=1;condicao=1;}
if(input(pin_a4)){botao=2;condicao=1;}
if(input(pin_a5)){botao=3;condicao=1;}
output_low(pin_e1);

output_high(pin_e0);
delay_ms(50);
if(input(pin_a3)){botao=4;condicao=1;}
if(input(pin_a4)){botao=5;condicao=1;}
if(input(pin_a5)){botao=6;condicao=1;}
output_low(pin_e0);

output_high(pin_a0);
delay_ms(50);
if(input(pin_a3)){botao=7;condicao=1;}
if(input(pin_a4)){botao=8;condicao=1;}
if(input(pin_a5)){botao=9;condicao=1;}
output_low(pin_a0);
}
digito[i]=botao;
condicao=0;
delay_ms(200);
}
while(confirma==0)
//enquanto nao aperto o botao do pino e7 para confirmar a senha digitada fica em um loop infinito aguardando a confirmação
{if(input(pin_b7)) {confirma=1;}}
confirma=0;

for(i=0; i<4; i++)
{
if(digito[i]==senha_padrao[i])
//Agora analisa-se se os botões digitados foram iguais a senha padrão
//Para cada digito correto incrementa-se a variavel TESTE
//E se ela for igual a 4 a senha está correta
{teste++;}
digito[i]=0;
}
return teste;
//O valor da variável teste é necessário para continuação da função principal
}


void main (void)
{

while(true)
{
int teste;
//Tela de boas-vindas do programa
lcd_init();
printf(lcd_putc,"\t BEM-VINDO");
delay_ms(100);

//Logica para digitar uma senha
if(input(pin_e2))
{lcd_init();
printf(lcd_putc," DIGITE A SENHA");
delay_ms(100);}

//como faço para entrar na função "digitar_senha"?

if(teste==4)
{
//Senha correta
}

if(teste!=4)
{
//Senha inválida
}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua com dúvidas?

Você postou o código mas não informou mais nada.

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe não ter informado nada. O problema é que se você perceber dentro da função digitar_senha existe uma série de procedimentos como estruturas while, for, if ...

o que acontece é que quando chamo essa função no programa principal parece que não executa nada, que o programa não entra na estrutura while e muito menos retorna o valor desejado da variável "teste".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente usar o Proteus para debugar seu programa.

Veja esse video no tempo indicado(7:50)

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo, muito obrigado por enquanto, irei assistir o vídeo fazer algumas simulações e posto o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×