Acabo de correr una simulacion en XC8, para comprobar esto.
Codigo a prueba:
while(1){
if(PORTBbits.RB0) { PORTB=0x10; }
if(PORTBbits.RB0==1) { PORTB=0x10; }
if((int)PORTBbits.RB0==1) { PORTB=0x10; }
}
Codigo ASM creado de cada IF:
; if(PORTBbits.RB0) { PORTB=0x10; }
0x7EF: BTFSS PORTB, 0x0
0x7F0: GOTO 0x7F3
0x7F1: MOVLW 0x10
0x7F2: MOVWF PORTB
; if(PORTBbits.RB0==1) { PORTB=0x10; }
0x7F3: BTFSS PORTB, 0x0
0x7F4: GOTO 0x7F7
0x7F5: MOVLW 0x10
0x7F6: MOVWF PORTB
; if((int)PORTBbits.RB0==1) { PORTB=0x10; }
0x7F7: BTFSS PORTB, 0x0
0x7F8: GOTO 0x7EF
0x7F9: MOVLW 0x10
0x7FA: MOVWF PORTB
Es decir exactamente lo mismo en todos los casos. Nuevamente ese no es tu problema, tenes otro problema mas que seguro, que tal ves eso lo este tapando.
Esta ves utilize un define
#define OW PORTBbits.RB0
//..... main, config, etc
while(1){
if(OW) { PORTB=0x10; }
if(OW==1) { PORTB=0x10; }
if((int)OW==1) { PORTB=0x10; }
}
Nuevamente el codigo ASM es el mismo, exactamente igual:
; if(OW) { PORTB=0x10; }
0x7EF: BTFSS PORTB, 0x0
0x7F0: GOTO 0x7F3
0x7F1: MOVLW 0x10
0x7F2: MOVWF PORTB
; if(OW==1) { PORTB=0x10; }
0x7F3: BTFSS PORTB, 0x0
0x7F4: GOTO 0x7F7
0x7F5: MOVLW 0x10
0x7F6: MOVWF PORTB
; if((int)OW==1) { PORTB=0x10; }
0x7F7: BTFSS PORTB, 0x0
0x7F8: GOTO 0x7EF
0x7F9: MOVLW 0x10
0x7FA: MOVWF PORTB
Definitivamente algo mal tenes, o le estas echando la culpa a eso cuando es otra cosa.
Y siendo que el codigo NO cambia para nada, directamente no le hiciste nada a tu codigo y funciona igual