#include <18f46k80.h> //PIC A UTILIZARTambien es importante mencionar, debuggueando, puedo ver el puerto PORTB en el momento que entra en las interrupciones, y RB2 no se modifica, sigue en 0 siempre.
#fuses HSH,NOWDT, NOPUT,NOPLLEN //CRISTAL
#use delay(clock=10000000) //A 20MHZ
#include <glcd.c> //INCLUIMOS GLCD.C DE PICC
#include<stdlib.h>
#include<stdio.h>
#use rs232(baud=9600,xmit=PIN_D5,rcv=PIN_B0,stream=Serie3)
#use rs232(baud=9600,xmit=PIN_D6,rcv=PIN_D7,stream=Serie2)
#USE FAST_IO (A)
#USE FAST_IO (D)
#USE FAST_IO (c)
#USE FAST_IO (b)
//----------------------------DEFINICION DE CONSTANTES-----------------
//---------------------------------DECLARACION DE VARIABLES-------------------------
int Estado=E0;
char Accion=0;
char c=0;
char texto1[20];
char cambio_estado=1;
main()
{
//-----------------------------------CONFIGURACION DE INTERRUPCIONES------------------------
DISABLE_INTERRUPTS(global);
ENABLE_INTERRUPTS(INT_EXT);
CLEAR_INTERRUPT(int_ext);
EXT_INT_EDGE(0,H_TO_L);
ENABLE_INTERRUPTS(INT_EXT1);
EXT_INT_EDGE(1,L_TO_H);
CLEAR_INTERRUPT(int_ext1);
ENABLE_INTERRUPTS(INT_EXT2);
EXT_INT_EDGE(2,L_TO_H);
CLEAR_INTERRUPT(int_ext2);
ENABLE_INTERRUPTS(INT_RB5);
ENABLE_INTERRUPTS(INT_RB4);
CLEAR_INTERRUPT(int_rb);
//-----------------------------------CONFIGURACION DE ENTREDAS/SALIDAS DIGITALES--------------------------
SET_TRIS_A( 0x00 ); //0b
SET_TRIS_D( 0x80 ); //0b10000000
SET_TRIS_C( 0x00 ); //0b
SET_TRIS_B( 0x37 ); //0b00110111
glcd_init(ON); // iniciamos la lcd
glcd_fillScreen(OFF); //LIMPIAMOS LA PANTALLA
output_high(PIN_B3);
ENABLE_INTERRUPTS(global);
sprintf(texto1 "COMENZANDO...");
glcd_text57(0,10,texto1,2, ON);
delay_ms(3000);
while(1)
{
delay_ms(500);
fprintf(Serie3,"%i ",Estado);
}
}
}
#INT_EXT
void rx3()
{
c=getch();
fprintf(Serie3,"");
CLEAR_INTERRUPT(int_ext);
}
#INT_EXT1
Bot_Atras()
{
Accion=ATRAS;
// cambio_estado=1;
Maquina_Estados();
CLEAR_INTERRUPT(int_ext1);
}
#INT_EXT2
Bot_Menu()
{
Accion=MENU;
// cambio_estado=1;
Maquina_Estados();
CLEAR_INTERRUPT(int_ext2);
}
#INT_RB
Bot_Ent_Adelante()
{
if(input(PIN_B4))
{
Accion=ENTER;
// cambio_estado=1;
Maquina_Estados();
CLEAR_INTERRUPT(int_rb);
}
if(input(PIN_B5))
{
Accion=ADELANTE;
// cambio_estado=1;
Maquina_Estados();
CLEAR_INTERRUPT(int_rb);
}
CLEAR_INTERRUPT(int_rb);
}
Tengo 4 botones en RB1 RB2 RB4 yRB4.