Ir ao conteúdo

Posts recomendados

Postado

Olá Malta,

 

Já algum tempo (anos )que nao programo e estou meio que enferrujado, estou a tentar fazer um programa simples um programa aonde tenho 3 botões um para incrementar tempo outro decrementa tempo e outro arranca o temporizador, apos arrancar o temporizador este faz um tempo de espera depois liga a saida GPIO0 por 5 segundos espera o mesmo tempo e liga a saida 5 segundos infinitamente ate ficar sem energia.

 

O problema estano tempo de espera eu uso uma variavel para saber o numero incrementado depois faz um calculo para passar esse numero para minutos e faz um ciclo esse ciclo nao tem como por a funcionar fica o codigo

 

  Citação
#include <xc.h>
#include <stdio.h>
#include <stdint.h>


#define _XTAL_FREQ 4000000 //oscilador interno 4 MHZ

//defenir entradas e saidas

#define Start GPIO5
#define Incrementa GPIO4
#define Decrementa GPIO3
#define Saida GPIO0


#pragma config WDTE=OFF , BOREN=OFF , PWRTE=ON , MCLRE=OFF , FOSC=INTRCIO //


//inicialização de variaveis

 char tempo;
 char i;
char result;


void ini (void){           //inicializaçãode variaveis
//OSCCAL = 0b11111100;
 TRISIO = 0b00111000;
 Saida=0;
 i=0;
}


void main(void) {
    ini();
    while (Start!=1){
        if (Incrementa==1)
            tempo++;
        if (Decrementa==1)
            tempo--;
    }
      result=tempo*12;
    while(1){
    
      for (i=0;i<result;i++)
        {
              __delay_ms(5000);
         }
        Saida = 1;
        __delay_ms(5000);
        Saida = 0;
    }
    
}

 

Expandir  

 

 

se eu puser o ciclo for (i=o;i<result;i++) se trocar o result pelo numero 12 for(i=0;i<12;i++) tudo gunciona direito usando o result nada funciona.

 

o que estou a fazer de mal será o tipo de variavel? mas ja usei char unsigned char .

 

Cumprimentos

  • mês depois...
  • Membro VIP
Postado

Dando uma repassada...

 

Amigo vejo 2 problemas...

while (Start!=1)

{

if (Incrementa==1) tempo++; //se não esperar soltar a tecla, tempo++ vai ter valor aleatório pois a contagem é muito rápida. Tenta algo como...

while(Incrementa==1);//que deve esperar você soltar o botão (!)

if (Decrementa==1) tempo--; //o mesmo...

}

Mesmo assim você deve colocar um filtro na entrada.

 

o outro

result=tempo*12; //se tempo for maior que 21, result seria catastroficamente maior que 255 que é o maior que cabe num char. Altere pra unsigned int ou reveja os princípios do teu projeto.

 

É isso... antes tarde do que nunca...

 

adicionado 0 minutos depois

@Xsjado

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!