Sintaxis SDCC
5 participantes
Página 1 de 1.
Sintaxis SDCC
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!
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
- Mensajes : 3
Fecha de inscripción : 19/04/2010
Re: Sintaxis SDCC
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.
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.
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.
Re: Sintaxis SDCC
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
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
- Mensajes : 3
Fecha de inscripción : 19/04/2010
Re: Sintaxis SDCC
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.
atte.
RiSanti
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
Re: Sintaxis SDCC
Muchas gracias Risanti, me funcionò!
Una consulta màs! Como hago para setear la frecuencia del cristal de un pic???
Muchas gracias!
Una consulta màs! Como hago para setear la frecuencia del cristal de un pic???
Muchas gracias!
novatosdcc- Nuevo Usuario
- Mensajes : 3
Fecha de inscripción : 19/04/2010
Re: Sintaxis SDCC
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)..
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..
He probado este ejemplo en proteus y funciona.. es simple..
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
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...
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
Re: Sintaxis SDCC
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.
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.
Re: Sintaxis SDCC
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
Saludos
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 47
Localización : Mexico
Re: Sintaxis SDCC
Che muchas gracias risanti me diste una re mano!
teuton- Nuevo Usuario
- Mensajes : 2
Fecha de inscripción : 27/07/2014
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.