1 Capítulo 3 Codificación binaria 3.1. Codificación En un ambiente de sistemas digitales se denomina codificación a la asignación de un significado a una configuración de bits. Al modelar problemas es usual encontrar variables que pueden tomar múltiples valores, se denomina codificación al proceso de convertir esas variables en señales binarias. La elección adecuada del código puede conducir a redes lógicas más simples. Consideremos, por ejemplo, el estado de un semáforo: éste puede tomar uno de tres valores: verde, amarillo o rojo. Una posible codificación es considerar cada color como una señal binaria; así si la variable color toma valor rojo, estará en nivel alto la señal rojo y el resto de las señales (la verde y amarilla) serán ceros. Otra posibilidad es emplear dos bits para representar las tres situaciones que son posibles; ya que con dos bits pueden simbolizarse, en binario, cuatro casos. Existen gran cantidad de códigos posibles, ya que el nombre binario para el primer color puede elegirse de 4 maneras diferentes; el código binario para el segundo color puede ser elegido de tres maneras diferentes, y el tercer color puede ser elegido de dos modos diferentes. Existen 24 formas de representar la variable multivaluada color mediante un vector binario. A continuación se mostrarán ejemplos de tres clases de códigos: numéricos, alfanuméricos y de despliegue. 3.2. Códigos numéricos Los más empleados son aquellos usados para representar números decimales. El código representa los dígitos decimales por una secuencia de símbolos binarios. 3.2.1. Códigos ponderados Se denomina código ponderado a uno en el que a cada posición de la secuencia binaria se le asigna un peso o ponderación. Profesor Leopoldo Silva Bijit 19-01-2010 2 Sistemas Digitales Ejemplo 3.1. Código BCD El código ponderado más empleado es el BCD, que representa a los dígitos decimales por secuencias de bits en sistema binario. BCD es un acrónimo de Binary Coded Decimal es decir, decimal codificado en binario. Decimal 0 1 2 3 4 5 6 7 8 9 BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 Figura 3.1 Código BCD. La tabla es el código. Cada secuencia de 4 bits es una palabra del código. Nótese que a cada dígito decimal se le asocia una secuencia de 4 bits. La posición de más a la izquierda, o más significativa, tiene peso 8. El bit menos significativo, el de más a la derecha, tiene ponderación 1. Las ponderaciones son potencias de 2. Así, la palabra 7, puede interpretarse según: 0*8 + 1*4 + 1*2 + 1*1 = 7 Para representar el número decimal 12 se requieren 8 bits, o dos palabras de código. 12 = 0001 0010 Ejemplo 3.2. Transmisión de símbolos BCD. A través de un par de cables, puede enviarse una secuencia de cifras decimales codificadas en binario. Si enviamos primero las unidades, luego las decenas y después las centenas; y si se envía primero el bit menos significativo, se tendrá que la siguiente forma de onda representa el número 923: Profesor Leopoldo Silva Bijit 19-01-2010 Capítulo 3. Codificación binaria 1 1 3 0 0 0 1 0 0 1 0 0 1 t 3 2 9 Figura 3.2 Transmisión serie de un símbolo BCD. La situación anterior ilustra una transmisión serie. La duración temporal de los bits y la forma de iniciar y terminar la comunicación debe ser acordada entre el transmisor y receptor, esta modalidad se denomina comunicación asincrónica. Si además se transmite una señal de reloj, se tendrá una comunicación serial sincrónica. Si se dispone de cuatro líneas, más una referencia, se puede enviar una cifra decimal en paralelo. Si enviamos primero la cifra más significativa, y si identificamos los cables del bus por su ponderación, la Figura 3.3. muestra la transmisión paralela del número 329. Las líneas se han identificado de acuerdo al peso. b b b b b 8 t 4 t 2 t 8 b 4 2 1 b b t 1 3 2 9 Figura 3.3 Transmisión paralela símbolo BCD. 3.2.2. Distancia Se define la distancia entre dos palabras de un código, como el número de dígitos que se deben cambiar a una palabra para obtener la otra. Por ejemplo: Hay distancia 1 entre 0100 y 0110. Hay distancia 4 entre 0011 y 1100. Profesor Leopoldo Silva Bijit 19-01-2010 4 Sistemas Digitales La distancia del código es la mínima distancia entre dos palabras consecutivas cualesquiera del código. En ciertas aplicaciones son útiles los códigos de distancia unitaria. Uno de los más empleados es el código Gray, que es un sistema de codificación que ordena un conjunto de 2n números binarios, de tal modo que sólo uno de los n bits cambia de una palabra a la siguiente. Por ejemplo, para palabras de largo igual a 3 bits, se pueden representar 8 números decimales según: Decimal 0 1 2 3 4 5 6 7 Gray 000 001 011 010 110 111 101 100 Figura 3.4 Código Gray para palabras de largo tres. Nótese que entre números decimales consecutivos la distancia entre las palabras codificadas es 1. 3.2.3. Código reflejado. Cuando en una lista ordenada ascendente, según el código, la mitad superior es simétrica con la inferior, exceptuando el bit de mayor orden, se dice que el código es reflejado. Ejemplo: Código Gray con largo de palabra de dos bits: 00 01 -11 10 Nótese que lo anterior permite construir tablas de código Gray con largos de palabra mayores. Para obtener el código para largo tres, se duplica el código de largo dos, mediante un reflejo; a la mitad superior se la antecede con un 0 y a la inferior con un 1, ver Figura 3.4. En la Figura 3.5. se muestran los diseños de redes combinacionales, para generar código Gray a partir de una secuencia binaria de cuatro bits y viceversa. Profesor Leopoldo Silva Bijit 19-01-2010 Capítulo 3. Codificación binaria B3 G3 B2 G2 5 B3 G3 B1 G1 B2 G2 B1 G1 B0 G0 B0 G0 Figura 3.5 Conversores de código Gray a binario. 3.2.4. Código cíclico En éstos, las palabras consecutivas tienen la misma distancia, y esta distancia existe también entre la primera y la última palabra del código. En este sentido, la lista puede considerarse cerrada. 3.2.5. Paridad En aplicaciones digitales de movimiento de información, es importante detectar cualquier tipo de error en la información recibida. Cuando la probabilidad de error no es muy alta, ha probado ser efectivo un sistema denominado Chequeo de paridad. Esta técnica emplea un bit extra, llamado de paridad, cuyo valor se selecciona de tal forma de dejar un número par de unos en la palabra de código, entonces se dice que el código es de paridad par. Si el bit se escoge tal que el número de unos en la palabra sea impar, se tiene un sistema de paridad impar. Ejemplo 3.3. Generador y detector de paridad. Generador y detector de paridad. Se envían 4 bits en paralelo más uno de paridad par. La Figura 3.6 muestra la generación del bit de paridad, mediante: p b8 b4 b2 b1 En el extremo receptor se calcula la señal detectora de paridad, mediante: dp b8 b4 b2 b1 p Las ecuaciones que realizan el diseño se obtienen planteando la tabla de verdad y luego empleando compuertas or exclusivo para la implementación. Profesor Leopoldo Silva Bijit 19-01-2010 6 Sistemas Digitales Rx Tx p dp Figura 3.6 Generador y detector de paridad. En la Figura 3.6 se muestra, entre líneas punteadas, el medio de transmisión; que separa al transmisor del receptor. Analizar el circuito, determinando valores de p y dp, en caso de producirse errores, en una de las cinco señales que se transmiten. Ejemplo 3.5. a) Sea una palabra de largo 3: 010 Entonces con un bit de paridad par, se representa: 1010. Donde el bit de paridad ocupa la posición más significativa. En este caso: p b4 b2 b1 0 1 0 1 b) Puede verse que un error se detecta simplemente, en un código con paridad, debido al cambio de tipo de paridad. Si la palabra correcta, con paridad par es 1010, se tiene que si se recibe: i) 1110 (paridad impar). Llegó errado bit 2. ii) 1000 (paridad impar). Llegó errado bit 3. iii) 0010 (paridad impar). Llegó errado bit 1, el de paridad iv) 1011 (paridad impar). Llegó errado bit 4. El bit de paridad sólo permite detectar el error, no corregirlo. Un error en dos bits no puede ser detectado. Este sistema no permite corregir el error, sólo detectarlo. c) Se tiene el siguiente código octal con paridad impar: Profesor Leopoldo Silva Bijit 19-01-2010 Capítulo 3. Codificación binaria Decimal 0 1 2 3 4 5 6 7 7 Octal con paridad impar 1000 0001 0010 1011 0100 1101 1110 0111 Figura 3.7 Código octal con paridad impar. Nótese que la distancia del código, de la Figura 3.7, es dos. La paridad ocupa el bit más significativo. Ejemplo 3.6. Un código muy empleado es el hexadecimal que representa 16 símbolos o cifras del sistema hexadecimal mediante secuencias de cuatro bits. La tabla con el código se muestra en la Figura 3.8. Las secuencias hexadecimales suelen precederse con 0x; de este modo el número hexadecimal 0x1A4 tiene como equivalente al número decimal 420: 0 x1A4 1 162 10 161 4 160 Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F 420 Hex en binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Figura 3.8 Código hexadecimal. Profesor Leopoldo Silva Bijit 19-01-2010 8 Sistemas Digitales De acuerdo a la tabla de la Figura 3.8, el equivalente binario de la secuencia 0x1A4 se obtiene reemplazando cada cifra hexadecimal por su secuencia equivalente binaria, de cuatro bits. 0 x1A4 000110100100 3.3. Códigos alfanuméricos La mayor parte de los dispositivos periféricos empleados en sistemas de computación para comunicar al hombre con las máquinas, permiten representar las letras minúsculas y mayúsculas, dígitos decimales, signos de puntuación y caracteres especiales. Uno de los códigos más empleados es el código ASCII. Éste es un código de 7 bits, más uno de paridad. Permite representar 128 símbolos. Su nombre es una abreviación de "American Standard Code for Information Interchange". Se tienen 32 símbolos de control, símbolos de puntuación, letras y números. Los símbolos asociados a los dígitos decimales están entre 0x30 y 0x39; entonces basta considerar los 4 menos significativos para obtener el código BCD equivalente. Los códigos binarios de las letras mayúsculas y minúsculas difieren en el estado de un bit. Pueden plantearse una serie de sistemas combinacionales que decodifiquen o categoricen a símbolos pertenecientes al código ASCII. Por ejemplo: ¿Es letra? , ¿Es letra o número?, etc. H 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f NULL SOH STX EXT EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI D H 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f DEL DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US D H D H 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 32 ! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43 , 44 - 45 . 46 / 47 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 0 1 2 3 4 5 6 7 8 9 : ; < = > ? D H 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f @ A B C D E F G H I J K L M N O D H 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f P Q R S T U V W X Y Z [ \ ] ^ _ D H 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f ` a b c d e f g h i j k l m n o D H 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f D p q r s t u v w x y z { | } ~ del 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 Figura 3.9 Código ASCII. En computadores personales se emplean 8 bits para representar caracteres, lo cual permite denotar 256 símbolos. Esto ha sido especialmente útil en aplicaciones de procesamiento de textos en diversos idiomas, pues pueden incluirse letras con diferentes tipos de acentos. Profesor Leopoldo Silva Bijit 19-01-2010 Capítulo 3. Codificación binaria 9 El estándar ISO-8859 posee la codificación ASCII en su rango inicial (128 caracteres) y otros 128 caracteres para cada codificación de diferentes lenguas originarias de Europa occidental, utilizando 8 bits. ISO-8859-1 es el alfabeto latino. Este código no cubre a lenguajes con otros alfabetos, como el chino o el árabe. Unicode asigna un código único a cada carácter, utilizado en los lenguajes escritos del mundo, para esto Unicode representa un carácter en forma abstracta, y deja la representación visual, tamaño, dimensión, fuente o estilo, a otra aplicación, como un navegador web, un procesador de texto o un cliente de correo. Las normas de transmisión Unicode más empleadas son UTF-8 y UTF-16. En páginas web se emplean entidades HTML para enviar caracteres especiales al cliente. Comienzan con & y terminan en punto y coma. Por ejemplo para enviar una a minúscula acentuada, se envía: &aacute;. También se acepta introducir una secuencia Unicode precedida de la secuencia &#x. Por ejemplo U+00E1, es el Unicode para la á; entonces en la página web, puede codificarse: &#x00E1; 3.4. Códigos de despliegue (Display Codes) Existe una variedad de códigos empleados en voltímetros digitales, tubos de rayos catódicos y calculadoras. Uno de los más empleados es el código de siete segmentos, cuya tabla se ilustra a continuación: Decimal S6 S5 S4 S3 S2 S1 S0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 0 2 1 0 1 1 0 1 1 3 1 0 0 1 1 1 1 4 1 1 0 0 1 1 0 5 1 1 0 1 1 0 1 6 1 1 1 1 1 0 1 7 0 0 0 0 1 1 1 8 1 1 1 1 1 1 1 9 1 1 0 1 1 1 1 0 5 1 6 4 2 3 Figura 3.10 Código de siete segmentos. Profesor Leopoldo Silva Bijit 19-01-2010 10 Sistemas Digitales El diagrama ilustra la numeración de los segmentos, y los segmentos activados de acuerdo al valor decimal. Profesor Leopoldo Silva Bijit 19-01-2010 Capítulo 3. Codificación binaria 11 Índice general. CAPÍTULO 3 ............................................................................................................................................. 1 CODIFICACIÓN BINARIA ..................................................................................................................... 1 3.1. CODIFICACIÓN ................................................................................................................................... 1 3.2. CÓDIGOS NUMÉRICOS ........................................................................................................................ 1 3.2.1. Códigos ponderados .................................................................................................................. 1 Ejemplo 3.1. Código BCD ............................................................................................................................... 2 Ejemplo 3.2. Transmisión de símbolos BCD. .................................................................................................. 2 3.2.2. Distancia ................................................................................................................................... 3 3.2.3. Código reflejado. ....................................................................................................................... 4 3.2.4. Código cíclico ........................................................................................................................... 5 3.2.5. Paridad ...................................................................................................................................... 5 Ejemplo 3.3. Generador y detector de paridad. ................................................................................................ 5 Ejemplo 3.5. ..................................................................................................................................................... 6 Ejemplo 3.6. ..................................................................................................................................................... 7 3.3. CÓDIGOS ALFANUMÉRICOS ................................................................................................................ 8 3.4. CÓDIGOS DE DESPLIEGUE (DISPLAY CODES) ..................................................................................... 9 ÍNDICE GENERAL. ................................................................................................................................... 11 ÍNDICE DE FIGURAS................................................................................................................................. 12 Profesor Leopoldo Silva Bijit 19-01-2010 12 Sistemas Digitales Índice de figuras Figura 3.1 Código BCD. ................................................................................................................ 2 Figura 3.2 Transmisión serie de un símbolo BCD. ....................................................................... 3 Figura 3.3 Transmisión paralela símbolo BCD. ............................................................................ 3 Figura 3.4 Código Gray para palabras de largo tres. ..................................................................... 4 Figura 3.5 Conversores de código Gray a binario. ........................................................................ 5 Figura 3.6 Generador y detector de paridad. ................................................................................. 6 Figura 3.7 Código octal con paridad impar. .................................................................................. 7 Figura 3.8 Código hexadecimal. .................................................................................................... 7 Figura 3.9 Código ASCII. ............................................................................................................. 8 Figura 3.10 Código de siete segmentos. ........................................................................................ 9 Profesor Leopoldo Silva Bijit 19-01-2010