TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Mario87 en 06 de Abril de 2007, 12:52:42
-
Es decir, se lo que son y para que sirven, y en principio creo que se como se ejecutan (el PIC comprueba antes de realizar una instruccion si se ha producido una interrupcion comprobando la flag correspondiente, y si ha ocurrido guarda el valor de CP, realiza las tareas en la funcion que hayas definido como interrupcion, y el terminarlas vuelve a sacar CP de la pila y continua su camino).
Lo que no entiendo son los tipos. Obsrevando el archivo 12f629.h (es el pic que estoy usando) aparece:
#define GLOBAL 0x0BC0
#define INT_RTCC 0x0B20
#define INT_EXT 0x0B10
#define INT_TIMER1 0x8C01
#define INT_TIMER0 0x0B20
#define INT_EEPROM 0x8C80
#define INT_COMP 0x8C08
#define INT_RA 0xFF0B08
#define INT_RA0 0x010B08
#define INT_RA1 0x020B08
#define INT_RA2 0x040B08
#define INT_RA3 0x080B08
#define INT_RA4 0x100B08
#define INT_RA5 0x200B08
no entiendo que haya tantas ni para que son, hasta donde yo se una interrupcion se ejecuta cuando la patita INT especificada en el datasheet cambia de 0 a 1 o viceversa segun lo programes, y eso es lo que pretendo precisamente con este codigo:
#include <12f629.h>
#use delay (clock=4000000)
#int_ext
void INTRA2()
{
output_high(PIN_A0);
delay_ms(3000);
output_low(PIN_A0);
}
void main(void)
{
set_tris_a(0b11111110);
enable_interrupts(int_ext);
EXT_INT_EDGE(h_to_l);
enable_interrupts(GLOBAL);
output_low(PIN_A0);
do{
}while(TRUE);
}
Se supone que el PIC debería de estar en un bucle infinito hasta que se introduzca un 0 en la patita INT, y entonces durante tres segundos el pin A0 se pondrá a uno para despues volver a 0.
No funciona y no lo comprendo, a ver si alguien me ilumina.
-
pues parece estar todo en su lugar, deberia funcionar.
talvez sea algun problema de tus #fuses, o algo asi, podrias ponerlos??
usas cristal u oscilador interno??, desabilita comparadores, habilitas Watch Dog??, MCLR?''
No se, revisa el hardware...
Suerte :-/
-
los fuses son estos:
INTRC_IO,NOWDT,NOPROTECT,PUT,MCLR,BROWNOUT
-
Pues ya solo te puedo decir lo obvio.
asegurate de tener una resistencia del pin 4 a Vcc por tener MCLR, una buena fuente que te de los 5v como deben de ser por el BROWNOUT.
no se, haber que opina alguien mas.
no entiendo que haya tantas ni para que son, hasta donde yo se una interrupcion se ejecuta cuando la patita INT especificada en el datasheet cambia de 0 a 1 o viceversa segun lo programes
Date una vuelta por aca Link (http://www.todopic.com.ar/foros/index.php?topic=14463.msg87810#msg87810) y haber si te sirve de algo, eso en cuanto a las RA, RA1,...
En el CCS fijate en el menu View y por ahi te dice para que es cada interrupcion, te debe aparecer algo asi.
(http://img406.imageshack.us/img406/1394/intvn7.jpg)
Saludos :-)
-
muchas gracias Rulo me has sido de gran ayuda, era una dichosa resistencia lo que me faltaba :x al final ha resultado ser el fallo mas tonto posible :mrgreen:
Ahora mismo compruebo eso que me has dicho en el CCS, a ver si aprendo mas sobre las interrupciones
gracias de nuevo y un saludo
-
Jaja, no te preocupes, a todos nos han pasado cosas similares, y animo que aqui en el foro hay muchisima informacion. Una vez que uno empieza con esto de los pics ya no se puede parar.
Saludos :mrgreen: