Problema con RB4 como entrada

Hola:
Tengo un programa similar al que pongo aquí debajo, con el cual voy a hacer unas cuantas cosas con usb e i2c. El problema es que quiero utilizar las interrupciones de cambio de estado del puerto B, por lo que configuro los pines del RB7 al RB4 como entradas y con pullups, por lo que sin conectar estos pines a nada, tendría que leer un "1". En el 5, 6 y 7 si que tengo un "1", pero el PIN B4 se queda a "0", y ya he revisado todo y no termino de comprender porque.
El problema tiene que estar al principio de la configuracion, porque al simular con el MPLAB desde el principio aparece este pin a "0". Y con el proteus ocurre lo mismo.
A ver si alguien me puede echar una mano. Gracias

Código:
#include <18F2455.h>
#device ADC=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)

#DEFINE USB_HID_DEVICE TRUE

#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT 
#define USB_EP1_TX_SIZE 8

#include <pic18_usb.h>
#include <.\include\midi_hid5.h> 
#include <usb.c> 
#include <ctype.h>

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) 
#use i2c(MASTER,SCL=PIN_B1,SDA=PIN_B0,SLOW,FORCE_HW)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)

#byte PORTB=0xF81
#byte LATB=0xF8A
#byte BTRISB=0xF93
#byte INTCON=0xFF2
#byte ADCON1=0XFC1

	int pichA,pichB,TA1,TA2,pichA2,pichB2,entra,temp,ciclos;
	int out_data[3];
	long ciclo;


void main(void) {

	setup_adc_ports(AN0);
	setup_adc(ADC_CLOCK_INTERNAL);
	set_adc_channel(0);
	set_tris_A(0b00000001);
	set_tris_B(0b11110011);
	set_tris_C(0);
	port_B_pullups(TRUE);
	output_B(0);
	LATB=PORTB;
	output_low(PIN_B3);
	output_low(PIN_B2);
	output_C(0);
	TA1=TA2=0;
	
        usb_init_cs();
	INTCON=0;
	enable_interrupts(INT_RB);
	enable_interrupts(global);
	
	setup_timer_2(T2_DIV_BY_1,129,1);
	setup_ccp1(CCP_PWM);
	
   while (TRUE) {
      usb_task();
      if (usb_enumerated())
		
      {
		set_adc_channel(0);
		delay_us(20);
		pichA2=pichA;
		pichB2=pichB;
		pichA=read_adc();
	
		delay_ms(10);

		
		i2c_start();
		i2c_write(0x0A+1);
		pichB=i2c_read(0);
		i2c_stop();
		
			
		
		ciclo=pichB*2.0392;
		set_pwm1_duty(ciclo);
		output_high(PIN_A1);
		if(bit_test(PORTB,7)&&bit_test(PORTB,6)&&bit_test(PORTB,5)&&bit_test(PORTB,4)) TA1=TA2=0;
		
		if(pichA!=pichA2||pichB!=pichB2)
		{		
      	          out_data[0]=pichA; 
			out_data[1]=pichB;
		  
			usb_put_packet(1,out_data,2,USB_DTS_TOGGLE);
		}         
      }  
		
   }
}
 
Atrás
Arriba