Sei sulla pagina 1di 5

Control por PC

Bits & Bytes

El bit es la menor unidad de informacin posible. Un bit solo puede presentar dos estados lgicos definidos 0 y 1. Se suele decir que un bit esta en alto, esa seteado cuando esta en 1 y que esta en bajo o reset cuando esta en 0. Tambin se denomina bajo nombre de mordisquito al bit. Un nibble es una secuencia formada por cuatro bits. Estos cuatro bits pueden ser combinados cambiando su estado y logramos as distinguir 16 estados o smbolos posibles. Tenemos, as las 16 posibles combinaciones diferentes que se pueden lograr con 4 bits. Segn el estndar TTL de tecnologa electrnica 5V de tensin continua representan un bit en alto (1) en tanto 0V, masa o la ausencia de tensin representa un bit en bajo (0). Un byte es una combinacin de 8 bits. De esta forma se extiende la cantidad de combinaciones posibles de las tan solo 2 que permite un nico bit o las apenas 16 que permite el nibble a 256. Hay una forma muy rpida de calcular la cantidad de combinaciones posibles dependiendo de la cantidad de bits y es elevar el nmero 2 a una potencia determinada por la cantidad de bits disponibles. Esto quiere decir que si tenemos tan solo un bit la ecuacin es 2 elevado a la primera potencia; lo que da como resultado 2. Si tenemos cuatro bits la frmula es: 2 elevado a la cuarta potencia, lo que equivale a 16. Si tenemos 8 bits la cuenta es 2 elevado a la octava, dando 256 y, si tenemos 16 bits la cuenta es 2 elevado a la decimosexta siendo en total 65536. Combinaciones = El puerto serie (COM) manejan 8 bits de informacin (o un byte). Esto quiere decir que para controlar cosas conectadas a ellos tendremos que manejarnos con valores que oscilen entre el 0 y el 255. Los bits estn numerados de 0 a 7 siendo el bit cero el de menor peso o valor (L.S.B) y el bit siete el de mayor peso o valor (M.S.B). Cuando se escribe un byte se hace comenzando de izquierda a derecha desde el bit de mayor peso (7) hasta el de menor peso (0), el cual queda a la derecha.

Este esquema, adems, muestra de que forma se logra convertir un valor binario de ocho bits a su equivalente decimal. La forma es ms que simple: sumar los pesos de aquellos bits que estn en 1. Por ejemplo: si tuvisemos el valor binario 00000000 no habra que sumar ningn peso (porque todos los bits estn en cero) quedando as el resultado final en cero. Pero si tuviramos el valor binario 00001111 tendramos que sumar los valores (1, 2, 4 y 8) quedando como resultado el nmero decimal 15. Si tenemos por ende todos los bits en alto (11111111) tendramos que sumar todos los valores y esto da el valor decimal 255. Visual C# 2010 no dispone de funciones para establecer en 1 o en 0 determinado bit de un byte o para verificar el estado de un bit especfico dentro de ese octeto. Pero a continuacin veremos dos mtodos para poder discernir el estado de cada uno de los bits de una variable determinada.

Control por PC
Mtodo por restas sucesivas

Bits & Bytes

Como primera medida es necesario reconocer el tamao de la variable previamente definida por programa. Luego mediante un condicional, se preguntara por la variable si es mayor que - 1. De ser verdadero debemos setear una variable en alto, de no serlo en cero. n : representa el tamao de variable. Repaso de codificacin en el entorno de programacin de Visual C# Para declarar vectores tenemos dos posibles formas A) Cuando el vector no es inicializado, aunque por defecto el entorno limpia la variable: Tipo de dato [ ] nombre=new tipo de dato [tamao]; Ejemplo: int[] bit = new int[8]; // Este vector est formado por 8 elementos enteros. B) La otra forma sera inicializando el vector con valores diferentes de cero. El tamao es definido por la cantidad de elementos que hay encerrados entre las llaves. tipo de dato[ ] nombre=new tipo de dato[ ] {0,1,1,1,1,1,1,1,1}; Ejemplo: int[] bit = new int[] { 1, 0, 0, 0, 0, 0, 0, 1 };
Asignacin de una posicin del vector a una variable dato = bit[0]; // la primer posicin del vector se transfiere a la variable.

Cdigo Restas sucesivas int dato = 255; // dato para prueba int[] bit = new int[8]; //declaracion vector private void button1_Click(object sender, EventArgs e) { textBox8.Text = Convert.ToString(bit[7]); textBox7.Text = Convert.ToString(bit[6]); textBox6.Text = Convert.ToString(bit[5]); textBox5.Text = Convert.ToString(bit[4]); textBox4.Text = Convert.ToString(bit[3]); textBox3.Text = Convert.ToString(bit[2]); textBox2.Text = Convert.ToString(bit[1]); textBox1.Text = Convert.ToString(bit[0]); if (dato > 127) { bit[7] = 1; dato = dato - 128; textBox8.Text = Convert.ToString(bit[7]); } else bit[7] = 0; if (dato > 63) { bit[6] = 1; dato = dato - 64; textBox7.Text = Convert.ToString(bit[6]); } else bit[6] = 0; if (dato > 31) { bit[5] = 1; dato = dato - 32; textBox6.Text = Convert.ToString(bit[5]); } else bit[5] = 0; if (dato > 15)

Control por PC
{ bit[4] = 1; dato = dato - 16; textBox5.Text = Convert.ToString(bit[4]); } else bit[4] = 0; if (dato > 7) { bit[3] = 1; dato = dato textBox4.Text } else bit[3] = 0; if (dato > 3) { bit[2] = 1; dato = dato textBox3.Text } else bit[2] = 0; if (dato > 1) { bit[1] = 1; dato = dato textBox2.Text } else bit[1] = 0; if (dato > 0) { bit[0] = 1; dato = dato textBox1.Text } else bit[0] = 0; }

Bits & Bytes

8; = Convert.ToString(bit[3]);

4; = Convert.ToString(bit[2]);

2; = Convert.ToString(bit[1]);

1; = Convert.ToString(bit[0]);

Analicemos un poco como funciona este cdigo: Se crea un vector denominado bit el cual tiene un rango de 0 a 7. Cada uno de esos datos en el vector almacena el estado de cada bit del byte. Los If, determinan por el mtodo de restas sucesivas es estado de cada uno de los bits que forman el byte.

Mtodo con mascaras Este segundo mtodo es mucho ms compacto que el anterior, consta en hacer AND a nivel de bits, es decir se hace tantas multiplicaciones lgicas como bits tengamos que averiguar.

Control por PC

Bits & Bytes

Se realiza una operacin AND entre el registro y cada uno de los pesos y dichos resultados sern divididos por el mismo peso. Cdigo en visual C#
int dato=255,dato1; private void button1_Click(object sender, EventArgs e) { dato1 = Convert.ToInt16(dato & 1); textBox1.Text = Convert.ToString(dato1); dato1 = Convert.ToInt16(dato & 2); dato1 = dato1 / 2; textBox2.Text = Convert.ToString(dato1); dato1 = Convert.ToInt16(dato & 4); dato1 = dato1 / 4; textBox3.Text = Convert.ToString(dato1); dato1 = Convert.ToInt16(dato & 8); dato1 = dato1 / 8; textBox4.Text = Convert.ToString(dato1); dato1 = Convert.ToInt16(dato & 16); dato1 = dato1 / 16; textBox5.Text = Convert.ToString(dato1); dato1 = Convert.ToInt16(dato & 32); dato1 = dato1 / 32; textBox6.Text = Convert.ToString(dato1); dato1 = Convert.ToInt16(dato & 64); dato1 = dato1 / 64; textBox7.Text = Convert.ToString(dato1); dato1 = Convert.ToInt16(dato & 128); dato1 = dato1 / 128; textBox8.Text = Convert.ToString(dato1); }

Control por PC
int DATO = 128; int DATO1 = 128; int BIT; Int16 I; int[] bit = new int[8]; private void button1_Click(object sender, EventArgs e) {

Bits & Bytes

if (DATO > 127) { DATO = DATO - 128; bit[7] = 1; } if (DATO > 63) { DATO = DATO - 64; bit[6] = 1; } if (DATO > 31) { DATO = DATO - 32; bit[5] = 1; } if (DATO > 15) { DATO = DATO - 16; bit[4] = 1; } if (DATO > 7) { DATO = DATO - 8; bit[3] = 1; } if (DATO > 3) { DATO = DATO - 4; bit[2] = 1; } if (DATO > 1) { DATO = DATO - 2; bit[1] = 1; } if (DATO > 0) { DATO = DATO - 1; bit[0] = 1; } for (I = 0; I < 8; I++) { if (Convert.ToInt16(textBox1.Text) == I) { if (bit[I] == 0) DATO1 =DATO1 + Convert.ToInt16 (Math.Pow(2,I)); } } textBox2.Text = Convert.ToString(DATO1); }

Potrebbero piacerti anche