Ir ao conteúdo
  • Cadastre-se

Chamada de função PIC linguagem C


santos.matheus

Posts recomendados

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.

Link para o comentário
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

Link para o comentário
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
}
}
}

Link para o comentário
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".

Link para o comentário
Compartilhar em outros sites

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...