cordial saludo, tan amables si pueden ayudarme.
tengo el puerto b y requiero leer los 5 bits menos significativos 0-4, el bit 5 no lo uso y el 6 y 7 para la comunicación tx rx.
en el momento hago algo como esto:
if ((!input_state(stop))&&(input_state(izq))&&(input_state(der))&&(input_state(medias)))
el detalle es que lleva como 12 estructuras de estas.
hay alguna forma de leer estos 5 primeros bits sin afectar los demás y pasarlos a una variable?
gracias de antemano
struct {int8 data:5 ;} port ;
#byte port = getenv("SFR:PORTB") switch(port.data) { // solo usa los 5 primeros bits
case 0b1000 :
..........
..........
break ;
case 0b1010 :
..........
..........
break ;
case 0b1011 :
..........
..........
break ;
...............
Lo que suele hacerse es enmascarar al puerto con una constante, por ejemplo sería sí:Código: C
miVariable = PORTX & 0x3F; // 0x3F es 00111111 en binario, y al realizar un and lógico con el puerto elimino el bit 6 y 7 de PORTX
Publicado por: Eduardo2Muchas gracias a ambos voy a implementarlo y pasarlo a mis notas para consultar.
« en: Hoy a las 16:04:29 »Insertar Cita
Otra manera: Definiendo una estructura.
Código: [Seleccionar]
struct {int8 data:5 ;} port ;
#byte port = getenv("SFR:PORTB")
Y si se trata de comparar diferentes estados:
Código: [Seleccionar]
switch(port.data) { // solo usa los 5 primeros bits
case 0b1000 :
..........
..........
break ;
case 0b1010 :
..........
..........
break ;
case 0b1011 :
..........
..........
break ;
...............
Hola, debes usar una máscara aplicando AND entre el puerto y una constante 0x1F.
En el comentario del compañero, manifiesta que el bit 5 no lo usa y el 6 y 7 para comunicación.Hola, debes usar una máscara aplicando AND entre el puerto y una constante 0x1F.
Con 0x1F eliminarías el bit 7, 6 y 5. Y el OP sólo desea eliminar al 7 y el 6.
En el comentario del compañero, manifiesta que el bit 5 no lo usa y el 6 y 7 para comunicación.Hola, debes usar una máscara aplicando AND entre el puerto y una constante 0x1F.
Con 0x1F eliminarías el bit 7, 6 y 5. Y el OP sólo desea eliminar al 7 y el 6.
también puedes comparar, primero lees el puerto y si es mayor a 0x1f lo descartas si es menor o igual pues sigues con tu programa.
DominusDRR como dices posiblemente siempre puede estar marcando por así decirlo ese error pero ya con esa premisa podemos ajustar a 0xdf si esta igual o por debajo seguiría el programa
Publicado por: DominusDRR
Lo que suele hacerse es enmascarar al puerto con una constante, por ejemplo sería sí:
miVariable = PORTX & 0x3F; // 0x3F es 00111111 en binario, y al realizar un and lógico con el puerto elimino el bit 6 y 7 de PORTX
Publicado por: Eduardo2
« en: 20 de Agosto de 2022, 16:04:29 »Insertar Cita
Otra manera: Definiendo una estructura.
Código: [Seleccionar]
struct {int8 data:5 ;} port ;
#byte port = getenv("SFR:PORTB")
Y si se trata de comparar diferentes estados:
Código: [Seleccionar]
switch(port.data) { // solo usa los 5 primeros bits
case 0b1000 :
..........
..........
break ;
case 0b1010 :
..........
..........
break ;
case 0b1011 :
..........
..........
break ;
...............
Publicado por: Robert76
« en: 20 de Agosto de 2022, 22:24:35 »Insertar Cita
Hola, debes usar una máscara aplicando AND entre el puerto y una constante 0x1F.