TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: lucasnvf en 23 de Enero de 2009, 10:32:15
-
Hola, estoy haciendo un programa donde uso 2 interrupciones:
int_RB
int_timer0
Luego de habilitar las interrupciones y demas cosas(en el main), y sin q cambie ningun de los puertos RB4 - RB7 , me salta a la rutina de int_RB. Alguien me pude decir q estoy haciendo mal
Aca dejo el main y la rutina de int_RB
#INT_RB
void cruce(void)
{
int aux=0;
#asm
movwf savew
swapf STATUS,0
movwf savestatus
clrwdt
bcf INTCON,0
#endasm
aux = envio;
aux = aux & 2;
if (aux == 0)
enviar();
#asm
swapf savestatus,0
movwf STATUS
swapf savew,1
swapf savew,0
#endasm
}
void main(void)
{
set_tris_a(0x00);
set_tris_b(0x80);
set_tris_c(0x00);
set_tris_d(0x00);
output_low(pin_D0);
output_low(pin_D1);
output_low(pin_D2);
output_a(0x00);
output_b(0x00);
output_c(0x00);
output_d(0x00);
enable_interrupts(GLOBAL); // Habilito Interrupciones
enable_interrupts(INT_RB);
enable_interrupts(INT_RTCC); // Habilito Interrupción RTCC
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);// TIMER0: Clock Interno, Presescaler 256.
set_timer0(252); //T = (256 - precarga) * Preescaler * 4 / Fosc --->>> precarga=252
setup_adc_ports(NO_ANALOGS);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL); // Reloj interno para el ADC
set_adc_channel(0); //Canal 0.
-
Le has puesto una resistencia de 10k A POSITIVO al Rb0? porque si la tienes al aire puede dispararse sola.
También examina la hoja de datos, si activas INT cuando cae Rb0 o cuando sube Rb0. Es que no entiendo C.
-
No hay problema con RB0 porque no uso esa interrupcion. Estoy usando int_RB que tiene en cuenta lo que pasa en las patas RB4 a RB7
-
Saludos
Donde termina el programa.
-
Ya lo solucione, era porq las funciones en C me modificaban el trisb, entonces hay q corregirlo manualmente luego q cambia. Muchas gracias por la disposicion.
Cualquier cosulta no duden en mandarme