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

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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #30 en: 23 de Mayo de 2007, 08:57:19 »
hola maunix, seria algo asi:
#include <c:\archivosdeprograma\microchip\c18\h>
 :-/

No.  Es tener un proyecto con su archivo .mcp y .mcw en una carpeta.  En dicha carpeta también tienes tu main, tus librerías que siempre usas, el linker file, y los header (.h) que siempre usas.

Todo eso lo guardas en algun lado y lo copias y pegas cada vez que inicias un nuevo proyecto y cambias lo que debas cambiar.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #31 en: 23 de Mayo de 2007, 11:25:54 »
Algo como guardar tu workspace ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #32 en: 23 de Mayo de 2007, 14:41:10 »
Algo como guardar tu workspace ;)

Claro, pero casualmente el 'workspace' en un proyecto de microchip es un archivo separado.  Hay que guardar eso y todo el resto que uno crea conveniente.  Por eso hablé de 'templates'  8) 8)

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #33 en: 24 de Mayo de 2007, 12:20:37 »
Hola amigos!!

Estoy intentando estudiar y aprender con los ejemplos de micro_cadaver pero para que yo los pueda utilizar con mi pic que es el 18F4620 tengo que saber para que sirve esta parte del programa.

#pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
#pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
#pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
#pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
#pragma config CPB = ON,CPD = ON//CONFIG5H
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
#pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
#pragma config EBTRB = ON//CONFIG7H

Yo vengo del CCS y supongo que son como los fuses alli.He estado buscando en la ayuda que significa cada cosa pero no consigo encontrarlo.Seguire buscandolo, pero si alguien me puede ayudar se lo agradeceria.

Otra pregunta, o mas bien aclaracion, es que los puertos no hay que decirles en que parte del mapa de memoria esta porque lo toma del linker, no?

Gracias :-/
« Última modificación: 24 de Mayo de 2007, 12:47:15 por barg »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #34 en: 24 de Mayo de 2007, 12:51:19 »
claro jeje puedes buscar en el datasheet correspondiente a tu pic18FXX  y te diriges a CONFIGURATION BITS, ahi aparece las palabras de configuracion de todo tu micro, en el 18f2525 son 7 registros de configuracion  :? y crei conveniente ponerlo todo porque mi filosofia es que el pic maniaco debe saber exactamente que es lo que esta programando en su chip, no dejar cabos sueltos y entender todo al menos el 99% jijijiji yo voy recien por el 70% creo  :D,ya pues esa es una manera de saber que significan cada registro y cada bit de configuracion, otra manera es dirigirte a la subcarpeta DOC ques esta en la carpeta del programa MPLAB C18, dentro de la subcarpeta DOC encontraras varios archivos, como ya losmencionen antes, le das al archivo de ayuda hlpPIC18ConfigSEt , luego buscas tu pic en una lista que esta a la izquierda y te lees todooooo lo que salga  :mrgreen:

cualquier duda mas no dudes en postearlo  :-)
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

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

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #35 en: 25 de Mayo de 2007, 07:04:17 »
Buenas!!! :-/ :-/

He visto en un ejemplo algo de lo que no estoy familiarizado y lo expongo aqui a ver si alguien sabe que significa y para que sirve.Se trata de lo siguiente:

#if !defined(DEBUG_MODE)
   #define BIND_SWITCH             PORTBbits.RB7         // Bind = RB7 in normal operation
   #define TRIS_BIND_SWITCH        TRISBbits.TRISB7
#else
   #define BIND_SWITCH             PORTBbits.RB5         // Bind = RB5 in debug
   #define TRIS_BIND_SWITCH        TRISBbits.TRISB5
#endif

No entiendo porque pone # delante de la sentencia if.¿Sabe alguien porque se hace esto?

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #36 en: 25 de Mayo de 2007, 09:41:52 »
Hola barg son instrucciones de preprocesado, se ejecuatn antes de la compilación y permiten cambiar el programa en funcion de variables externas. Para el caso que pones, si definimos la variable DEBUG_MODE la variable BIND_SWITCH se asigana al bit 7 del puerto B y si no está definida se asigna al bit 5 del puerto B. Permite por lo tanto tener distintas versiones del programa con un mismo código fuente (con DEBUG y SIN DEBUG), dependiendo como esten definidas las variables del preprocesador.

Un saludo.
* 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 barg

  • PIC10
  • *
  • Mensajes: 45
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #37 en: 28 de Mayo de 2007, 05:56:04 »
Micro_cadaver he intentado bajarme los archivos de los programas que has puesto aqui pero no he podido bajarmelos.Los puedes volver a poner o mandarmelos a rg_benitez@hotmail.com .Muchas gracias

Gracias por tu explicacion jfh900
« Última modificación: 28 de Mayo de 2007, 06:01:17 por barg »

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #38 en: 28 de Mayo de 2007, 13:51:04 »
Hola de nuevo,  :) :)

Estoy intentando probar el programita de micro_cadaver de hacer parpadear un led, como veis mis pasos son lentos aunque espero que firmes :P.Y cuando le doy a "build all" me da error y pone lo siguiente:

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "D:\PROGRAMAS\MCC18\bin\mcc18.exe" -p=18F4620 "parpadeo.c" -fo="parpadeo.o" -Oa -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\Documents and Settings\Rafa\Escritorio\Pruebas con C18\Nueva carpeta\parpadeo.c:1:Error [1027] unable to locate 'p18f4620.h'
C:\Documents and Settings\Rafa\Escritorio\Pruebas con C18\Nueva carpeta\parpadeo.c:2:Error [1027] unable to locate 'delays.h'
C:\Documents and Settings\Rafa\Escritorio\Pruebas con C18\Nueva carpeta\parpadeo.c:3:Error [1027] unable to locate 'stdio.h'

Creo que el problema es que no reconoce la localizacion de los archivos, pero lo he provado de muchas formas distintas y siempre es el mismo resultado.¿Alguien sabe el porque de mi error?

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #39 en: 28 de Mayo de 2007, 15:39:12 »
m....
si recuerdo ese error, m..... creo que sucede cuando no esta direccionado la carpeta de librerias en tu C18, has visto con detalles los links donde configuran el c18? y el otro programa de prender un led te compilo bien? he estado buscando ese error y no recuerdo como generarlo, sigo en la busqueda...





pd1: que ya no funciona el link? a ver.... h**p://www.box.net/shared/51111xhblr si funciona, naturalmente amigo teneis que cambiar los  * *  por  t t de tal manera que diga http   :mrgreen: es un truquito para que no lo bajen bots de descargas  :-)
pd2: te agregue al msn para seguir conversando!!!  :mrgreen:
pd3: jijiji toy con el cerebro atorado viendo unos problemillas con el i2c en c18, termino con eso y seguimos con las interrupciones amigos  :-/
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 #40 en: 28 de Mayo de 2007, 23:06:02 »
INTERRUPCIONES CON EL C18

Como se puede apreciar en la gama 18FXXX existen 10 registros que interactúan para gestionar las interrupciones del PIC, estos son los siguientes:
  • RCON
  • INTCON, INTCON2, INTCON3
  • PIR1, PIR2
  • PIE1, PIE2
  • IPR1, IPR2

Para cada interrupción existen 3 bits de control:
  • Bit de Bandera (flag bit)
  • Bit de Habilitación (enable bit)
  • Bit de Prioridad (priority bit)

Cada interrupción tiene un bit de control de prioridad (priority bit) el cual determina si es de alta o baja prioridad dicha interrupción. Además, ésta característica de prioridad que tiene cada interrupción también puede ser deshabilitada y tratar a todas las interrupciones bajo una misma jerarquía (como en la gama 16FXXX), se trata del bit 7 del rgistro RCON:




DECLARACIÓN DE UNA INTERRUPCIÓN
En el C18 una interrupción tiene un formato de declaración definido por el propio compilador. Sin embargo tenemos que indicar al compilador donde esta ubicado el vector de interrupción correspondiente, y digo correspondiente porque tenemos dos prioridades de interrupción, una alta y otra baja:


Donde la interrupción de baja prioridad corresponde al vector de memoria 0X0018, y la de alta prioridad corresponde al vector de memoria 0X0008. Para efectuar el direccionamiento de los vectores utilizamos la directiva #pragma.

#pragma
La directiva #pragma abarca aplicaciones tanto en la memoria de programa como en la memoria de datos, para efectos de entender bien lo de las interrupciones nos limitaremos (por ahora  :mrgreen:) a su aplicación a nivel de secciones con instrucciones en la memoria de programa.

Con esta directiva #pragma lo que conseguimos es que el compilador ubique un bloque de código en una posición absoluta definida por nosotros. La sintaxis sería asi:

#pragma code [nombre_de_seccion]=[dirección absoluta de la seccion]
   //aca va el bloque de código
   .
   .
   .
#pragma code //se devuelve la posición de meoria por defecto al compilador


Entonces aplicándolo a los PIC, apuntamos al vector de alta prioridad de interrupción:
Código: C
  1. void interrupcion_por_timer0(void); funcion declarada prototipo
  2.  
  3. #pragma code prioridad_alta = 0X0008         //se apunta al vector de interrupcion de alta prioridad
  4. void interrupcion_alta (void)                       //bloque de codigo, en el caso de interrupciones ubicamos una funcion
  5. {
  6.         _asm
  7.         goto interrupcion_por_timer0                  //indicamos al compilador donde esta la interrupcion
  8.         _endasm
  9. }
  10. #pragma code                                               //fin de la interrupcion, como un retfie en el assembler

Ahora, apuntamos al vector de baja prioridad de interrupción:
Código: C
  1. void interrupcion_por_portb(void); funcion declarada prototipo
  2.  
  3. #pragma code prioridad_baja = 0X0018         //se apunta al vector de interrupcion de alta prioridad
  4. void interrupcion_baja (void)                       //bloque de codigo, en el caso de interrupciones ubicamos una funcion
  5. {
  6.         _asm
  7.         goto interrupcion_por_portb                  //indicamos al compilador donde esta la interrupcion
  8.         _endasm
  9. }
  10. #pragma code                                               //fin de la interrupcion, como un retfie en el assembler

Observemos que en ambos casos existe una función interrupcion_alta e interrupción_baja, las cuales deben de ser declaradas como prototipos y no deben tener parámetro de entrada ni de salida por ser asincronas (interrupciones), por ello va el void.

Lo que nos falta es la otra directiva que transfiere el flujo del programa a la ISR (a la interrupcion  :-)) para efectuar el codigo correspondiente. Me estoy refiriendo a la función que ha sido declarada en prototipo. Su sintaxis es la siguiente:

#pragma interrupt [nombre_de_función]
void [nombre_de_función](void)
{
   //codigo de la interrupcion
}

Ejemplo:
Código: C
  1. void interrupcion_por_timer0(void); funcion declarada prototipo
  2. //************************************************************************************
  3. //************************************************************************************
  4. #pragma code prioridad_alta = 0X0008         //se apunta al vector de interrupcion de alta prioridad
  5. void interrupcion_alta (void)                       //bloque de codigo, en el caso de interrupciones ubicamos una funcion
  6. {
  7.         _asm
  8.         goto interrupcion_por_timer0                  //indicamos al compilador donde esta la interrupcion
  9.         _endasm
  10. }
  11. #pragma code                                               //fin de la interrupcion, como un retfie en el assembler
  12. //************************************************************************************
  13. //************************************************************************************
  14. #pragma interrupt interrupcion_por_timer0
  15. void interrupcion_por_timer0(void)
  16. {
  17.         if(INTCONbits.TMR0IF)
  18.         {
  19.                 PORTB=~PORTB;
  20.                 tiempo++;
  21.                 INTCONbits.TMR0IF = 0;
  22.         }
  23. }
  24. //************************************************************************************
  25. //************************************************************************************

Código: C
  1. void interrupcion_por_portb(void); funcion declarada prototipo
  2. //************************************************************************************
  3. //************************************************************************************
  4. #pragma code prioridad_alta = 0X0008         //se apunta al vector de interrupcion de alta prioridad
  5. void interrupcion_alta (void)                       //bloque de codigo, en el caso de interrupciones ubicamos una funcion
  6. {
  7.         _asm
  8.         goto interrupcion_por_portb                  //indicamos al compilador donde esta la interrupcion
  9.         _endasm
  10. }
  11. #pragma code                                               //fin de la interrupcion, como un retfie en el assembler
  12. //************************************************************************************
  13. //************************************************************************************
  14. #pragma interrupt interrupcion_por_portb
  15. void interrupcion_por_portb(void)
  16. {
  17.         if(INTCONbits.RBIF)
  18.         {
  19.                 PORTB=~PORTB;
  20.                 tiempo++;
  21.                 INTCONbits.RBIF = 0;
  22.         }
  23. }
  24. //************************************************************************************
  25. //************************************************************************************

Ahora estudiaremos cada interrupción del PIC; tendré desahabilitada la opción de las prioridades en las interrupciones para los siguientes programas, luego activaremos las prioridades cuando dominemos cada interrupción.  :-)
« Última modificación: 29 de Mayo de 2007, 11:23:40 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 #41 en: 29 de Mayo de 2007, 03:05:45 »
INTERRUPCIÓN CON EL TIMER0
El timer0 tiene las siguientes características:
  • Modo de operación como temporizador o contador, ambos en formato de 16 u 8 bits.
  • Presacaler de 8 bits.
  • Configuración del generador de reloj como externo o interno.
  • Flanco de incremento para el reloj externo
  • Interrupción por desborde

Para mayores detalles indagar en el propio datasheet y revisar la definición de los bits de los siguientes registros  :mrgreen::

Programa de aplicación:
En este programa usaremos el modo temporizador a 16 bits, prescaler a 64, reloj generador interno y con interrupción por desborde; de tal manera que la interrupción del timer0 produzca una oscilación en los pines del puerto B. Esta osiclación tendrá la temporización:

periodo del desborde =  4  x  Prescaler  x  (65535 - valor cargado en timer0)
                                       cristal oscilador

periodo del desborde =  4  x  16  x  (65535 - 00000)
                                       4 x 10^6

periodo del desborde = 1.04856

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. volatile int tiempo;
  16.  
  17. void temporizador(void);
  18. //
  19. //******************************************************//
  20. //      Vector de Interrupcion
  21. //******************************************************//
  22. //
  23. #pragma code prioridad_nomal = 0X0008
  24. void interrupcion_normal (void)
  25. {
  26.         _asm goto temporizador _endasm
  27. }
  28. #pragma code
  29. //
  30. //******************************************************//
  31. //      Rutina de Interrupcion
  32. //******************************************************//
  33. //
  34. #pragma interrupt temporizador
  35. void temporizador(void)
  36. {
  37.         if(INTCONbits.TMR0IF)
  38.         {
  39.                 PORTB=~PORTB;
  40.                 tiempo++;
  41.                 INTCONbits.TMR0IF = 0;
  42.         }
  43. }
  44. //
  45. //******************************************************
  46. //******************************************************
  47. //
  48. //
  49. //
  50. //******************************************************//
  51. //******************************************************//
  52. //
  53. //
  54. //              Programa Principal
  55. //
  56. //
  57. //******************************************************//
  58. //******************************************************//
  59. //
  60. void main(void)
  61. {
  62.         ADCON0 = 0X00,ADCON1 = 0X0F,CMCON = 0X07;
  63.         //puerto A con todos los pines digitales
  64.         TRISA = 0XFF,TRISB = 0X00,TRISC = 0X00;
  65.         PORTA = 0X00,PORTB = 0X00,PORTC = 0X00;
  66.         T0CON = 0X83;//configuramos el timer0
  67.         TMR0H = 0X00,TMR0L = 0X00;//inicializamos registros del timer0
  68.         RCON = 0X00;//IPEN = 0
  69.         INTCON = 0XA0;//configuramos la interrupcion del timer0
  70. //*******************************************************
  71. //*******************************************************
  72.         while (1);
  73. //*******************************************************
  74. //*******************************************************
  75. }



Programa de aplicación:
En este programa usaremos el modo contador a 8 bits, prescaler deshabilitado, reloj generador externo por el pin RA4 para flanco de bajada y con interrupción por desborde; de tal manera que la interrupción del timer0 produzca una oscilación en los pines del puerto B, incrementándose el valor del timer0 cada vez que se aplica un pulso con flanco de bajada.
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. volatile int tiempo;
  16.  
  17. void temporizador(void);
  18. //
  19. //******************************************************//
  20. //      Vector de Interrupcion
  21. //******************************************************//
  22. //
  23. #pragma code prioridad_nomal = 0X0008
  24. void interrupcion_normal (void)
  25. {
  26.         _asm goto temporizador _endasm
  27. }
  28. #pragma code
  29. //
  30. //******************************************************//
  31. //      Rutina de Interrupcion
  32. //******************************************************//
  33. //
  34. #pragma interrupt temporizador
  35. void temporizador(void)
  36. {
  37.         if(INTCONbits.TMR0IF)
  38.         {
  39.                 PORTB=~PORTB;
  40.                 tiempo++;
  41.                 TMR0H = 0X00,TMR0L = 240;//inicializamos registros del timer0
  42.                 INTCONbits.TMR0IF = 0;
  43.         }
  44. }
  45. //
  46. //******************************************************
  47. //******************************************************
  48. //
  49. //
  50. //
  51. //******************************************************//
  52. //******************************************************//
  53. //
  54. //
  55. //              Programa Principal
  56. //
  57. //
  58. //******************************************************//
  59. //******************************************************//
  60. //
  61. void main(void)
  62. {
  63.         ADCON0 = 0X00,ADCON1 = 0X0F,CMCON = 0X07;
  64.         //puerto A con todos los pines digitales
  65.         TRISA = 0XFF,TRISB = 0X00,TRISC = 0X00;
  66.         PORTA = 0X00,PORTB = 0X00,PORTC = 0X00;
  67.         T0CON = 0XF0;//configuramos el timer0
  68.         TMR0H = 0X00,TMR0L = 240;//inicializamos registros del timer0
  69.         RCON = 0X00;//IPEN = 0
  70.         INTCON = 0XA0;//configuramos la interrupcion del timer0
  71. //*******************************************************
  72. //*******************************************************
  73.         while (1);
  74. //*******************************************************
  75. //*******************************************************
  76. }




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

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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #42 en: 29 de Mayo de 2007, 16:17:53 »
Hola de nuevo,  :) :)

Estoy intentando probar el programita de micro_cadaver de hacer parpadear un led, como veis mis pasos son lentos aunque espero que firmes :P.Y cuando le doy a "build all" me da error y pone lo siguiente:

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "D:\PROGRAMAS\MCC18\bin\mcc18.exe" -p=18F4620 "parpadeo.c" -fo="parpadeo.o" -Oa -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\Documents and Settings\Rafa\Escritorio\Pruebas con C18\Nueva carpeta\parpadeo.c:1:Error [1027] unable to locate 'p18f4620.h'
C:\Documents and Settings\Rafa\Escritorio\Pruebas con C18\Nueva carpeta\parpadeo.c:2:Error [1027] unable to locate 'delays.h'
C:\Documents and Settings\Rafa\Escritorio\Pruebas con C18\Nueva carpeta\parpadeo.c:3:Error [1027] unable to locate 'stdio.h'

Creo que el problema es que no reconoce la localizacion de los archivos, pero lo he provado de muchas formas distintas y siempre es el mismo resultado.¿Alguien sabe el porque de mi error?

Si, es porque debes indicar en tu proyecto donde están las librerías (carpeta LIB).  Tu defines archivos .h pero en realidad los archivos estandar están compilados como librerías (eso permite que se compilen tan rápido porque ya están preprocesados) y por eso debes indicarle el path a tus librerías.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #43 en: 29 de Mayo de 2007, 16:41:42 »
perdón por mi offtopic.

aquí va mi voto positivo por el amigo micro_cadaver que le está dando duro al C18

¡¡sigue adelante!!

 :-/ :-/ :-/ :-/ :-/ :-/ :-/
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #44 en: 29 de Mayo de 2007, 18:34:26 »
 :mrgreen: jijiji
hoy pongo la siguiente interrupcion  :-/ :-/ :-/ :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

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