Solo preguntaria si el bit es uno. Para mi es otro problema el que tenes. Castearlo a int te lo transforma a 0000 0001
El cual nuevamente comparas y sigue siendo lo mismo.. no vale la pena tampoco, incluso podes ver el ASM generado y ver la diferencia.
Título: Re:porque añardir int a una lectura de pin
Publicado por: alfredo1972 en 11 de Octubre de 2015, 17:08:46
Pues eso digo yo, pero hasta que no lo he puesto, no se leía bien el pin Por eso mi pregunta
Título: Re:porque añardir int a una lectura de pin
Publicado por: KILLERJC en 11 de Octubre de 2015, 17:17:37
Si queres la solucion lo unico que queda es que pases el ASM generado para ambos codigos, esa partecita nomas. ahi vamos a ver que es lo que hace, si es un error del compilador o no. Pero no veo el por que no deberia funcionar.
Título: Re:porque añardir int a una lectura de pin
Publicado por: juaperser1 en 11 de Octubre de 2015, 18:47:12
No sera, que lo has configurado como entrada y luego has configurado algun periferico, o has vuelto a tocas la configuración de los pines o alguna librería.
las librerías pueden cambiar muchas cosas que no sabemos, sobre todo si no la hemos hecho nosotros.
un saludo
Título: Re:porque añardir int a una lectura de pin
Publicado por: KILLERJC en 11 de Octubre de 2015, 19:07:37
Acabo de correr una simulacion en XC8, para comprobar esto.
Codigo a prueba:
Código: C++
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:
Código: ASM
; 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
Código: C++
#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:
Código: ASM
; 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
Título: Re:porque añardir int a una lectura de pin
Publicado por: juaperser1 en 11 de Octubre de 2015, 19:15:54