Autor Tema: No entiendo esta linea del programa  (Leído 3617 veces)

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

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
No entiendo esta linea del programa
« en: 01 de Agosto de 2012, 08:07:14 »
Hola amigos.

He encontrado esta rutina para hacer un delay con SDCC pero no entiendo esta linea que he marcado con el comentario
////<-------esta linea no se que es ????

¿Y como podría adaptarla a 4 MHz ?

Gracias.


Código: [Seleccionar]
//Delay (retardos)

//delay.h
//Código:

#ifndef DELAY_H
#define DELAY_H

void delay_us ( char a );
void delay_ms(int ms);

#endif

//--------------------------

//delay.c
//Código:

#include "delay.h"

// tiempo = (5a+1)µs a>=2   basado en micro a 20mhz
void delay_us ( char a )

{ a;  //<-------esta linea no se que es ????

 _asm                 // a ya está cargado en el registro w
    sublw 1           //(1-a)
bucle:
    ADDLW 1
 btfss 0x03,0        //test si w=0 carry=1
    goto bucle
 _endasm;
}

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: No entiendo esta linea del programa
« Respuesta #1 en: 01 de Agosto de 2012, 11:35:53 »
Hola.

Seguramente debe ser para que no aparezca una advertencia al compilarla (unreferenced function argument).

En cuanto a adaptarla a 4MHz, ahora lo que se me ocurre es dividir el valor por 5 (20/4). Pero no creo que sea una buena solución.
Si encuentro algo mejor te aviso.

Saludos.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: No entiendo esta linea del programa
« Respuesta #2 en: 01 de Agosto de 2012, 13:06:52 »
Hola.

Seguramente debe ser para que no aparezca una advertencia al compilarla (unreferenced function argument).

En cuanto a adaptarla a 4MHz, ahora lo que se me ocurre es dividir el valor por 5 (20/4). Pero no creo que sea una buena solución.
Si encuentro algo mejor te aviso.

Saludos.

He leido algo al respecto del unreference...

Pero la cosa es QUE NO FUNCIONA, compila perfectamente pero no pirula.

Dono mi reino por una libreria de reterdos que funcioneeeeeeee en SDCC y en un PIC16f84/A, para subir de Pic ya habrá tiempo.



Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: No entiendo esta linea del programa
« Respuesta #3 en: 01 de Agosto de 2012, 13:33:49 »
Tiene que ser en SDCC, creo que hitech en re-lite es más eficiente que ese compilador y además tiene librerías  :undecided:
No contesto mensajes privados, las consultas en el foro

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: No entiendo esta linea del programa
« Respuesta #4 en: 01 de Agosto de 2012, 13:37:17 »
Cuantos microsegundos mas o menos necesitas?.

Porque en caso de que necesites pocos us. Teniendo en cuenta que con el pic a 4MHz, las instrucciones se ejecutan a 1MHz, por lo tanto el tiempo de cada instrucción es de 1us. Entonces podrías poner tantas instrucciones nop como us de retardo necesites.

Ej: Retardo de 5us
Código: C
  1. _asm
  2.     nop
  3.     nop
  4.     nop
  5.     nop
  6.     nop
  7. _endasm;

No es lo ideal, pero puede servir hasta encontrar una solución y no quedarte trabado con esto, mientras le podes dedicar mas tiempo a terminar el resto del código.

Si tengo algo de tiempo veo si puedo hacer alguna librería para retardos.

Saludos.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: No entiendo esta linea del programa
« Respuesta #5 en: 01 de Agosto de 2012, 13:48:54 »
Tiene que ser en SDCC, creo que hitech en re-lite es más eficiente que ese compilador y además tiene librerías  :undecided:

Gracias, le echaré un ojo, pero es condición necesaria que sea gratis y sin la pavada esa de version tryal.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: No entiendo esta linea del programa
« Respuesta #6 en: 01 de Agosto de 2012, 13:51:40 »
Ahora en realidad sería XC8, tienes la versión FREE: http://www.microchip.com/pagehandler/en_us/promo/mplabxc/
No contesto mensajes privados, las consultas en el foro

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: No entiendo esta linea del programa
« Respuesta #7 en: 01 de Agosto de 2012, 13:52:48 »
Cuantos microsegundos mas o menos necesitas?.

Porque en caso de que necesites pocos us. Teniendo en cuenta que con el pic a 4MHz, las instrucciones se ejecutan a 1MHz, por lo tanto el tiempo de cada instrucción es de 1us. Entonces podrías poner tantas instrucciones nop como us de retardo necesites.

Ej: Retardo de 5us
Código: C
  1. _asm
  2.     nop
  3.     nop
  4.     nop
  5.     nop
  6.     nop
  7. _endasm;

No es lo ideal, pero puede servir hasta encontrar una solución y no quedarte trabado con esto, mientras le podes dedicar mas tiempo a terminar el resto del código.

Si tengo algo de tiempo veo si puedo hacer alguna librería para retardos.

Saludos.


Gracias diguito por tu esfuerzo, necesito la tipica 'delay_ms()' ya que tengo que disparar una interrupcion cada segundo exacto (delay_ms(1000)' y tengo todo hecho y estoy parado por esta estupidez.

He encontrado esta:

Código: [Seleccionar]
void delay_ms(long ms)
{
    long i;

    while (ms--)
        for (i=0; i < 330; i++)
            ;
}

que si parpadea pero se tira casi 5 segundos con delay_ms(1000), debe estar calcalada para otra frecuencia distinta de 4 Mhz.

sigo investigando/buscando




Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: No entiendo esta linea del programa
« Respuesta #8 en: 01 de Agosto de 2012, 14:14:04 »
Bueno, he visto esta funcion trabajando para un 16f877 que va a 20 Mhz, asi que he aplicado la cuenta de la vieja y he dividido el 330 entre 5 dejnadolo en 66 y ahora parece que si pirula; lo he cronometrado a pulso con el crono del reloj y si anda por ahi, me fiaré.

El ejemplo viene aqui:
http://www.aquihayapuntes.com/sdcc-small-device-c-compiler-en-windows.html



He encontrado esta:

Código: [Seleccionar]
void delay_ms(long ms)
{
    long i;

    while (ms--)
        for (i=0; i < 330; i++)
            ;
}

que si parpadea pero se tira casi 5 segundos con delay_ms(1000), debe estar calcalada para otra frecuencia distinta de 4 Mhz.

sigo investigando/buscando




[/quote]

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: No entiendo esta linea del programa
« Respuesta #9 en: 01 de Agosto de 2012, 15:44:18 »
  Hitech lite no es trial. Yo estoy usando la versión 9.80 (creo que está disponible la 9.83) y funciona verdaderamente muy bien. La diferencia con la versión de pago es la optimización del código. Creo que en el sitio de microchip detalla bien las diferencias.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: No entiendo esta linea del programa
« Respuesta #10 en: 01 de Agosto de 2012, 18:52:54 »
  Hitech lite no es trial. Yo estoy usando la versión 9.80 (creo que está disponible la 9.83) y funciona verdaderamente muy bien. La diferencia con la versión de pago es la optimización del código. Creo que en el sitio de microchip detalla bien las diferencias.

Hola AngelGris, te he hecho caso y he instalado el HI-TECH lite.
He hecho el tipico programa para parpadear un par de leds y la pausa funciona ok.

la pausa la tengo que meter con:
Código: [Seleccionar]
__delay_ms(500);

porque el

Código: [Seleccionar]
delayMs()

no lo entiende, veo que meten un include "delay.h" (del directorio local) pero ese ficchero yo no lo tengo.

Gracias.



Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: No entiendo esta linea del programa
« Respuesta #11 en: 01 de Agosto de 2012, 19:02:45 »
  Quizá en dicha librería estén definidas las funciones de retardos de SDCC. En HiTech no se necesita incluir nada, sólo tienes que tener definido a que velocidad trabaja el PIC con la sentencia

Código: C
  1. #define _XTAL_FREQ 10000000

  en ese caso estoy indicando que el PIC trabaja a 10MHz
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: No entiendo esta linea del programa
« Respuesta #12 en: 01 de Agosto de 2012, 19:12:10 »
  Quizá en dicha librería estén definidas las funciones de retardos de SDCC. En HiTech no se necesita incluir nada, sólo tienes que tener definido a que velocidad trabaja el PIC con la sentencia

Código: C
  1. #define _XTAL_FREQ 10000000

  en ese caso estoy indicando que el PIC trabaja a 10MHz

Ya, ya, si eso lo tengo, pero me refiero que esa funcion delayMs() la he visto aqui en el foro con ejemplos de HI-TECH no CCS, pero bueno me da igual si la consigo bien sino con esto marcho perfectamente.


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: No entiendo esta linea del programa
« Respuesta #13 en: 01 de Agosto de 2012, 19:18:32 »
Hitech tiene definido _delay_ms() y _delay_us(). En todo caso mira la documentación del compilador, porque si buscas por ahí vas a encontrar de todo (que pueden incluir librerías propias)  ;-)
No contesto mensajes privados, las consultas en el foro