Autor Tema: Interrupciones en PIC  (Leído 2592 veces)

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

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
Interrupciones en PIC
« en: 05 de Mayo de 2004, 04:10:00 »
Existe algun compilador de C para PIC (en mi caso P18) que trabaje directamente con la rutina de esta y no tenga que entrar en un poolling (con el c18 hay que hacer un pooling y un goto al final). Es una limitación del micro, o es del compilador ? Gracias

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Interrupciones en PIC
« Respuesta #1 en: 05 de Mayo de 2004, 04:17:00 »
Prueba el CCS (o PCWH que es lo mismo). Se hace muy simple...
La activas y creas una rutina. Un ejemplo de uso en este sería:
Codigo:

#include <16f84a.h>

#fuses HS,NOWDT
#use delay (clock=4000000)
#define INTS_PER_SECOND 15 // (4000000/(4*256*256))

byte seconds; // A running seconds counter
byte int_count; // Number of interrupts left before a second has elapsed
int numero;

#int_rtcc // This function is called every time
clock_isr() { // the RTCC (timer0) overflows (255->0).
--int_count;
if(int_count==0) { // per second.
   ++seconds;
   if (numero == 0) {
      numero = 1;
   } else {
      numero = 0;
      }
   int_count=INTS_PER_SECOND;
   }

}

void main(void) {
int_count=INTS_PER_SECOND;
set_timer0(0);
setup_counters( RTCC_INTERNAL, RTCC_DIV_256);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);

set_tris_a(0x00);
numero = 0;
for( ; ; ) {
if(numero==0) {
output_bit(PIN_A0,1);
} else {
output_bit(PIN_A0,0);
}
}
}



Como ves sólo hay que activarla y luego hacer una rutina indicando antes la interrupción que se trata, #int_rtcc . Osea, lo que esté debajo de esto, la función, es lo que hace cuando se crea esa interrupción. Fácil verdad...
Saludos desde Huelva (ESPAÑA)

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
RE: Interrupciones en PIC
« Respuesta #2 en: 05 de Mayo de 2004, 04:56:00 »
Muchas gracias, por cierto: este compilador se puede integrar con MPLAB o tiene su propio programa ¿?. Y otra cosilla cual es la ultima version de este, de donde lo puedo sacar (emule tal vez ?), y donde puedo encontrar ejemplos y documentacion /ya que la documentacion de la web microchip y las librerias es para el c18

Gracias

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Interrupciones en PIC
« Respuesta #3 en: 05 de Mayo de 2004, 08:04:00 »
Creo que si se puede integrar, no lo se seguro.
Pero trae su propio programa, muuuucho mejor que el MPLab.
Se puede usar el ICD1 de microchip, y va mucho mejor y más rápido.
En cuanto a la última versión, es la 3.190. Busca donde dices o con el Overnet, que es lo mismo (una variante) pero más cómodo, al estilo Kazaa...
Por el foro hay un manual de este en español. Suficiente para trabajar con el. Si no lo encuentras te lo envío yo. En cuanto a ejemplos, el foro está lleno...
Saludos desde Huelva (ESPAÑA)

Desconectado CDT_Gonzalo

  • PIC12
  • **
  • Mensajes: 93
RE: Interrupciones en PIC
« Respuesta #4 en: 05 de Mayo de 2004, 08:14:00 »
Escrito originalmente por cucaracha
Prueba el CCS (o PCWH que es lo mismo). Se hace muy simple...
La activas y creas una rutina. Un ejemplo de uso en este sería:
Codigo:

#include <16f84a.h>

#fuses HS,NOWDT
#use delay (clock=4000000)
#define INTS_PER_SECOND 15 // (4000000/(4*256*256))

byte seconds; // A running seconds counter
byte int_count; // Number of interrupts left before a second has elapsed
int numero;

#int_rtcc // This function is called every time
clock_isr() { // the RTCC (timer0) overflows (255->0).
--int_count;
if(int_count==0) { // per second.
   ++seconds;
   if (numero == 0) {
      numero = 1;
   } else {
      numero = 0;
      }
   int_count=INTS_PER_SECOND;
   }

}

void main(void) {
int_count=INTS_PER_SECOND;
set_timer0(0);
setup_counters( RTCC_INTERNAL, RTCC_DIV_256);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);

set_tris_a(0x00);
numero = 0;
for( ; ; ) {
if(numero==0) {
output_bit(PIN_A0,1);
} else {
output_bit(PIN_A0,0);
}
}
}



Como ves sólo hay que activarla y luego hacer una rutina indicando antes la interrupción que se trata, #int_rtcc . Osea, lo que esté debajo de esto, la función, es lo que hace cuando se crea esa interrupción. Fácil verdad...


La verdad que es muy copado como trabaja este compilador, porque ademas se encarga de almacenar los registros y de resetear todos los flags q hagan falta.

Ademas tiene un monton de librerias como para manejar varias cosas, entre ellas ciertos integrados, displays lcds, protocolos (rs232 realmente esta tan "acoplado" al sistema que se hace realmente fácil, solo con la funcion printf), entre varias cosas...

Muy copado el compilador!

Saludos

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Interrupciones en PIC
« Respuesta #5 en: 05 de Mayo de 2004, 08:41:00 »
Y además hace un código bastante depurado. Es muy bueno, sí....
Saludos desde Huelva (ESPAÑA)

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
RE: Interrupciones en PIC
« Respuesta #6 en: 06 de Mayo de 2004, 02:33:00 »
Muchas gracias, por lo que veo parece mas "interesante" que C18, respecto a lo del manual cucaracha encantado si me lo envias por que no lo puedo bajar del foro mi email es luis_serrano@ya.com.

Grácias otra vez !!

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Interrupciones en PIC
« Respuesta #7 en: 06 de Mayo de 2004, 04:49:00 »
Ahí lo llevas...

En cuanto a lo de no poder bajar archivos del foro... creo que a muchos nos ha pasado. Pero se soluciona sólo. Yo ya bajo sin problemas... ¿?¿?¿?
Saludos desde Huelva (ESPAÑA)


 

anything