Autor Tema: #INT_EXT  (Leído 6154 veces)

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

Desconectado nach

  • PIC10
  • *
  • Mensajes: 24
#INT_EXT
« en: 09 de Noviembre de 2007, 07:37:22 »
Hola

Trabajo con el 16HV616, CCS y ICD2. Estoy intentado trabajar con e¡su interrupcion externa y hay una cosa que no entiendo.
Cuando escribes...

#INT_EXT
Rb_isr() => aqui veo multitud de opciones...pero que significa esto??...que opciones existen??

pretendo que cuando se ejecute la interrupcion, ponga a cero una salida y me cambie el estado de una variable global. Y esto no lo consigo, me pone a cero la salida pero no me cambia el estado de la variable global. Dependo de eso??

GRacias

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: #INT_EXT
« Respuesta #1 en: 09 de Noviembre de 2007, 09:42:47 »
Mas programa, es la guerra ...  ja, ja, ja  :D :D :D


Quiero decir que pongas el trozo de tú código que ejecutas dentro de la interrupción, y dónde declaras la variables global. :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado nach

  • PIC10
  • *
  • Mensajes: 24
Re: #INT_EXT
« Respuesta #2 en: 09 de Noviembre de 2007, 09:51:46 »
ahi va...
Código: [Seleccionar]
#include <16HV616.h>

#FUSES IOSC4, NOWDT, INTRC, NOMCLR, NOBROWNOUT, PUT
#use delay(internal=4000000)
//IOSC4
#use fast_io(A)
 
int direccion=0;


#byte PORTA = 0x05
#bit  A0   = 0x05.0//output para abrir
#bit  A1   = 0x05.1//output para cerrar
#bit  A2   = 0x05.2
#bit  A3   = 0x05.3//input para lectura del selector pin0
#bit  A4   = 0x05.4//input para lectura del selector pin1
#bit  A5   = 0x05.5

#INT_EXT
void extinterrupt()
{
     int x;
     x = input(PIN_A2);

     if (x==0){

output_bit(PIN_A0,0);
delay_ms(1000);
        direccion=1;
      }

}



void main ()
{

set_tris_A( 0b111100 );

enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);

switch (direccion){

case 0:
output_high(PIN_A0);
output_low(PIN_A1);
break;

case 1:
output_low(PIN_A0);
output_high(PIN_A1);
break;
}

}

el problema es que cuando la int se ejecuta no me cambia a 1 la varible direccion...y no se ejecuta la sengunda parte del main.

pretendo que:
-se ejecute el case 0 hasta que aparezca la int y luego el case 1.


Desconectado Gorgonas

  • PIC12
  • **
  • Mensajes: 81
Re: #INT_EXT
« Respuesta #3 en: 09 de Noviembre de 2007, 11:24:39 »
El problema no esque la variable no cambie de valor, esque el codigo al llegar al final vuelve a empezar y pone la variable a cero. Lo tienes que mantener con un bucle. algo asi.

Código: [Seleccionar]
#include <16HV616.h>

#FUSES IOSC4, NOWDT, INTRC, NOMCLR, NOBROWNOUT, PUT
#use delay(internal=4000000)
//IOSC4
#use fast_io(A)
 
int direccion=0;


#byte PORTA = 0x05
#bit  A0   = 0x05.0//output para abrir
#bit  A1   = 0x05.1//output para cerrar
#bit  A2   = 0x05.2
#bit  A3   = 0x05.3//input para lectura del selector pin0
#bit  A4   = 0x05.4//input para lectura del selector pin1
#bit  A5   = 0x05.5

#INT_EXT
void extinterrupt()
{
     int x;
     x = input(PIN_A2);

     if (x==0){

output_bit(PIN_A0,0);
delay_ms(1000);
        direccion=1;
      }

}



void main ()
{

set_tris_A( 0b111100 );

enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);

while(1) //Bucle para ejecutar todo el rato el case, sale en la interrupcion.
{
switch (direccion){

case 0:
output_high(PIN_A0);
output_low(PIN_A1);
break;

case 1:
output_low(PIN_A0);
output_high(PIN_A1);
break;
}
}

}

Desconectado valdorre

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 348
Re: #INT_EXT
« Respuesta #4 en: 09 de Noviembre de 2007, 15:58:56 »
hola gorgonas, yo pondria:
...

#INT_EXT
void extinterrupt()
{
if (!bit_test(PIN_A2)) {
   output_bit( PIN_A2, 0);
   Ddelay_ms(1000);
   direccion=1;   
 }
 }

no lo probe...

saludos
Osvaldo

Desconectado nach

  • PIC10
  • *
  • Mensajes: 24
Re: #INT_EXT
« Respuesta #5 en: 10 de Noviembre de 2007, 11:27:14 »
ok...gracias a los tres,

creo que ya probe lo de hacer un bucle infinito con el while y creo recordar que  me dio el mismo resultado..no me entró en case 1... osea que no me toma lo de direccion=1....pero lo volveré a probar otra vez..

el lunes os cuento...
muxas gracias...
« Última modificación: 10 de Noviembre de 2007, 11:58:23 por nach »

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: #INT_EXT
« Respuesta #6 en: 10 de Noviembre de 2007, 15:42:48 »
Acuerdate también de resetear la variable "direccion", ya que cuando tome valor "1", según tu código, nunca más cambiará de valor.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado nach

  • PIC10
  • *
  • Mensajes: 24
Re: #INT_EXT
« Respuesta #7 en: 12 de Noviembre de 2007, 05:13:31 »
grazzie una vez mas..ya furrula.

Le faltaba el bucle cerrado con el  while (true){}

Ok  :-)


 

anything