Autor Tópico: [AJUDA] PROJETO EM CCS  (Lida 2370 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline liniker

  • Novato
  • *
  • Posts: 41
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Itabira Mg
  • Nome:: Liniker
  • Profissão: TEC.Eletroeletronica
[AJUDA] PROJETO EM CCS
« Online: 14 de Julho de 2012, 23:35 »
Olá a todos programadores,
tenho realizado um projeto de tcc, estou tendo algumas dificuldades.
Preciso criar um temporizador  por timer a executar determinada funcao.
exemplo:
está executando hora();
depois de um tempo
chama funcao
data();

segue  o codico
Código: [Selecionar]
#include <16f627A.h>

#fuses intrc_io, nowdt, noprotect, put, nobrownout, mclr, nolvp, nocpd
#use delay(clock=4000000)
#use fast_io(b)

#define BOTAO1 PIN_a0                   //Boto de escolha de ajuste das funes.
#define BOTAO_INCREMENTO PIN_a1         //Boto incremento de variveis.
#define BOTAO_DECREMENTO PIN_a2
int conta_pulsos=0;
#byte porta = 0x05
#byte portb = 0x06

//Boto de decremento das variveis.
int  apagado = 0; //apagado
int a;
int n,i=0,valor;
int h=12;
int m=5;
int s=14;
int dezena, unidade, digito;
int seg=0,q;
int contador=0;
int dia=29;               //Variável dos dias do mês. 0 a 31.
int mes=6;
int ano=12;
//Tabela com os digitos
const unsigned char table[11][5] = {
0b01111110,0b01000010,0b01000010,0b01000010,0b01111110,//0
                  0b00000010,0b00100010,0b01111110,0b00000010,0b00000010,//1
                  0b01011110,0b01010010,0b01010010,0b01010010,0b01110010,//2
                  0b01010010,0b01010010,0b01010010,0b01010010,0b01111110,//3
                  0b01110000,0b00010000,0b00010000,0b00010000,0b01111110,//4
                  0b01110010,0b01010010,0b01010010,0b01010010,0b01011110,//5
                  0b01111110,0b01010010,0b01010010,0b01010010,0b01011110,//6
                  0b01100000,0b01000000,0b01000000,0b01000000,0b01111110,//7
                  0b01111110,0b01001010,0b01001010,0b01001010,0b01111110,//8
                  0b01110010,0b01010010,0b01010010,0b01010010,0b01111110,//9
                         0x00, 0x36, 0x36, 0x00, 0x00, // :
                                   
#int_TIMER1
void temp1s(void)
{
   q++;
   seg++;
   if(seg==4){
   seg=0;
   i++;
   }
   if(i==4){
   i=0;
   }
   set_timer1 (3036);    //Preload do Timer1
}


void caracter(digito) { //chr contem  2 digitos (hh,mm o ss)
   dezena = (digito/10); // dezenas
   unidade = (digito-(dezena*10)); //e as unidades
   
   for (n=0;n<5;n++) { //preparar a tabela para primeiro digito
      output_b(table[dezena][n]);
output_high(pin_b0);
output_high(pin_b7);

      delay_us(900) ;//160useg cada pixel horizontal
   }
  delay_us(700); //pausa entre digitost
output_high(pin_b0);
output_high(pin_b7);
   output_b(0x00);
output_high(pin_b0);
output_high(pin_b7);
   delay_us(700); //pausa entre digitos*/
   
   for (n=0;n<5;n++) {
      output_b(table[unidade][n]);
output_high(pin_b0);
output_high(pin_b7); //unidades
      delay_us(700);
output_high(pin_b0);
output_high(pin_b7);
   }
   delay_us(700); //pausa entre digitos
   output_b(0x00);
   delay_us(700); //pausa entre digitos*/
output_high(pin_b0);
output_high(pin_b7);
}

void doispontos()

{
   for (n=0;n<5;n++) { //preparar tabela para primeiro digito
      output_b(table[10][n]);
output_high(pin_b0);
output_high(pin_b7);
      delay_us(400); //160useg cada pixel horizontal
   }
   delay_us(400); //pausa entre digitost
   output_b(0x00);
output_high(pin_b0);
output_high(pin_b7);
   delay_us(400); //pausa entre digitos*/
}

void barra()

{
   for (n=0;n<5;n++) { //preparar tabela para primeiro digito
      output_b(table[32][n]);
      delay_us(100); //160useg cada pixel horizontal
   }
   delay_us(600); //pausa entre digitost
   output_b(0x00);
   delay_us(600); //pausa entre digitos
}




void hora()
{
caracter(h);
               doispontos();
               caracter(m);
               doispontos();
               caracter(s);
}

void data()
{
               caracter(dia);
               barra();
               caracter(mes);
               barra();
               caracter(ano);
}
void main() {  //bucle principal
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);   //Configurao do Timer1 para clock interno = 1E6 dividido por 8
   set_timer1 (3036);
   enable_interrupts(INT_TIMER1);               //Habilita interrupo timer1
   enable_interrupts(global);                   //habilita interrupco global
   set_tris_b(0);
   
   a=0;

   while (1) {
     
      output_high(pin_b0);
output_high(pin_b7);
      if (!input(BOTAO1))        //Teste do boton.
      {
         delay_ms (300);        //Para evitar retorno.
         if (contador>2)       //Se maior q 11, zera o contador.
         {
            contador=0;
         }
         
         contador++;             //Incremento da varivel contador.
      }
     
      switch (contador)          //Depois de incrementada, a varivel CONTADOR
      {                          //assume um dos casos a seguir:
         case 1:                 //Menu de ajuste da HORA.
         {
            output_low(pin_b7);
           
            if (!input (BOTAO_INCREMENTO)) //Incrementa a varivel H(hora).
            {
               delay_ms (300);
               h++;
               
               if (h>23)                  //Se a hora for maior que 23, reset.
               {
                  h=0;
               }
            }
           
            if (!input (BOTAO_DECREMENTO)) //Decrementa a varivel H(hora).
            {
               delay_ms (300);
               h--;
               
               if (h==255)                //H  uma varivel inteira de 8 bits.
               {                          //Quando  decrementada para um valor
                  h=23;                   //menor que zero, se torna 255. Ou seja,
               }                          //deve voltar para 23.
            }
           
            q=0;                   //Quando se est em algum menu, Q  resetada.                            //Mantenha na tela.
           
            break;
         }
         
         case 2:                 //Menu de ajuste do MINUTO. Idem ao anterior.
         {
            output_high(pin_b7);
            output_low(pin_b7);
            output_high(pin_b7);
           
            if (!input (BOTAO_INCREMENTO))
            {
               delay_ms (300);
               m++;
               
               if (m>59)                     //Diferente aqui.
               {
                  m=0;
               }
            }
           
            if (!input (BOTAO_DECREMENTO))
            {
               delay_ms (300);
               m--;
               
               if (m==255)                   //Igual aqui.
               {
                  m=59;
               }
            }
           
            q=0;
           
            break;
         }
         
         default:                //Menu principal. Mostra todas as informações.
         {
            s=q/2;            //A variável Q incrementa a 2Hz, então os segundos
                             //devem ser a metade.
            if (s==60)        //Se for igual a 60, reset em Q e S. M incrementa.
            {
               q=0;     
               s=0;
               m++;
               
            }
         
           
            if (m>59)
            {
               m=0;
               h++;
            }
         
            if (h>23)         //Se H(horas) for maior q 23, reset. DIA DA SEMANA
            {                 //e DIA DO MÊS incrementam.
               
             
               h=0;
            }

           
           
           


while(input(pin_a3))  { //so rodoa se pinoa3 =1
               delay_ms(10);
output_high(pin_b0);
output_high(pin_b7);
  hora();

 
 
 
            }
         }

      }
   }
}
 
ME AJUDEM! <3
« Última modificação: 15 de Julho de 2012, 10:00 por F.Gilii »



Offline Paulo_lumens

  • Hobby
  • ****
  • Posts: 269
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Charqueada-SP
Re:[AJUDA] PROJETO EM CCS
« Resposta #1 Online: 15 de Julho de 2012, 09:16 »
Quais são as suas duvidas??

Offline liniker

  • Novato
  • *
  • Posts: 41
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Itabira Mg
  • Nome:: Liniker
  • Profissão: TEC.Eletroeletronica
Re:[AJUDA] PROJETO EM CCS
« Resposta #2 Online: 15 de Julho de 2012, 11:14 »
minha duvida seria como gerar uma interrupcao por timer
 logo que se passar 10 segundos a funcao hora() saia e entre a funcao data();

Offline Paulo_lumens

  • Hobby
  • ****
  • Posts: 269
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Charqueada-SP
Re:[AJUDA] PROJETO EM CCS
« Resposta #3 Online: 26 de Julho de 2012, 09:05 »
eu uso assim

Código: [Selecionar]
//tratamento do timer contagem de tempo
#int_timer0
void trata_t0()
{
//****INICIO CONTAGEM DE SEGUNDOS****************

static int conta;
   set_timer0(131+get_timer0());//contagem de tempo 1 segundo
   conta++;
if(conta==125)
{
   conta=0;
   led=!led;
   output_bit(PIN_a3,led);
   }

if(conta==0)seg=seg+1;

if(seg>59)
{
   seg=0;
   min=min+1;
   }
   if(min>59)
   {
      min=0;
      hor=hor+1;
      }
//************FIM INCREMENTO DE TEMPO*************

Offline Paulo_lumens

  • Hobby
  • ****
  • Posts: 269
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Charqueada-SP
Re:[AJUDA] PROJETO EM CCS
« Resposta #4 Online: 26 de Julho de 2012, 09:33 »
eu uso assim

Código: [Selecionar]
//tratamento do timer contagem de tempo
#int_timer0
void trata_t0()
{
//****INICIO CONTAGEM DE SEGUNDOS****************

static int conta;
   set_timer0(131+get_timer0());//contagem de tempo 1 segundo
   conta++;
if(conta==125)
{
   conta=0;
   led=!led;
   output_bit(PIN_a3,led);
   }

if(conta==0)seg=seg+1;

if(seg>59)
{
   seg=0;
   min=min+1;
   }
   if(min>59)
   {
      min=0;
      hor=hor+1;
      }
//************FIM INCREMENTO DE TEMPO*************

Ops faltou o 10 sengundos
crie uma variavel seg2 e uma flag1
Código: [Selecionar]
//no main

if(seg2==seg)
{
seg2=seg+10;

if(flag1)
{
flag=!flag;
void dat();
{
flag=!flag;
void hora();
}
}

talvez isso ajude!