Bueno, lo posteo sencillo. Necesito de los más expertos para solucionar esto.
#include <16F917.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES MCLR //Master Clear pin enabled
#FUSES NOCPD //No EE protection
#FUSES BROWNOUT //Reset when brownout detected
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NODEBUG //No Debug mode for ICD
#use delay(clock=20000000)
char Arriba, Abajo, Enter, Escape;
#int_RB
void RB_isr(void)
{
char auxiliar;
disable_interrupts(INT_RB);
Enter = !input (PIN_B4);
Arriba = !input (PIN_B5);
Abajo = !input (PIN_B6);
Escape = !input (PIN_B7);
auxiliar = input_b();
clear_interrupt(INT_RB);
enable_interrupts(INT_RB);
/*
#asm movf Port_B,0 #endasm*/
}
void main()
{
char c;
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_lcd(LCD_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
for (;;){}
}
Como lo hacemos andar eh eh eh?
Por algún foro leí de colocar
port_b_pullups(TRUE);
delay_us(10); // Allow time for them to pull-up to +5v
c = input_b(); // Clear mismatch condition
clear_interrupt(INT_RB);
pero esto tampoco anda.
Y para colmo, no es la primera vez que quiero utilizar esta interrupción. Sino que si ustedes intentan simular esto en un 16f874/76/77 o 18f4550 esto funciona.
Bueno, espero algún indicio.
Mil gracias gente.