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
#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);
}
}
}
}