Hola, estoy programando un PIC16F876 para que al detectar una interrupcion y conicida con un caracter determinado haga una cosa diferente con cada uno. El caso es que no consigo hacerlo funcionar, este es el código:
#include <CfgEntradaSalida.h>// No borrar
//DECLARACION DE CONSTANTES
//DECLARACIÓN DE VARIABLES
int actual1,anterior1,actual2,anterior2;
//INTERRUPCIÓn que se ejecutará al recibir un dato (caracter) por el puerto serie
//podemos utilizar como salidas las que nos quedan en O3 y O4, nos basta con dos para cambiar el color
//del diodo LED, YA CONECTAÍS VOSOTROS COMO MEJOR LO VEAÍS. En el caso que os pongo como ejemplo
// supongo que el ánodo del diodo led lo llevaís a la salida del pic directa y el cátodo a través de
// una Resistencia. No olvidar configurar en el panel los pines IO3 y IO4 como salidas (S), antes de compilar
// el programa.
#INT_RDA
void detect_dato_recibido()
{
char caracter;
caracter=getc();
switch (caracter)
{
case 'r': prinf("rojo");
break;
case 'v': printf("verde");
break;
case 'n': printf("naranja");
break;
case 'a': printf("apagar");
break;
}
}
main()
{
ConfiguraIOA(); //NO BORRAR
ConfiguraIO(); //NO BORRAR
enable_interrupts(INT_RDA);// habilitamos las interrupciones del puerto serie, recepción
enable_interrupts(global);// habilitamos de forma global todas las inte. Este es el mecanismo general para
// utilizar las interrupciones.
}
}
Por otro lado he cambiado el código, utilizando la funcion "kbhit", que detecta entradas por tecladoy esta todo el rato pintando eso "probando", me explico, le cambio el código para que pinte "probando" cuando haya una pyulsacion de teclado y no para de pintarla todo el rato sin pulsar una tecla:
#include <CfgEntradaSalida.h>// No borrar
//DECLARACION DE CONSTANTES
//DECLARACIÓN DE VARIABLES
int actual1,anterior1,actual2,anterior2;
//INTERRUPCIÓn que se ejecutará al recibir un dato (caracter) por el puerto serie
//podemos utilizar como salidas las que nos quedan en O3 y O4, nos basta con dos para cambiar el color
//del diodo LED, YA CONECTAÍS VOSOTROS COMO MEJOR LO VEAÍS. En el caso que os pongo como ejemplo
// supongo que el ánodo del diodo led lo llevaís a la salida del pic directa y el cátodo a través de
// una Resistencia. No olvidar configurar en el panel los pines IO3 y IO4 como salidas (S), antes de compilar
// el programa.
}
main()
{
ConfiguraIOA(); //NO BORRAR
ConfiguraIO(); //NO BORRAR
if (kbhit())
{
printf("probando");
}
}
}
¿alguien sabe por qué no me funciona y por qué pasa esto?
¿alguien sabe como deberia hacerlo?
Muchisimas gracias.
#include <CfgEntradaSalida.h>// No borrar
//DECLARACION DE CONSTANTES
//DECLARACIÓN DE VARIABLES
int actual1,anterior1,actual2,anterior2;
//INTERRUPCIÓn que se ejecutará al recibir un dato (caracter) por el puerto serie
//podemos utilizar como salidas las que nos quedan en O3 y O4, nos basta con dos para cambiar el color
//del diodo LED, YA CONECTAÍS VOSOTROS COMO MEJOR LO VEAÍS. En el caso que os pongo como ejemplo
// supongo que el ánodo del diodo led lo llevaís a la salida del pic directa y el cátodo a través de
// una Resistencia. No olvidar configurar en el panel los pines IO3 y IO4 como salidas (S), antes de compilar
// el programa.
#INT_RDA
void detect_dato_recibido()
{
char caracter;
caracter=getc();
switch (caracter)
{
case 'r': prinf("rojo");
break;
case 'v': printf("verde");
break;
case 'n': printf("naranja");
break;
case 'a': printf("apagar");
break;
}
}
main()
{
ConfiguraIOA(); //NO BORRAR
ConfiguraIO(); //NO BORRAR
enable_interrupts(INT_RDA);// habilitamos las interrupciones del puerto serie, recepción
enable_interrupts(global);// habilitamos de forma global todas las inte. Este es el mecanismo general para
// utilizar las interrupciones.
}
}
Por otro lado he cambiado el código, utilizando la funcion "kbhit", que detecta entradas por tecladoy esta todo el rato pintando eso "probando", me explico, le cambio el código para que pinte "probando" cuando haya una pyulsacion de teclado y no para de pintarla todo el rato sin pulsar una tecla:
#include <CfgEntradaSalida.h>// No borrar
//DECLARACION DE CONSTANTES
//DECLARACIÓN DE VARIABLES
int actual1,anterior1,actual2,anterior2;
//INTERRUPCIÓn que se ejecutará al recibir un dato (caracter) por el puerto serie
//podemos utilizar como salidas las que nos quedan en O3 y O4, nos basta con dos para cambiar el color
//del diodo LED, YA CONECTAÍS VOSOTROS COMO MEJOR LO VEAÍS. En el caso que os pongo como ejemplo
// supongo que el ánodo del diodo led lo llevaís a la salida del pic directa y el cátodo a través de
// una Resistencia. No olvidar configurar en el panel los pines IO3 y IO4 como salidas (S), antes de compilar
// el programa.
}
main()
{
ConfiguraIOA(); //NO BORRAR
ConfiguraIO(); //NO BORRAR
if (kbhit())
{
printf("probando");
}
}
}
¿alguien sabe por qué no me funciona y por qué pasa esto?
¿alguien sabe como deberia hacerlo?
Muchisimas gracias.