Autor Tema: como hacer pause en C  (Leído 2674 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado d4n13l4

  • PIC16
  • ***
  • Mensajes: 107
como hacer pause en C
« en: 25 de Noviembre de 2010, 22:01:04 »
Hola
tengo una duda, segun vi no me acuerdo si en asm o en basic habia una funcion que uno le ponia pause 500 y mantenia la señal en alto por 500ms pero mi programa esta en C como puedo hacer esto?
mi idea es que tengo una señal que sale del 16f877a en alto y quiero que este en alta esa señal por X segundos.

Saludos

Desconectado gary_servin

  • PIC12
  • **
  • Mensajes: 65
Re: como hacer pause en C
« Respuesta #1 en: 25 de Noviembre de 2010, 22:28:24 »
Depende de que compilador estés usando, para Hi-Tech seria __delay_ms(x) o __delay_us(x) pero antes debes configurar la velocidad del cristal, para CCS creo que es delayms(x)

Saludos!

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: como hacer pause en C
« Respuesta #2 en: 25 de Noviembre de 2010, 22:34:56 »
podes usar interrupciones de timer tambien para no tener al procesador ocupado esperando.
saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado d4n13l4

  • PIC16
  • ***
  • Mensajes: 107
Re: como hacer pause en C
« Respuesta #3 en: 25 de Noviembre de 2010, 22:39:09 »
Hola
si estoy usando CCS, tengo definido el oscilador de 4MHz
este es mi codigo
Código: [Seleccionar]
#include <16F877a.h>
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)

///////////////////////Principio del programa//////////////////////////////////
void main(void)
{

 int dato=0;//declaracion de variables
 set_tris_b(0b00000000);//puerto b como salida
 set_tris_c(0b11111111); //RC7/Rx entrada, RC6/Tx salida
 set_tris_c(0b10000000);
 output_b(0b00000000); //pone en ceros todo el puerto b

while(TRUE)//Ciclo
{
   
   if(kbhit())//si ha llegado un dato
   {
      dato=getc(); //Lee el dato recibido
       putc(dato); //retorno
     
      if (dato==0x31)//si el dato es 1
      {
         
          output_high(PIN_B0);
         
      }
     
      if (dato==0x32)//si el dato es 2
      {
     
         output_low(PIN_B0);
      }                   
   }   
}
}
mi idea es que cuando aprete el 1 se mantenga el valor alto por Xsegs
probe con el delay_ms pero no bajo el valor despues de Xsegs

Saludos

Desconectado gary_servin

  • PIC12
  • **
  • Mensajes: 65
Re: como hacer pause en C
« Respuesta #4 en: 25 de Noviembre de 2010, 22:54:08 »
Claro, no va a bajar debido a que es solamente un retraso, luego del retraso debes volver a ponerlo en bajo, solo que como dijo gera, esta opcion mantiene al procesador ocupado mientras dure ese tiempo, para hacerlo como tu quieres debes usar alguno de los timers.

Saludos!

Desconectado d4n13l4

  • PIC16
  • ***
  • Mensajes: 107
Re: como hacer pause en C
« Respuesta #5 en: 25 de Noviembre de 2010, 23:12:32 »
aaa cierto ahi puse que se bajara despues del tiempo y me funciono como queria
gracias

Saludos