Ir ao conteúdo
  • Cadastre-se

Colocar uma rotina dentro de um programa


Posts recomendados

Ola a todos!

Venho pedir um ajuda aos nobres colegas,estou querendo colocar uma rotina (while (true)) dentro de um codigo que esta funcionando muito bem,é apenas um teste de aprendizado de onde colocar essa rotina no lugar certo,pois ja tentei em varios pontos do codigo sem sucesso,apenas fazer piscar um led dentro desse codigo que vai abaixo.

 

 

#include <16F877A.h>#device adc=10                   //Habilitar ADC de 10 bits, obrigatório. Pode                                 //ser utilizado de 8 bits também.#FUSES NOWDT                    //No Watch Dog Timer#FUSES XT                          //Clock <=4Mhz#FUSES PUT                      //Power Up Timer#FUSES NOPROTECT                //Code not protected from reading#FUSES NOBROWNOUT               //No brownout reset#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NOCPD                    //No EE protection #use delay(clock=4000000) #include <ds1307.c>#include <lcd.c> #define botao_incremento PIN_B0#define botao_decremento PIN_B1 BYTE sec;BYTE mim;BYTE hrs;BYTE day;BYTE month;BYTE yr;BYTE dow; int8 modo;int16 adc;float temperatura; int8 tempo; char dia_da_semana[7][8]={   "DOMINGO",   "SEGUNDA",   "TERCA",   "QUARTA",   "QUINTA",   "SEXTA",   "sábado",}; #int_timer1    void trata_tempo(){   tempo++;      if (tempo == 10)// 5 segundos   {      output_toggle (PIN_B5);  //inverte o nivel logico de RB5      tempo=0;      disable_interrupts( INT_TIMER1);               //Habilita interrupção timer1   }   set_timer1 (3036);} #int_ccp1void trata_ccp_1(){   if ((modo == 0) && (tempo ==0))   {      output_toggle (PIN_B5);      enable_interrupts( INT_TIMER1);               //Habilita interrupção timer1      set_timer1 (3036);   }} #int_ccp2void trata_ccp_2(){   modo++;   if (modo == 1)   {      disable_interrupts(INT_TIMER1);               //Habilita interrupção timer1      output_high (PIN_b5);   }         if (modo > 7 )   {            modo = 0;   }      if (modo == 0 )   {      enable_interrupts( INT_TIMER1);               //Habilita interrupção timer1         }} void main()  {    output_high (PIN_B5);   setup_ccp1(CCP_CAPTURE_RE);   setup_ccp2(CCP_CAPTURE_RE);   setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);   //Configuração do Timer1 para clock interno = 1E6 dividido por 8   set_timer1 (3036);                           //Preload do Timer1      enable_interrupts( INT_TIMER1);               //Habilita interrupção timer1   enable_interrupts (int_ccp1);   enable_interrupts (int_ccp2);   enable_interrupts (global);      setup_adc_ports(AN0);         //Configura canal 0 analógico   setup_adc(ADC_CLOCK_INTERNAL);    //De acordo com relógio interno.      set_adc_channel(0);           //Habilita canal 0   delay_us(20);                 //Espera um pouco, obrigatório!         ds1307_init();   lcd_init();   modo = 0;      while(true)                          {      switch (modo)      {                                                                      case 1:         {                        if (input(BOTAO_INCREMENTO))            {               delay_ms (75);               hrs++;            }                        if (input(BOTAO_DECREMENTO))            {               delay_ms (75);               hrs--;            }                        if (hrs == 24 )            {               hrs = 0;            }                        if (hrs == 255 )            {               hrs = 23;            }                        printf(lcd_putc,"\fAjustar Hora:\n%u",hrs);                        delay_ms (100);            break;         }                  case 2:         {                        if (input(BOTAO_INCREMENTO))            {               delay_ms (75);               mim++;            }                        if (input(BOTAO_DECREMENTO))            {               delay_ms (75);               mim--;            }                        if (mim == 60 )            {               mim = 0;            }                        if (mim == 255 )            {               mim = 59;            }                                                printf(lcd_putc,"\fAjustar Minutos:\n%u",mim);                        delay_ms (100);            break;         }                  case 3:         {                        if (input(BOTAO_INCREMENTO))            {               delay_ms (75);               sec++;            }                        if (input(BOTAO_DECREMENTO))            {               delay_ms (75);               sec--;            }                        if (sec == 60 )            {               sec = 0;            }                        if (sec == 255 )            {               sec = 59;            }                        printf(lcd_putc,"\fAjustar Segundos:\n%u",sec);                        delay_ms (100);            break;         }                  case 4:         {                        if (input(BOTAO_INCREMENTO))            {               delay_ms (75);               day++;            }                        if (input(BOTAO_DECREMENTO))            {               delay_ms (75);               day--;            }                        if (day == 32 )            {               day = 1;            }                        if (day == 0 )            {               day = 31;            }                        printf(lcd_putc,"\fDia do Mes:\n%u",day);                        delay_ms (100);            break;         }                  case 5:         {                        if (input(BOTAO_INCREMENTO))            {               delay_ms (75);               month++;            }                        if (input(BOTAO_DECREMENTO))            {               delay_ms (75);               month--;            }                        if (month == 13 )            {               month = 1;            }                        if (month == 0 )            {               month = 12;            }                        printf(lcd_putc,"\fAjustar Mes:\n%u",month);                        delay_ms (100);            break;         }                  case 6:         {                        if (input(BOTAO_INCREMENTO))            {               delay_ms (75);               yr++;            }                        if (input(BOTAO_DECREMENTO))            {               delay_ms (75);               yr--;            }                        if (yr == 100 )            {               yr = 1;            }                        if (yr == 0 )            {               yr = 99;            }                        printf(lcd_putc,"\fAjustar Ano:\n%u",yr);                        delay_ms (100);            break;         }                  case 7:         {                        if (input(BOTAO_INCREMENTO))            {               delay_ms (75);               dow++;            }                        if (input(BOTAO_DECREMENTO))            {               delay_ms (75);               dow--;            }                        if (dow > 7 )            {               dow = 1;            }                        if (dow == 0)            {               dow = 7;            }                        printf(lcd_putc,"\fDia da Semana:\n%s",dia_da_semana[dow-1]);                        delay_ms (100);                        ds1307_set_date_time(day,month,yr,dow,hrs,mim,sec);                                                                                              break;         }                  default:         {         if ((mim == 59) && (sec ==59)){                     output_high(pin_b4);            delay_ms(100);            output_low(pin_b4);            delay_ms(100);            output_high(pin_b4);            delay_ms(100);            output_low(pin_b4);                                             }                                                            {              adc = read_adc();               //Lê canal 0            temperatura = (5.0 * adc * 100) / 1024.0;         //Conversão para tensão.                   ds1307_get_date(day,month,yr,dow);            ds1307_get_time(hrs,mim,sec);                        printf(lcd_putc,"\f%s %02d:\%02d:\%02d\n%02d/\%02d/\%02d %2.0f%cC",dia_da_semana[dow-1],hrs,mim,sec,day,month,yr,temperatura,0xdf);                          delay_ms(1000);                                                        }      }   }}}

Link para o comentário
Compartilhar em outros sites

Ola Matheus,sim o codigo é seu :)  :)  :)  :D

Eu estudei o seu projeto,montei na protoboard  e como funcionou muito bem resolvi fazer um layout e fiz a placa definitiva se voce quiser posso te mandar o arquivo do proteus com o projeto da pci.

Mas então é o seguinte fiz a modificção do codigo como voce me falou:

 

output_toggle(pin_b2);{

delay_ms(1000);

output_toggle(pin_b2);

delay_ms(1000);

{

Os leds piscam agora,mas......

Coloquei essas linhas no final do codigo(como voce pediu)mas aconteceu do relogio de segundos ficar contando de 2 em 2,caramba sera que esse delay de 1 segundo no final do codigo esta bagunçando tudo????

Experimentei tambem colocar essas linha no começo,mas sem sucesso

Link para o comentário
Compartilhar em outros sites

não posso colocar mais um while (true) no codigo ?

 

  whiletrue ) //Loop infinito.
   {
       output_high(pin_d2);       //Liga LED.
       delay_ms(1000);              //espera 1 segundo.
       output_low(pin_d2);        //Desliga LED.
       delay_ms(1000);              //espera 1 segundo.
   }

Link para o comentário
Compartilhar em outros sites

Como eu te falei. No final do código que você postou, está assim:

printf(lcd_putc,"\f%s %02d:\%02d:\%02d\n%02d/\%02d/\%02d %2.0f%cC",dia_da_semana[dow-1],hrs,mim,sec,day,month,yr,temperatura,0xdf);              delay_ms(1000);

Por que você não faz assim:

printf(lcd_putc,"\f%s %02d:\%02d:\%02d\n%02d/\%02d/\%02d %2.0f%cC",dia_da_semana[dow-1],hrs,mim,sec,day,month,yr,temperatura,0xdf);              output_toggle (PIN_B2);            delay_ms(1000);

Irá piscar a cada segundo. Se você colocar outro while (true), o LCD não irá atualizar.

 

Falou

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...