....
El codigo que he desarrolado es el siguiente:
En el cual creo una variable "salida" en el que guardo el resultado que saco por RB4, la salida.
No veo el problema pero no me funciona correctamente.
Please a ver si me echais una manita que ya no se que probar mas....
...
Por Karnaugh tambien podes obtener que el resultado de tu tabla y que puede representarse como:
(RB4 AND RB3) OR NOT RB2
Como no hay un operador para setear un bit segun el valor de una variable en CCS, tuve que usar un if o un operador ternario que es lo mismo.....
#bit B4 = 0x06.4
#bit A3 = 0x05.3
#bit A2 = 0x05.2
.......................................
.......................................
while (true)
{
B4 = B4&&A3 || !A2 ;
}
Ese operador AND de manejo de bits que has calzado en cada IF es probable que no funcione como piensas. De hecho en el ejemplo, que anda por internet, y que has usado de partida para tu código, solo se emplea para setear la salida de varios puertos a nivel de bit, no para dar valores a una variable.
No se que necesidad hay de encadenar instrucciones con & dentro de los IF. Una cosa es interrogar el estado de varios puertos, y una variable, con un AND lógico &&, y otra el uso del AND como un operador de manejo de bits.
Prueba así.Código: C++
if((bit_test(porta,2)==0)&&(bit_test(porta,3)==0)&&(salida==0)) { bit_set(portb,4); salida=1; }
Por Karnaugh tambien podes obtener que el resultado de tu tabla y que puede representarse como:
(RB4 AND RB3) OR NOT RB2
Como no hay un operador para setear un bit segun el valor de una variable en CCS, tuve que usar un if o un operador ternario que es lo mismo.. Por las dudas pongo los 2 ya que no se como lo toma el compilador o cual te resulta mas simple. Ya tenes varias opciones de lo mismo :PCódigo: C
while (true) { salida = (((bit_test(porta,4) && bit_test(porta,3)) || !bit_test(porta,2)) salida ? bit_set(porta,4) : bit_set(porta,4); }Código: C
while (true) { salida = (((bit_test(porta,4) && bit_test(porta,3)) || !bit_test(porta,2)) if(salida){ bit_set(porta,4); }else { bit_set(porta,4); } }
Por Karnaugh tambien podes obtener que el resultado de tu tabla y que puede representarse como:
(RB4 AND RB3) OR NOT RB2
Como no hay un operador para setear un bit segun el valor de una variable en CCS, tuve que usar un if o un operador ternario que es lo mismo.....
Se puede declarar los bits de las variables y queda bonito (para qué quiero la variable salida teniendo B4)Código: [Seleccionar]#bit B4 = 0x06.4
#bit A3 = 0x05.3
#bit A2 = 0x05.2
.......................................
.......................................
while (true)
{
B4 = B4&&A3 || !A2 ;
}
.... pero me queda la duda el porque las soluciones propuestas anteriores no funcionan.
.... pero me queda la duda el porque las soluciones propuestas anteriores no funcionan.
Al menos tu código original no funcionaba porque son 8 casos y comparás 7.
El caso que te falta es justamente el que estando RB4 en 1 lo manda a 0 (A2=1 , A3 = 0 el sexto caso de tu tabla)