Autor Tema: Cursillo en C18 para PICS DESDE CERO  (Leído 300428 veces)

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

Desconectado velaki

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 22
Cursillo en C18 para PICS DESDE CERO
« en: 27 de Abril de 2007, 07:43:44 »
Bueno, seguramente no sea yo el mas indicado para comenzar este cursillo, pero visto lo visto, aqui expongo todo lo que tengo con respecto al c18, espero que aquellos que esteis empezando con este compilador expongais aqui vuestros ejemplos y dudas porque la verdad esque ahi pokitos ejemplos por ahi de C18, y yo practicamente estoy empezando,  bueno aqui dejo alguna iformación que tengo...  :shock:

TUTORIAL INICIACION PARA C18
http://informatica.uv.es/iiguia/SBM/manual.pdf

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #1 en: 30 de Abril de 2007, 13:25:37 »
Yo tambien estoy empezando en C18, ya que he dejado el CCS, y la verdad es que hay pocos ejemplos de los que ir aprendiendo.¿Hay alguien que pueda ir poniendo ejemplitos en C18?

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #2 en: 30 de Abril de 2007, 14:51:02 »
Mi amigo unas casillas mas abajo ya hay unos ejemplitos de C18 ahi puedes plantear tus dudas
El conocimiento se consigue a base de esfuerzo...

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #3 en: 03 de Mayo de 2007, 01:47:09 »
bueno amigos, lo primero que se tiene que hacer es leer todos los pdfs que vienen en la carpeta DOC del programa C18 una vez instalado, me refiero al getting started , el user guide y el library, tambien el archivo de ayuda hlppic18configset, no se vayan a aburrir!!!  :-/ jejej despues de esto estamos listos para programar, ah! y me olvidaba  :mrgreen: tambien leer el datasheet del pic18 que vamos a usar,  en mi caso se trata del 18F2525 y escogi este por 3  razones: tiene 28 patas para 3 puertos, esta en el proteus6.9, y mi amigo Juan (kedutpic) se compro el 18F2550 cuya diferencia con el 2525 es que el 18f2525 no tiene modulo USB.
cuando domine bien el C18 me paso al toque al 18f2550, asi que en el camino de aprender el C18 es que una motivacion más para mí es la de compartir la plancha (los archivos y demas cosas del C18) asi que sin mas preambulos vayamos al asunto...

materiales:
- compilador C18 de microchip.
- MPLAB, el ultimo si pueden creo q van en la 7.50.
- proteus 6.9
- paciencia y mucha curiosidad. :-/

revisar este hilo antes:
http://www.todopic.com.ar/foros/index.php?topic=11553.0


Indice

A continuación el indice de ejemplos de este humilde tutorial del C18

PRENDER UN LED

PARPADEAR UN LED

LEDS SECUENCIALES

DISPLAY AUTOMATICO

TEORIA ESTRUCTURAS DE CONTROL EN C18

TEORIA DE VARIABLES EN C18

TEORIA DE FUNCIONES EN C18

INTERRUPCIONES EN C18

INTERRUPCION CON EL TIMER0

INTERRUPCION POR FLANCO EN RB0

INTERRUPCION POR CAMBIO DE ESTADO EN RB0

INTERRUPCION POR FLANCO EN RB1 Y RB2

LCD16X2 A 4 BITS

TEORIA DEL MODULO EUSART EN C18

TEORIA DEL MODULO I2C EN C18

EEPROM 24LC32 CON VISUALIZACION EN LCD

LA LIBRERIA DEL DS1307

PROYECTO TEMPORADA 1 RELOJ CON PANEL DE LEDS



Otras librerías:

Escribir/leer EEPROM Interna por raraavis

Flex_LCD_C18 y uso de Printf por Suky

RTC DS1307 por RedPIC&Suky


« Última modificación: 13 de Septiembre de 2010, 13:57:01 por Suky »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #4 en: 03 de Mayo de 2007, 02:17:59 »
PRENDER UN LED
Este programa enciende un led por cada puerto, en el pin RA0, RB0 y RC0.

Aca el codigo:
Código: C#
  1. #include <p18f2525.h>
  2. #include <stdio.h>
  3. #pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
  4. #pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
  5. #pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
  6. #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
  7. #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
  8. #pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
  9. #pragma config CPB = ON,CPD = ON//CONFIG5H
  10. #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
  11. #pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
  12. #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
  13. #pragma config EBTRB = ON//CONFIG7H
  14.  
  15. void main(void){
  16.         TRISA = 0X00;
  17.         TRISB = 0X00;
  18.         TRISC = 0X00;
  19. //*******************************************************
  20. //*******************************************************
  21.         LATA = 0X01;
  22.         LATB = 0X01;   
  23.         LATC = 0X01;
  24.         while (1);
  25. //*******************************************************
  26. //*******************************************************
  27. }
Todos los archivos: h**p://www.box.net/shared/ljus5d8v95

algun detalle que no se entienda gustoso estare en explicarlo  :-/
« Última modificación: 03 de Mayo de 2007, 03:24:57 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #5 en: 03 de Mayo de 2007, 02:40:45 »
PARPADEAR UN LED
Este programa hara parpadear un led por cada puerto, en el pin RA0, RB0 y RC0.
OSC XT: 4MHz

Aca el código:
Código: C#
  1. #include <p18f2525.h>
  2. #include <delays.h>
  3. #include <stdio.h>
  4. #pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
  5. #pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
  6. #pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
  7. #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
  8. #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
  9. #pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
  10. #pragma config CPB = ON,CPD = ON//CONFIG5H
  11. #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
  12. #pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
  13. #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
  14. #pragma config EBTRB = ON//CONFIG7H
  15.  
  16. void main(void){
  17.         TRISA = 0X00;
  18.         TRISB = 0X00;
  19.         TRISC = 0X00;
  20. //*******************************************************
  21. //*******************************************************
  22.         while(1){
  23.                 LATA = 0X01;
  24.                 LATB = 0X01;   
  25.                 LATC = 0X01;
  26.                 Delay10KTCYx(20);//200 mseg
  27.                 LATA = 0X00;
  28.                 LATB = 0X00;
  29.                 LATC = 0X00;
  30.                 Delay10KTCYx(20);//200 mseg
  31.         }
  32.  
  33. //*******************************************************
  34. //*******************************************************
  35. }

Todos los archivos: h**p://www.box.net/shared/51111xhblr

« Última modificación: 03 de Mayo de 2007, 03:25:25 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #6 en: 03 de Mayo de 2007, 03:24:27 »
LEDS SECUENCIALES
Este programa hara un juego secuencial con leds en el puerto B.
OSC XT: 4MHz
Código: C#
  1. #include <p18f2525.h>
  2. #include <delays.h>
  3. #include <stdio.h>
  4. #pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
  5. #pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
  6. #pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
  7. #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
  8. #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
  9. #pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
  10. #pragma config CPB = ON,CPD = ON//CONFIG5H
  11. #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
  12. #pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
  13. #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
  14. #pragma config EBTRB = ON//CONFIG7H
  15.  
  16. void main(void){
  17.         TRISA = 0X00;
  18.         TRISB = 0X00;
  19.         TRISC = 0X00;
  20.         LATA = 0X00;
  21.         LATC = 0X00;
  22. //*******************************************************
  23. //*******************************************************
  24.         LATB = 0X01;
  25.         for(;;){
  26.                 while(PORTB != 0X80){
  27.                         LATB <<= 1;
  28.                         Delay10KTCYx(50);//500 mseg
  29.                 }
  30.                 while(PORTB != 0X01){
  31.                         LATB >>= 1;
  32.                         Delay10KTCYx(50);//500 mseg
  33.                 }
  34.         }
  35. //*******************************************************
  36. //*******************************************************
  37. }

Todos los archivos: h**p://www.box.net/shared/j6t7hfx819
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #7 en: 03 de Mayo de 2007, 04:20:52 »
DISPLAY AUTOMATICO
Este programa decrementa e incrementa automaticamente un display de 7 segmentos.
OSC XT: 4MHz
Código: C#
  1. #include <p18f2525.h>
  2. #include <delays.h>
  3. #include <stdio.h>
  4. #pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
  5. #pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
  6. #pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
  7. #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
  8. #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
  9. #pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
  10. #pragma config CPB = ON,CPD = ON//CONFIG5H
  11. #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
  12. #pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
  13. #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
  14. #pragma config EBTRB = ON//CONFIG7H
  15.  
  16. int digito,
  17. display[10] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X67};
  18. void main(void){
  19.         TRISA = 0X00;
  20.         TRISB = 0X00;
  21.         TRISC = 0X00;
  22.         LATA = 0X00;
  23.         LATB = 0X00;
  24.         LATC = 0X00;
  25. //*******************************************************
  26. //*******************************************************
  27.         while(1){
  28.                 for(digito=1;digito<=9;digito++){
  29.                         LATB = display[digito];
  30.                         Delay10KTCYx(50);
  31.                 }
  32.                 for(digito=8;digito>=0;digito--){
  33.                         LATB = display[digito];
  34.                         Delay10KTCYx(50);
  35.                 }
  36.         }
  37. //*******************************************************
  38. //*******************************************************
  39. }

Todos los archivos: h**p://www.box.net/shared/lkneue4csl
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #8 en: 03 de Mayo de 2007, 04:33:39 »
Ese Henry siempre me gana, jajajaja felicitaciones mi amigo vas por muy buen camino
El conocimiento se consigue a base de esfuerzo...

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #9 en: 03 de Mayo de 2007, 04:47:52 »
no olviden leer los documentos del C18 y el datasheet de sus pic18
« Última modificación: 04 de Mayo de 2007, 01:14:43 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado velaki

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 22
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #10 en: 06 de Mayo de 2007, 10:28:34 »
ESTUPENDO, AQUI AHI PARA RATO

Desconectado velaki

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 22
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #11 en: 08 de Mayo de 2007, 13:09:19 »
No se porque pero no me acaba de funcionar el codigo en proteus, alugno de vosotros tiene un esquema de un 18f452  para  proteus? yo creo que los que empecemos con este compilador seria bueno hacerlo practicando con el mismo ejemplo en proteus... y de ahi ir abanzando, no creeis?

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #12 en: 08 de Mayo de 2007, 16:59:43 »
sube tus archivos pa chekearlos y sobrepasar el probelmilla antes de seguir avanzando con los ejemplos  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #13 en: 10 de Mayo de 2007, 17:27:22 »
continuando con la linea de este post, ahora se va a colocar mas archivos, en esta ocasion vamos a reventar (es decir vamos a estudiar con muchas ganas) las estructuras de control del C aplicado en el C18 me refiero a lo siguiente:

Selectivas:
- if
- if else
- switch case

Repetitivas:
- while
- do while
- for

Bifurcaciónes:
- break
- continue

recomiendo que vayan buscando cualquier libro de C para saber un poco mas sobre el funcionamiento de la sintaxis, yo pondre lo poco que encontre, sin embargo uno no debe conformarse con una unica fuente.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #14 en: 10 de Mayo de 2007, 19:49:27 »
Estructura de Control IF
Es una declaración condicional cuyo código asociado es ejecutado dependiendo de la condición. Si la expresion o condicion es TRUE entonces se ejecuta la sentencia, si es FALSE se terminara la condicion, ahora, TRUE es un valor cualquiera diferente de cero 0, FALSE es un valor igual a cero 0.
 
if (expresion o condicion)
  sentencia;
ejem:
      if(PORTA == 0X01) //portA es igual a 1?
         LATB = 0X01;//si, ejecutar sentencia
             //no, fin de declaracion

if (expresion o condicion)
   {
  sentencia1;
  sentencia2;
  sentencia3;
  sentencia4;
  sentencia5;
    }
ejem:
      //***************
      if(PORTA == 0X02) //puertoA es igual a 2?
      {
         LATB = 0X02; //si, ejecutar sentencias dentro de las llaves
         LATC = 0X02;
      }
      //***************
               //no, fin de condicional


Estructura de Control IF-ELSE
Tenemos 2 bloques de codigo separados por la condicion, de esta manera, si la condicon es TRUE ejecutar bloque 1, si es FALSE entonces ejecutar bloque2.

if (expresion o condicion)
{
  sentencia1; //bloque 1
  sentencia2;
}
else
{
  sentencia3; // bloque 2
  sentencia4;
}
ejem:
      //***************
      if(PORTA >= 0X09); porta es mayor o igual que 9?
      {
         a=255; //bloque 1     TRUE
         b=0;
      }
      else  //sino, entonces...
      {
         b=255;//bloque 2       FALSE
         a=0;
      }
      //***************
           //fin de condicion

Estructura de Control IF - ELSE/ELSE IF
Es una variante del IF - ELSE, por la cual el lenguaje C nos permite realizar una estructura de condicion con mas de 2 decisiones.

if (expresion1 o condicion1)
{
  sentencia1; //bloque 1
  sentencia2;
}
else if (expresion2 o condicion2)
{
  sentencia3; // bloque 2
  sentencia4;
}
else
{
  sentencia5; // bloque 3
  sentencia6;
}
ejem:
      //***************
      if(PORTA == 0X0F) //condicion 1
      {
         LATB = 0X0F;
         LATC = 0X0F;
      }
      else if (PORTA == 0X0E) // condicion 2
      {
         LATB = 0X0E;
         LATC = 0X0E;
      }
      else //sino , entonces
      {
         a++;
         b--;
      }

Finalmente, anotamos los operadores con lo que se obtienen las condiciones o expresiones del condicional IF:
Citar
x == y   :    x (igual a) y
x != y    :    x (es diferente a) y
x > y     :    x (es mayor que) y
x < y     :    x (es menor que) y
x <= y   :    x (es menor o igual que) y
x >= y   :    x (es mayor o igual que) y
x && y    :   AND logico
x || y     :   OR logico



APLICACION DEL IF, ELSE, ELSE IF

Código: C#
  1. //micro_cadaver
  2. //hlaredo@gmail.com
  3. #include <p18f2525.h>
  4. #include <stdio.h>
  5. #pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
  6. #pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
  7. #pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
  8. #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
  9. #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
  10. #pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
  11. #pragma config CPB = ON,CPD = ON//CONFIG5H
  12. #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
  13. #pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
  14. #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
  15. #pragma config EBTRB = ON//CONFIG7H
  16.  
  17. unsigned int a,b;
  18.  
  19. void main(void){
  20.         //inicializar puertoA
  21.         //todos los pines
  22.         //seran digitales
  23.         PORTA = 0X00;
  24.         LATA = 0X00;
  25.         ADCON0 = 0X00;
  26.         ADCON1 = 0X0F;
  27.         CMCON = 0X07;
  28.         //*******************
  29.         TRISA = 0XFF;
  30.         TRISB = 0X00;
  31.         TRISC = 0X00;
  32.         LATB = 0X00;
  33.         LATC = 0X00;
  34. //*******************************************************
  35. //*******************************************************
  36.         while(1)
  37.         {
  38.                 //***************
  39.                 if(PORTA == 0X01)
  40.                         LATB = 0X01;
  41.                 //***************
  42.                 if(PORTA == 0X02)
  43.                 {
  44.                         LATB = 0X02;
  45.                         LATC = 0X02;
  46.                 }
  47.                 //***************
  48.                 if(PORTA <= 0X05)
  49.                         a=10;
  50.                 else
  51.                         a=100;
  52.                 //***************
  53.                 if(PORTA >= 0X09)
  54.                 {
  55.                         a=255;
  56.                         b=0;
  57.                 }
  58.                 else
  59.                 {
  60.                         b=255;
  61.                         a=0;
  62.                 }
  63.                 //***************
  64.                 if(PORTA == 0X0F)
  65.                 {
  66.                         LATB = 0X0F;
  67.                         LATC = 0X0F;
  68.                 }
  69.                 else if (PORTA == 0X0E)
  70.                 {
  71.                         LATB = 0X0E;
  72.                         LATC = 0X0E;
  73.                 }
  74.                 else
  75.                 {
  76.                         a++;
  77.                         b--;
  78.                 }
  79.         }
  80. //*******************************************************
  81. //*******************************************************
  82. }

todos los archivos:h**p://www.box.net/shared/ez6axq7sq1
« Última modificación: 10 de Mayo de 2007, 20:33:46 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com


 

anything