TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: d4n13l4 en 25 de Noviembre de 2010, 22:01:04

Título: como hacer pause en C
Publicado por: d4n13l4 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
Título: Re: como hacer pause en C
Publicado por: gary_servin 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!
Título: Re: como hacer pause en C
Publicado por: gera en 25 de Noviembre de 2010, 22:34:56
podes usar interrupciones de timer tambien para no tener al procesador ocupado esperando.
saludos!!
Título: Re: como hacer pause en C
Publicado por: d4n13l4 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
Título: Re: como hacer pause en C
Publicado por: gary_servin 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!
Título: Re: como hacer pause en C
Publicado por: d4n13l4 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