practico 7 ej 8

practico 7 ej 8

de Bruno Stefano Lombardo Palleiro -
Número de respuestas: 3

Buenas, hice está solución pero me quedo alguna duda.

La variable transmisión la hice de tipo entero para poder multiplicar,sumar e igualar a 0. Pero en el video de la resolución de los ejercicios de este practico, se menciona que hay que usar una cantidad de bits acorde al tamaño de lo que se quiere transmitir, por lo tanto, en este caso sería mejor un char.

Pero si usara char, podría hacer todas las operaciones? el compilador lo acepta?

Después asumí que si me pasan mas de 8 pulsos antes de una marca, al pasar mi transmisión al puerto SALIDA, automáticamente se guardan los 8 bits menos significativos. Aquí si usara un char en la variable transmisión se vería más fácil creo, ya que como sólo  tengo 8 bits, si me van llegando más, como desplazo hacia la izquierda, se van eliminando los más significativos.

Saludos!



En respuesta a Bruno Stefano Lombardo Palleiro

Re: practico 7 ej 8

de Gustavo Brown -
Bruno,
El tipo de dato char en C es considerado un tipo numérico (se pueden hacer todas las operaciones aritmético/lógicas con el). Recordá la tabla ASCII para caracteres donde se ve que cada caracter tiene asociado un valor numérico. 
Mirando tu solución, tal vez podrías usar unsigned char  o mejor aún utilizar << para desplazar los bits 1 lugar a la izquierda y | para agregar el siguiente bit.
Por otro lado en vez hacer la comparación de tics por == (30 y 50 en tu solución),  es más conveniente definir rangos, por ejemplo <30 es "marca", 30 <= ancho < 50 es "0" y > 50 es "1"

Saludos,
  Gustavo

En respuesta a Gustavo Brown

Re: practico 7 ej 8

de Bruno Stefano Lombardo Palleiro -
Hola, muchas gracias por responder!
Para el desplazamiento sería "transmisión=transmisión<<1" o no se iguala a nada?
Además para el caso en el que sumo 1, agrego un or con Ox01 no? Uso que transmisión es char.
saludos
En respuesta a Bruno Stefano Lombardo Palleiro

Re: practico 7 ej 8

de Gustavo Brown -
Tenes que asignarlo a la variable para que la misma se actualice. O sea "transmision = transmision << 1"
Para el caso en que estabas sumando 1, yo lo que proponia era "meter" un 1 mediante un OR bit a bit en vez de la suma, así te queda todo con operaciones lógicas en vez de aritméticas. O sea, pondrías "transmision = (transmision << 1) | 1" para correr a la izquierda un lugar el byte y ademas ponerle un 1 al bit menos significativo.

Saludos,
Gustavo