Autor Tema: Ejemplitos en C: Mis Funciones favoritas en CCS C  (Leído 63406 veces)

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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #15 en: 01 de Marzo de 2006, 12:07:00 »
No tengo más remedio que entrar para felicitarte.

Eres uno más del FORO que hace grandes cosas y no le dá importancia. ¡Bien, bien!

RebotadoRebotadolocolocoRebotadoRebotado

Conectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #16 en: 01 de Marzo de 2006, 12:26:00 »
Gracias Pocher, la verdad es que me divierto como un Cosaco en una Taberna
durante la Hora Feliz en que todo es grátis ja ja ja Muchas risas Muchas risas Muchas risas

Y ahora que nadie nos lee ... te confieso que lo hago porque me da mucho
coraje de ver a otros foreros que lo contestan ABSOLUTAMENTE TODO pero
nunca abren un hilo nuevo, nunca se imaginan un proyecto aunque sea
tonto, nunca comparten lo que han hecho ... sino que solo dan lecciones
a diestro y siniestro pero de los que nunca hemos visto algo que ellos mismos
hayan hecho

 .... en fin ... que me da pena ... y pa contrarrestar ... po eso Muchas risas

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #17 en: 01 de Marzo de 2006, 13:57:00 »
Impresionante Diego ademas muy limpio .

Solo me quedo con la intriga -> que será eso del VIDRIO ? que te hizo perder el escrivir desquiciado

Conectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #18 en: 01 de Marzo de 2006, 14:07:00 »
Ja, ja, ja Me pasé los tres años que duré en la facultad de ingenieros de ...
juerga en juerga, empalmando las borracheras una con otra y ...
al final me dijeron amablemente que preferían prescindir de mi y
de mis servicios. ja, ja, ja

Muchas risas  Muchas risas  Muchas risas  Muchas risas  Muchas risas

Hoy lo lamento pero ya es tarde. (25 años tarde)

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #19 en: 02 de Marzo de 2006, 09:59:00 »
Unirme a mis compañeros en las felicitaciones!y para mi vuesamerced RedPic, amigo, forero y maestro solo me queda decir que el titulo de ingeniero se te queda pequeño!!!

Cada dia me gusta mas este foro!tanto por la informacion que contiene como la gente que lo habita!


Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Conectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #20 en: 05 de Marzo de 2006, 14:19:00 »
Titulo : Funciones Date y Time
=====================

Y ahora en otro orden de cosas vamos a tratar una serie de funciones
bajo el denominador común de Date y Time.

Estas funciones no son mías, son una traducción de lo originalmente publicado
en el Foro CCS Library y su autor es Aurelian Nichita
Yo me he limitado a traducirlas al español y probar que funcionan.

Incluye las funciones:

esAgnoBisiesto(int y)
diasDesdeAgno1(int y, int m, int d)
segundosDesdeHora0(int h, int m, int s)
segundosDesdeAgno1(int yr, mo, dy, hr, mi, se)
segundosEntre(int yr1, mo1, dy1, hr1, mi1, se1, yr2, mo2, dy2, hr2, mi2, se2)
ISODiaDeLaSemana(int YY, int MM, int DD)
ISONumeroDeLaSemana(int YY, int MM, int DD, int& weekOfYear, int& actualYear)

Codigo:


// Definiciones y Funciones de Date Time ////////////////////////////////////////////////

// Números ISO de los dias de la semana
 
#define LUNES     1
#define MARTES    2
#define MIERCOLES 3
#define JUEVES    4
#define VIERNES   5
#define SABADO    6
#define DOMINGO   7

const int Dias_de_cada_Mes[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                                      {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} };

const int Orden_Dias_Semana[7] = {6, 7, 1, 2, 3, 4, 5};

#define SEGUNDOS_EN_UN_DIA 86400

#define SEGUNDOS_EN_UNA_HORA 3600
#define SEGUNDOS_EN_UN_MINUTO 60
#define MINUTOS_EN_UN_DIA 1440
#define MINUTOS_EN_UNA_HORA 60
#define HORAS_EN_UN_DIA 24


// Algunas funciones que seran usadas mas adelante

#inline
short esAgnoBisiesto(int y) {
  return (y % 4 == 0);
}

#separate
int32 diasDesdeAgno1(int y, int m, int d) {
  int32 dias = 0;
  int i;
  short es_bisiesto;

  es_bisiesto = esAgnoBisiesto(y);
  for (i=1; i<y; i++) {
    if (esAgnoBisiesto(i))
      dias += 366;
    else
      dias += 365;
  }
  for (i=1; i<m; i++)
    dias += Dias_de_cada_Mes[es_bisiesto][ i ];
  dias += d;

  return dias;
}

#separate
int32 segundosDesdeHora0(int h, int m, int s) {
  int32 segundos;
  segundos = (int32)h * SEGUNDOS_EN_UNA_HORA;
  segundos += (int32)m * SEGUNDOS_EN_UN_MINUTO;
  segundos += s;
  return segundos;
}

#separate
int32 segundosDesdeAgno1(int yr, mo, dy, hr, mi, se) {
  int32 segundos;
  segundos = diasDesdeAgno1(yr, mo, dy) * SEGUNDOS_EN_UN_DIA;
  segundos += segundosDesdeHora0(hr, mi, se);
  return segundos;
}

// Calcula el numero de segundos entre dos fechas y horas

// Adaptado para años entre 2001 y 2135 (limitado por el tamaño de los int32)


#separate
int32 segundosEntre(int yr1, mo1, dy1, hr1, mi1, se1, yr2, mo2, dy2, hr2, mi2, se2) {
  int32 inicio;
  int32 final;
  inicio = segundosDesdeAgno1(yr1, mo1, dy1, hr1, mi1, se1);
  final  = segundosDesdeAgno1(yr2, mo2, dy2, hr2, mi2, se2);
  if (inicio > final)
    return inicio-final;
  else
    return final-inicio;
}

// Calculo del dia de la semana. Adaptado SOLO para años del 2000 al 2099

#separate
int ISODiaDeLaSemana(int YY, int MM, int DD) {
  signed long diaDeLaSemana;
  int cent = 20;  // YYYY / 100

  // Algoritmo de congruencia de Zeller

  if (MM < 3) {
    MM = MM + 12;
    if (YY > 0)
      YY--;
    else {
      YY = 99;
      cent--;
    }
  }

  diaDeLaSemana = DD;
  diaDeLaSemana += (((signed long)MM + 1) * 26) / 10;
  diaDeLaSemana += YY;
  diaDeLaSemana += YY / 4;
  diaDeLaSemana += cent / 4;
  diaDeLaSemana -= cent * 2;

  while (diaDeLaSemana < 0)
    diaDeLaSemana += 7;

  diaDeLaSemana %= 7;

  return Orden_Dias_Semana[(int)diaDeLaSemana]; // Ahora tenemos el número ISO del dia de la semana
}

// Calculo de número ISO de la semana. Adaptado SOLO para años del 2001 al 2098

#separate
void ISONumeroDeLaSemana(int YY, int MM, int DD, int& weekOfYear, int& actualYear)
{
  signed long diaDelAgno;
  int DiaDeLaSemanaInicial;
  int DiaDeLaSemanaFinal;
  short bisiesto;
  signed int i;

  do {
    bisiesto = esAgnoBisiesto(YY);
    diaDelAgno = 0;

    for (i=1; i<=MM; i++) {
      if (i < MM)
        diaDelAgno += Dias_de_cada_Mes[bisiesto][ i ];
      else
        diaDelAgno += DD;
    }
    actualYear = YY;
    DiaDeLaSemanaInicial = ISODiaDeLaSemana(actualYear, 1, 1);

    if (DiaDeLaSemanaInicial > JUEVES)
      diaDelAgno -= 8 - DiaDeLaSemanaInicial;
    else
      diaDelAgno += DiaDeLaSemanaInicial - 1;

    if (diaDelAgno <= 0)
      weekOfYear = 0xFF;
    else {
      weekOfYear = diaDelAgno / 7;
      if (diaDelAgno % 7 != 0)
        weekOfYear++;
      if (weekOfYear > 52) {
        DiaDeLaSemanaFinal = DiaDeLaSemanaInicial;
        if (bisiesto) {
          if (DiaDeLaSemanaFinal == DOMINGO)
            DiaDeLaSemanaFinal = LUNES;
          else
            DiaDeLaSemanaFinal++;
        }
        if (DiaDeLaSemanaFinal < JUEVES) {
          actualYear++;
          weekOfYear = 1;
        }
      }
    }

    if (weekOfYear == 0xFF) {
      if ((--DD)==0) {
        if ((--MM)==0) {
          YY--;
          MM = 12;
        }
        DD = Dias_de_cada_Mes[esAgnoBisiesto(YY)][MM];
      }
    }

  } while (weekOfYear == 0xFF);
}




Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Conectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #21 en: 16 de Abril de 2006, 18:12:35 »
El concepto de flotabilidad es inaprensible ... o sí  :lol:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #22 en: 16 de Abril de 2006, 18:16:43 »
No cojo el concepto :shock:

Conectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #23 en: 16 de Abril de 2006, 18:20:15 »
Es que me he tirado un buen rato buscando este post (parece que al buscador se le había atragantado y he tenido que buscarla página a página  :P )

Asi que me he dicho: Ponerle chincheta no, ya que no me gusta autochinchetearme, asi que le he posteado una disquisición filósofica sobre la flotabilidad ... para que flote ...  :lol:  :lol:  :lol:

y flota.

(perdonad la disgresión)

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #24 en: 17 de Abril de 2006, 01:53:41 »
Ya tienes tu chincheta, amigo Diego, y descansa algo más hombre, que se te llena la boca de palabros extraños y no hay quien te entienda  :D .

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #25 en: 02 de Mayo de 2006, 14:47:32 »
Esta es una función para convertir una cadena Hexadecimal en un long. No he utilizado la función de RedPic para convertir un caracter hexadecimal en número por que me da un error el compilador, por lo que la he sustituido por otra.

#include <string.h>
#include <stdlib.h>

long ChHexToInt( char * cString )
{
int  nIdx;  // Índice para recorrer la cadena
long nRes;  // Resultado acumulado
int  nChar; // Carácter en número
int  nLong; // Longitud de la cadena

nLong = strlen(cString);

for(nIdx=0;nIdx<nLong;nIdx++)
   {
   nChar = AscHex2Int(cString[nIdx]);
   nRes = 16*nRes+nChar;
   }

return(nRes);
}


signed int AscHex2Int(char ch) // Convierte un caracter ascii hex a int
{             
switch(ch)
   {
   case '0': return 0;
   case '1': return 1;
   case '2': return 2;
   case '3': return 3;
   case '4': return 4;
   case '5': return 5;
   case '6': return 6;
   case '7': return 7;
   case '8': return 8;
   case '9': return 9;
   case 'a':
   case 'A': return 10;
   case 'b':
   case 'B': return 11;
   case 'c':
   case 'C': return 12;
   case 'd':
   case 'D': return 13;
   case 'e':
   case 'E': return 14;
   case 'f':
   case 'F': return 15;
   default: return -1;
   }
}   
« Última modificación: 02 de Mayo de 2006, 19:57:25 por jfh900 »
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #26 en: 23 de Mayo de 2006, 13:21:09 »
Hola, saludos a todos espero se pueda, necesito una funcion que reciba de parámetros, un PIN y número en ms, y haga un parpadeo de la cantidad de ms en el pin especificado. Como puedo hacerlo??

void parp(PIN,#ms)
{
    parpadeo en PIN, con retardo en #ms    // bueno algo parecido
}

puede adicionarse otro parametro para determinar la cantidad de veces del parpadeo, seguramente habra un for dentro la función
« Última modificación: 23 de Mayo de 2006, 13:24:31 por Cryn »
.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #27 en: 23 de Mayo de 2006, 20:43:36 »
No esta claro lo que quieres hacer,cuando indicas ms que quiere decir que si vale 10 tiene que parpadear 10 veces o parpadear con un retardo de 10 ms y en este último caso que tendria que hacer un solo parpadeo (encender y apagar) o lo tendria que hacer mas veces

Saludos.
« Última modificación: 23 de Mayo de 2006, 20:46:32 por jfh900 »
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #28 en: 24 de Mayo de 2006, 11:58:48 »
aclaro un poco; todos parametros:

PIN = Pin en el cual se realizara el parpadeo (RA1, RA5, RB7,etc.) cualquier pin de puerto.
#ms = el tiempo que duradá encendido en ms, ya que se usará seguramente un delay_ms(); por ej si quiero que parpadee cada segundo en viare 1000
otro parametro = indicar las veces que realizará el parpadeo, ej paraentro = 1 parpadeará solo una vez; =10 parpadeará 10 veces, y asi sucesivamente, segun el dato de parametro que sea enviado.

espero me hayan entendio, pues muchas gracias por la respuesta.
.

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Ejemplitos en C: Mis Funciones favoritas en CCS C
« Respuesta #29 en: 26 de Mayo de 2006, 12:55:36 »
Hola a todos soy principiante  :z) en la programacion en C para PIC´s especificamente, y necesito saber si hay alguna librería en CCS para el puerto USB. De antemano gracias  :mrgreen:

Saludos LabPIC
« Última modificación: 26 de Mayo de 2006, 12:57:53 por LabPIC »
¡¡¡Viva México cabrones!!!


 

anything