Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Paulossi

Duvidas com MikroC

Recommended Posts

Olá galera!!!

Estou migrando do CCS para o MikroC devido ao CCS não estar rodando bem no Windows Vista,porém tenho encontrado alguns problemas.

Não sou expert em programação,sou mais um entusiasta,o problema é o seguinte,estou tentando fazer um programa de teste que consiste no seguinte:

Usar push-bottons ligados no PORTA do PIC 16F628a,um para acender um led que ficará acionado por 10 segundos e outro para acender um outro led que ficará ligado por 15 segundos,no CCS o código que eu fiz ficou assim:

#include <16f628a.h>

#use delay(clock=4000000)

#fuses xt,nowdt,nocpd,mclr,no protect

#byte ra=0x05 //nomeando portA como ra

#byte rb=0x06 //nomeando portB como rb

#bit S1=ra.0 //nomeando RA0 como S1

#bit S2=ra.1 //nomeando RA1 como S2

#bit led1=rb.0 //nomeando RB0 como led 1

#bit led2=rb.1 //nomeando RB1 como led 2

void main(){

set_tris_a(0b00000011); //bits 0 e 1 do portA como entrada

set_tris_b(0); //portB como saida

rb=0; //reseta portB

for(;;) //condição de loop infinito

{

if(S1==0) //caso pressione a tecla S1 executa esse bloco

{

led1=1; //acende led 1

delay_ms(10000); //aguarda 10 segundos

led1=0; //apaga led 1

} //fim do bloco if

if(S2==0) //caso pressione a tecla S2 executa esse bloco

{

led2=1; //acende led 2

delay_ms(15000); //aguarda 15 segundos

led2=0; //apaga led 2

} //fim do bloco if

} //fim do bloco de loop infinito for

} //fim da label main()

Como podem ver é um programinha bem simples,estou tendo dificuldade com o teste dos if's,a estrutura principal do programa fica praticamente igual no MikroC,as unicas diferenças são as nomenclaturas de port e tris,porém se eu montar o if na mesma estrutura do programa acima ficará assim:

...

trisa=0b00000011; //bits 0 e 1 do portA como entrada

trisb=0; //portB como saida

portb=0; //reseta portB

...

if(porta.f0==0) //caso pressione a tecla S1 executa esse bloco

...

if(porta.f1==0) //caso pressione a tecla S2 executa esse bloco

...

Compilo o programa no MikroC e gravo no PIC normalmente,porém ao invés de esperar que eu pressione uma das teclas,o programa roda direto como se os if's não existissem,ele acende o led 1 por 10 segundos e apaga,depois acende o led 2 por 15 segundos e apagada,e fica assim por conta do loop.

Gostaria de saber como devo escrever o programa para que possa implementar botões no PIC,preciso nomear algo no inicio do programa para o compilador saber que usarei botões nas entradas??? Como fica a estrutura dos condicionais if???

Se alguém puder me ajudar eu ficarei muito agradecido,achei na net varios projetos mas as rotinas são muito avançadas e não consegui achar nenhum projeto parecido,desculpem o tópico gigante e desde já agradeço!!!!!!!!!!!!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá galera!!!

Estou migrando do CCS para o MikroC devido ao CCS não estar rodando bem no Windows Vista,porém tenho encontrado alguns problemas.

Não sou expert em programação,sou mais um entusiasta,o problema é o seguinte,estou tentando fazer um programa de teste que consiste no seguinte:

Usar push-bottons ligados no PORTA do PIC 16F628a,um para acender um led que ficará acionado por 10 segundos e outro para acender um outro led que ficará ligado por 15 segundos,no CCS o código que eu fiz ficou assim:

#include <16f628a.h>

#use delay(clock=4000000)

#fuses xt,nowdt,nocpd,mclr,no protect

#byte ra=0x05 //nomeando portA como ra

#byte rb=0x06 //nomeando portB como rb

#bit S1=ra.0 //nomeando RA0 como S1

#bit S2=ra.1 //nomeando RA1 como S2

#bit led1=rb.0 //nomeando RB0 como led 1

#bit led2=rb.1 //nomeando RB1 como led 2

void main(){

set_tris_a(0b00000011); //bits 0 e 1 do portA como entrada

set_tris_b(0); //portB como saida

rb=0; //reseta portB

for(;;) //condição de loop infinito

{

if(S1==0) //caso pressione a tecla S1 executa esse bloco

{

led1=1; //acende led 1

delay_ms(10000); //aguarda 10 segundos

led1=0; //apaga led 1

} //fim do bloco if

if(S2==0) //caso pressione a tecla S2 executa esse bloco

{

led2=1; //acende led 2

delay_ms(15000); //aguarda 15 segundos

led2=0; //apaga led 2

} //fim do bloco if

} //fim do bloco de loop infinito for

} //fim da label main()

Como podem ver é um programinha bem simples,estou tendo dificuldade com o teste dos if's,a estrutura principal do programa fica praticamente igual no MikroC,as unicas diferenças são as nomenclaturas de port e tris,porém se eu montar o if na mesma estrutura do programa acima ficará assim:

...

trisa=0b00000011; //bits 0 e 1 do portA como entrada

trisb=0; //portB como saida

portb=0; //reseta portB

...

if(porta.f0==0) //caso pressione a tecla S1 executa esse bloco

...

if(porta.f1==0) //caso pressione a tecla S2 executa esse bloco

...

Compilo o programa no MikroC e gravo no PIC normalmente,porém ao invés de esperar que eu pressione uma das teclas,o programa roda direto como se os if's não existissem,ele acende o led 1 por 10 segundos e apaga,depois acende o led 2 por 15 segundos e apagada,e fica assim por conta do loop.

Gostaria de saber como devo escrever o programa para que possa implementar botões no PIC,preciso nomear algo no inicio do programa para o compilador saber que usarei botões nas entradas??? Como fica a estrutura dos condicionais if???

Se alguém puder me ajudar eu ficarei muito agradecido,achei na net varios projetos mas as rotinas são muito avançadas e não consegui achar nenhum projeto parecido,desculpem o tópico gigante e desde já agradeço!!!!!!!!!!!!!!!!!!

testei seu código aqui e ele funcionou begal, acredito que o problema está na parte do seu circuito elétrico, segue anexo como eu montei o circuito no proteus. Se você quiser estou preparando um curso no proteus e vou coloca-lo no mercado livre. Até mais e qualquer duvida poste ai amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A grande vantagem do MikroC são suas bibliotecas para as mais diferentes aplicações.

No seu caso existe a biblioteca button feita especialmente para usar botões, então no seu caso, se você quiser que um led ligado no pino rb0 acenda quando pressionada um botão conectado no pino ra0 (considerando que pressionado seja informado "0") fica assim:

if(button(&PORTA,0,30,0){

portb.rb0=1;

}

para utilizar a função Button é necessário selecionar ela no Library manager.

a função button é muito versatil, possuindo até filtro de debouncing a estrutura da função é:

button(porto onde está ligado o botão,pino, tempo de bedouncing 30 é um valor bom, e o estado em que se ativa a chave)

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





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

×