TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: eduardoy2kk en 09 de Febrero de 2005, 19:52:00

Título: Ayuda con iterupciones rb4-rb7
Publicado por: eduardoy2kk en 09 de Febrero de 2005, 19:52:00
Hola a todos soy bastante nuevo en el tema de kos pic y el C , uso el CCS pero me esta dando algunos problemas para manejar las interupciones por RB, pude realizar que me las detecte pero no puedo independisar la deteccion de los pines , por ejemplo si quiero que RB4 me prenda un led en A2 por 1 seg y si detecta una RB6 me prenda el mismo led por 3 seg.
Me gustaria que me den programita para usarlo como ejemplo sencillo asi lo puedo entender como trabaja la deteccion de la interupcin en os diferentes pines.
Agradesco cualquier data ya qu en el esplicativo del CCS no esta muy claro

Gracias  
            EduardoGiño
Título: RE: Ayuda con iterupciones rb4-rb7
Publicado por: Modulay en 09 de Febrero de 2005, 20:04:00
Algo que puedes hacer es,en la rutina de interrupción,capturar el valor de todo el puerto en una variable,y una vez hayas salido de la rutina,comprobar a partir del valor de esa variable cual es el pin que provocó la interrupción
Título: RE: Ayuda con iterupciones rb4-rb7
Publicado por: eduardoy2kk en 09 de Febrero de 2005, 20:13:00
Hola gracias por responder rapidamente.
Bueno hasta pasar el valor en una variable vamos bien pero ahora como veo o detecto cual cambio disculpame que sea incistente con los ejemplo peo para mi es la forma mas facil de verlo .

Gracias
            Eduardo
Título: RE: Ayuda con iterupciones rb4-rb7
Publicado por: Lager. en 09 de Febrero de 2005, 23:02:00
Aqui hay un ejemplo muy basico y sin optimizar, que aprovecha la perdida de tiempo sufrida por los rebotes de los pushbutton, es basicamente un chekeo de que boton fue oprimido, y bajo esta condicion, es determinado el numero de parpadeo del led conectado en porta.1(si se oprime el boton conectado en el pin B5, parpadea 5 veces, si se oprime el boton en el pin B6, parpadea 6 veces... etc)
 
#include <16F84A.h>
#fuses XT,NOWDT
#use delay( clock = 4000000 ) /* reloj de 4 MHz */
#byte puerto_b = 6 /* dirección del puerto B */
#byte puerto_a = 5 /* dirección del puerto A */
#use fast_io(A)
#use fast_io(B)

PARPADEO(UNSIGNED INT C){
FOR(;C!=0;C--){delay_ms(200);
bit_set(puerto_a,1);   /*a0=1*/
delay_ms(200);
bit_clear(puerto_a,1);  /*a0=0*!*/
}}

 main()
{puerto_b = 0;set_tris_b( 0b11111111 ); /*Todas entradas!!*/
puerto_a = 0;set_tris_a( 0b11111000 );  /*a0-a2 salidas*/
enable_interrupts(int_RB);
enable_interrupts(GLOBAL);
while (1){delay_ms(1000);
bit_set(puerto_a,0);   /*a0=1*/
delay_ms(1000);
bit_clear(puerto_a,0);  /*a0=0*!*/
}}

#int_RB
RB4_RB7_ISR(){
PUERTO_B=PUERTO_B;
 IF(PUERTO_B==16)PARPADEO(4);
  IF(PUERTO_B==32)PARPADEO(5);
   IF(PUERTO_B==64)PARPADEO(6);
    IF(PUERTO_B==128)PARPADEO(7);}


S2lu2 pana
Título: RE: Ayuda con iterupciones rb4-rb7
Publicado por: eduardoy2kk en 13 de Febrero de 2005, 12:04:00
Ok gracias mi amigo, muy ejemplar tu informacion ya lo depure y le agrge las cositas que le faltaba y logre entenderlo como funcionaba , gracias a eso empese a trabajar para que me lea que bit cambio en las entradas del puerto , asi puedo tomar funciones enpecificas de las entradas sin importar que se activen otros bit del puerto que realizan funciones secundarias, no se si se entendio pero me es un tanto dificil esplicar lo que estoy tratando de probar aunque para ustedes parescan pruebas tontas es la manera mas facil para comprender el funcionamiento.
Gracias nuevamente por la ayuda
                                                       Eduardo