Sintaxis SDCC

Ir abajo

Sintaxis SDCC

Mensaje por novatosdcc el Lun 19 Abr 2010 - 21:12

Hola a todos,

Me estoy inciando en el uso del compilador SDCC (para PIC) pero no encuentro documentación para la sintáxis . ¿Donde puedo conseguir las instrucciones que se pueden utilizar?

Muchas gracias!
Saludos, espero su respuesta!

novatosdcc
Nuevo Usuario
Nuevo Usuario

Mensajes : 3
Fecha de inscripción : 19/04/2010

Volver arriba Ir abajo

Re: Sintaxis SDCC

Mensaje por Risanti el Miér 21 Abr 2010 - 2:51

Hola...
Sdcc es un compilador de Lenguaje C (Compatible con ANSI) para Microcontroladores como los pic.
por lo cual si quieres saber sobre que instrucciones usar te recomiendo que busques información sobre lenguaje C.
ve esto Aqui , esto te sirvira para tener claro sobre la estructura que debes llevar al programar en C.
Como declarar variables, usos de Bucle For,While, como tomar decisiones con if , hasta como colocar comentarios.

Ademas te puede servir saber los nombres de los registros del Pic. por ejemplo PORTB , PORTA, TRISA, OPTION_REG,TMR0, etc.. esto lo los puedes buscar en el datasheet del pic que quieres usar y ademas en la carpeta donde se instala sdcc (en linux /usr/share/sdcc/include/pic) encontraras unos archivos unos archivo .h que dentro de ellos estan todos los nombres de los registros que reconoce Sdcc.


Ademas dentro de este foro hay algunos ejemplos que pueden servir.. Otra cosa te recomiendo si estas usando linux que instalar el IDE Piklab el cual te basicamente te permiter escribir tu codigo y luego compilarlo en Sdcc.

el Uso de piklab es bueno y te guiara bastante el te crea un plantilla de tu codigo. ej.
Código:

/* ----------------------------------------------------------------------- */
/* Plantilla generada por Piklab */
#include       

/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */
typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF;

void isr() interrupt 0 {                                          /* rutina de servicio de interrupciones */
    /* << agregue el código de interrupción >> */
}

void main() {
    /* << agregue el código >> */
}



Yo no soy un experto en esto he aprendido buscando información y realizando pruebas, Dime en que plataforma trabajas, con que pic deseas trabajar. ???
Atte.
RiSanti.
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 33
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Sintaxis SDCC

Mensaje por novatosdcc el Miér 28 Abr 2010 - 20:50

Hola,

Muchas gracias por tu respuesta. Estoy trabajando en Ubuntu, con el PIC 18F452.
Acabo de Instalar el PikLab pero no consigo que me compile la parte de configuraciòn.

Saludos

novatosdcc
Nuevo Usuario
Nuevo Usuario

Mensajes : 3
Fecha de inscripción : 19/04/2010

Volver arriba Ir abajo

Re: Sintaxis SDCC

Mensaje por Risanti el Jue 29 Abr 2010 - 3:16

Hola..

has probado usando el Generador de Configuración, que trae incorporado el piklab, se encuentra en menu Tools, alli el te genera el codigo,según tu configuración.


Código:

/* ----------------------------------------------------------------------- */
/* Plantilla generada por Piklab */
#include

/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */
code char at __CONFIG1H CONFIG1H = _OSC_XT_1H & _OSCS_OFF_1H;
code char at __CONFIG2L CONFIG2L = _PUT_ON_2L & _BODEN_ON_2L & _BODENV_2_0V_2L;
code char at __CONFIG2H CONFIG2H = _WDT_ON_2H & _WDTPS_1_128_2H;
code char at __CONFIG3H CONFIG3H = _CCP2MUX_RC1_3H;
code char at __CONFIG4L CONFIG4L = _STVR_ON_4L & _LVP_ON_4L & _BACKBUG_OFF_4L;
code char at __CONFIG5L CONFIG5L = _CP_0_OFF_5L & _CP_1_OFF_5L & _CP_2_OFF_5L & _CP_3_OFF_5L;
code char at __CONFIG5H CONFIG5H = _CPB_OFF_5H & _CPD_OFF_5H;
code char at __CONFIG6L CONFIG6L = _WRT_0_OFF_6L & _WRT_1_OFF_6L & _WRT_2_OFF_6L & _WRT_3_OFF_6L;
code char at __CONFIG6H CONFIG6H = _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H;
code char at __CONFIG7L CONFIG7L = _EBTR_0_OFF_7L & _EBTR_1_OFF_7L & _EBTR_2_OFF_7L & _EBTR_3_OFF_7L;
code char at __CONFIG7H CONFIG7H = _EBTRB_OFF_7H;


void main() {
    /* << agregue el código >> */
TRISC=0;
while(1){
PORTC=255;
}
}

atte.
RiSanti
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 33
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Sintaxis SDCC

Mensaje por novatosdcc el Jue 13 Mayo 2010 - 21:54

Muchas gracias Risanti, me funcionò!

Una consulta màs! Como hago para setear la frecuencia del cristal de un pic???

Muchas gracias!

novatosdcc
Nuevo Usuario
Nuevo Usuario

Mensajes : 3
Fecha de inscripción : 19/04/2010

Volver arriba Ir abajo

Re: Sintaxis SDCC

Mensaje por Risanti el Vie 14 Mayo 2010 - 20:14

Hola..

Hay dos cosas primero seleccionas el tipo de oscilador a utilizar esos lo realizas con el Generador de Configuraciones, tienes la opccion de utilizar un Cristal de 10mhz y activar un PLL para generar un oscilador de 40mhz.. y conseguir hasta 10MIPS(millones de instrucciones por segundo).

En SDCC existen una libreria que te permite manejar el tema del control de tiempo, recuerda que cambiado el cristal cambias la cantidad de instruciones por segundo.. en algunos compiladores de lo piden declarar para que el genere los retardos segun
el cristal a usar.. en SDcc tendras que hacer algo mas manual.. es decir.. usando la libreria delay.h ubicada en /usr/share/sdcc/include/pic16 (si usas linux)..

Código:
esta libreria contiene las siguientes funciones..
/*
 * the delayNNtcy family of functions performs a
 * delay of NN cycles. Possible values for NN are:
 *  10  10*n cycles delay
 *  100  100*n cycles delay
 *  1k  1000*n cycles delay
 *  10k  10000*n cycles delay
 * 100k  100000*n cycles delay
 *  1m  1000000*n cycles delay
 */
 
void delay10tcy(unsigned char) __wparam;
void delay100tcy(unsigned char) __wparam;
void delay1ktcy(unsigned char) __wparam;
void delay10ktcy(unsigned char) __wparam;
void delay100ktcy(unsigned char) __wparam;
void delay1mtcy(unsigned char) __wparam;


Ejemplo si quieres hacer un retardo por ejemplo 1useg o un 1seg.. con un oscilador de 40mhz..
debes..
1 . En el menu proyecto.. debes ingresar a opcciones de proyecto.
2. Seleccion toochain.
3. Seleccionar linker.. configuracion personalizado..
4. en el cuadro de texto donde sale la x escribimos libc18f.lib
5. pulsamos ADD.
6.. Con esto hemos agregado la libreria donde se encuentra las funciones para generador retardos. (si tienes dudas ve esto Video Librerias o linker SDCC
7. ahora en nuestro proyecto..escribir..
#include <delay.h>//en el encabezado...

8.donde queramos usar un retardo ,escribir por ejemplo..

Código:

delay10tcy(1) ;// Delay del 10 instrucciones a 0,1seg cada instruccion =1useg..
delay1mtcy(10) ;// delay  1 Mega ciclos casi un seg...

.. o cualquiera de las funciones disponibles segun nuestro requerimiento.

He probado este ejemplo en proteus y funciona.. es simple..
Código:

//RiSanti Ejemplo PIC18F452  Con Retardo...

#include <pic18f452.h>
#include <delay.h>

/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */
code char at __CONFIG1H CONFIG1H = _OSC_HS_PLL_1H & _OSCS_OFF_1H;
code char at __CONFIG2L CONFIG2L = _PUT_ON_2L & _BODEN_ON_2L & _BODENV_2_0V_2L;
code char at __CONFIG2H CONFIG2H = _WDT_ON_2H & _WDTPS_1_128_2H;
code char at __CONFIG3H CONFIG3H = _CCP2MUX_RC1_3H;
code char at __CONFIG4L CONFIG4L = _STVR_ON_4L & _LVP_ON_4L & _BACKBUG_OFF_4L;
code char at __CONFIG5L CONFIG5L = _CP_0_OFF_5L & _CP_1_OFF_5L & _CP_2_OFF_5L & _CP_3_OFF_5L;
code char at __CONFIG5H CONFIG5H = _CPB_OFF_5H & _CPD_OFF_5H;
code char at __CONFIG6L CONFIG6L = _WRT_0_OFF_6L & _WRT_1_OFF_6L & _WRT_2_OFF_6L & _WRT_3_OFF_6L;
code char at __CONFIG6H CONFIG6H = _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H;
code char at __CONFIG7L CONFIG7L = _EBTR_0_OFF_7L & _EBTR_1_OFF_7L & _EBTR_2_OFF_7L & _EBTR_3_OFF_7L;
code char at __CONFIG7H CONFIG7H = _EBTRB_OFF_7H;

void main() {
    /* << agregue el código >> */
TRISC=0;
while(1){
PORTC=255;
delay1mtcy(10);// delay  1 Mega ciclos casi un seg...
PORTC=0;
delay1mtcy(10);// delay  1 Mega ciclos casi un seg...
}
}


Espero Que te sirva.....Igual yo estoy interesado en probar mas sdcc con Pic de la famila 18.. ya que SDCC
tiene mejor prestaciones con este tipo pic..


atte.
RiSanti
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 33
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Sintaxis SDCC

Mensaje por truko22 el Miér 7 Ago 2013 - 20:44

Hola saludos. quiero usar →delay1mtcy(10); y declare → #include
Pero el compilador me da el siguiente error → atención: 19: fatal error: delay.h: No such file or directory, al querer usarla. Alguien puede ayudarme recien inicio en sdcc+piklab con el led de parpadeo.
avatar
truko22
Nuevo Usuario
Nuevo Usuario

Mensajes : 1
Fecha de inscripción : 06/08/2013

http://22xd.blogspot.com/

Volver arriba Ir abajo

Re: Sintaxis SDCC

Mensaje por maigke el Vie 16 Ago 2013 - 17:54

Bienvenido al foro Truko22, una pregunta, ¿para que micro deseas aplicar la libreria de retardos?, es importante por que si es un micro de gama media, usas la libreria que nuestro amigo Risanti ha aportado, pero si usas un pic de gama alta PIC18F entonces tendras incluir en las opciones de compilacion de tu proyecto de sdcc la libreria libc18f.lib
Saludos
avatar
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 40
Localización : Mexico

Volver arriba Ir abajo

Re: Sintaxis SDCC

Mensaje por teuton el Dom 27 Jul 2014 - 21:39

Che muchas gracias risanti me diste una re mano!

teuton
Nuevo Usuario
Nuevo Usuario

Mensajes : 2
Fecha de inscripción : 27/07/2014

Volver arriba Ir abajo

Re: Sintaxis SDCC

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.