CÓDIGOS Uma grande parte dos sistemas digitais trabalha com os níveis lógicos (bits) representando informações que são codificadas em bits. Exemplo: computador trabalha com informações alfanuméricas; a calculadora com informações numéricas; a telefonia digital com canais de voz; cd laser com sinais sonoros. Estes sistemas não entendem a informação que processam na forma de letras, números, sinais sonoros,... e sim, na forma de bits, sendo necessário transformar estas informações na forma de códigos binários. Devido à diversidade de informações e ao desenvolvimento da eletrônica digital, vários códigos foram criados e consequentemente vários circuitos para a codificação e decodificação destas informações. Os codificadores e decodificadores são circuitos combinacionais dedicados: circuitos comuns em projetos de sistemas digitais devido às funções lógicas que executam, sendo encontrados prontos em circuitos integrados comerciais. Exemplos de códigos: Código BCD 8421 Também chamado simplesmente de BCD Binary Coded Decimal (Decimal Codificado em Binário), é composto por quatro bits, tendo cada bit um peso equivalente ao do sistema numérico binário: 1 para o primeiro bit à direita, que é chamado de bit menos significativo (LSB Least Significant Bit); 2 para o segundo bit à direita; 4 para o terceiro bit; 8 para o quarto bit à direita, que é chamado de bit mais significativo (MSB Most Significant Bit); Desta forma este código representa os números decimais de 0 a 9 no sistema binário. Decimal BCD 8 4 2 1 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 UTFPR Cornélio Procópio 1
8 1 0 0 0 9 1 0 0 1 Ao invés de se converter um número formado por diversos dígitos para o sistema binário, os sistemas digitais que utilizam este código podem converter cada dígito do número para o código BCD. 1920394819 2 = 1110010011101101110011001000011 2 1920394819 10 = 0000 1001 0010 0011 1001 0100 1000 0001 1001 1 9 2 3 9 4 8 1 9 Código BCH O código Binary Coded Hexadecimal (Hexadecimal Codificado em Binário) é análogo ao código BCD com a diferença de representar os algarismos do sistema hexadecimal através das combinações possíveis com quatro bits. Decimal BCH 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 A 1 0 1 0 B 1 0 1 1 C 1 1 0 0 D 1 1 0 1 E 1 1 1 0 F 1 1 1 1 Código ASCII Um exemplo de código binário é o código ASCII American Standard Code for Information Interchange (Código Americano Padrão para a Troca de Informações), que foi criado para padronizar a troca de informações ou dados entre os computadores, seus periféricos (teclado, monitor,...) e é utilizado também em alguns sistemas de comunicação de dados. É composto por sete bits para codificar várias informações diferentes como números, letras, símbolos especiais, sinais de UTFPR Cornélio Procópio 2
controle de transmissão, sinais de controle de formatação e sinais de controle de dispositivos. B 7 0 0 0 0 1 1 1 1 B 6 0 0 1 1 0 0 1 1 B 5 0 1 0 1 0 1 0 1 B 4 B 3 B 2 B 1 Hex 0 1 2 3 4 5 6 7 0 0 0 0 0 NUL DLE Sp 0 @ P p 0 0 0 1 1 SOH DC1! 1 A Q a q 0 0 1 0 2 STX DC2 2 B R b r 0 0 1 1 3 ETC DC3 # 3 C S c s 0 1 0 0 4 EOT DC4 $ 4 D T d t 0 1 0 1 5 ENQ NAK % 5 E U e u 0 1 1 0 6 ACK SYN & 6 F V f v 0 1 1 1 7 Bel ETB 7 G W g w 1 0 0 0 8 BS CAN ( 8 H X h x 1 0 0 1 9 HT EM ) 9 I Y i y 1 0 1 0 A LF SUB * : J Z j z 1 0 1 1 B VT Esc + ; K [ k { 1 1 0 0 C LF FS, < L \ l 1 1 0 1 D CR GS - = M ] m } 1 1 1 0 E SO RS. > N ^ n ~ 1 1 1 1 F SI US /? O _ o Del Código: Significado: NUL (Null char) caracter nulo SOH (Start of Header) começo do cabeçalho de transmissão STX (Start of Text) início do texto ETX (End of Text) fim do texto EOT (End of Transmission) fim da transmissão ENQ (Enquiry) questionamento ACK (Acknowledgment) reconhecimento Bel (Bell) campainha BS (Backspace) retorno do carro HT (Horizontal Tab) tabulação horizontal LF (Line Feed) alimentação da linha VT (Vertical Tab) tabulação vertical FF (Form Feed) alimentação de papel CR (Carriage Return) enter SO (Shift Out) shift UTFPR Cornélio Procópio 3
SI (Shift In) shift DLE (Data Link Escape) queda do link de dados DC1 (XON) (Device Control 1) dispositivo de controle 1 DC2 (Device Control 2) dispositivo de controle 2 DC3 (XOFF) (Device Control 3) dispositivo de controle 3 DC4 (Device Control 4) dispositivo de controle 4 NAK (Negative Acknowledgement) reconhecimento negado SYN (Synchronous Idle) sincronismo ETB (End of Trans. Block) fim do bloco de transmissão CAN (Cancel) cancelar EM (End of Medium) fim da mídia SUB (Substitute) substituto Esc (Escape) tecla Esc FS (File Separator) separador de arquivo GS (Group Separator) separador de grupo RS (Request to Send)(Record Separator) solicitação de envio US (Unit Separator) separador de unidade Sp (Space) espaço Exemplos: - pressionando-se a tecla F do teclado de um microcomputador internamente é gerado o código B 7 B 6 B 5 B 4 B 3 B 2 B 1 B 0 = 1000110; - pressionando-se a tecla f do teclado de um microcomputador internamente é gerado o código B 7 B 6 B 5 B 4 B 3 B 2 B 1 B 0 = 1100110; - tecla 3 : B 7 B 6 B 5 B 4 B 3 B 2 B 1 B 0 = 0110011; - tecla espaço: B 7 B 6 B 5 B 4 B 3 B 2 B 1 B 0 = 0100000; - tecla shift: B 7 B 6 B 5 B 4 B 3 B 2 B 1 B 0 = 0001110 ou 0001111; A tabela acima apresenta a primeira versão para o código ASCII, utilizando 7 bits, o que possibilita representar 128 caracteres ou símbolos diferentes. Como os circuitos digitais armazenam bits em quantidades equivalentes à potência de dois, as versões atuais do código ASCII apresentam geralmente 8 bits, possibilitando representar 256 caracteres ou símbolos diferentes. Uma limitação envolvendo o ASCII consiste no fato de que este código foi criado com base nos idiomas de países ocidentais, não sendo possível seu uso para os idiomas de alguns países europeus e de outras regiões, cujos alfabetos contém caracteres que não estão inclusos nos 256 caracteres do ASCII. Para evitar esta limitação, a Organização de Padrões Internacionais (ISO - International Standards Organization) criou um novo padrão de codificação de caracteres denominado Latin 1, que incluí caracteres Europeus excluídos do grupo de caracteres ASCII. A Microsoft incrementou o Latin 1, criando um novo padrão: o ANSI (American National Standard Institute Instituto de Padrões Nacional Americano). Mas o ANSI UTFPR Cornélio Procópio 4
ainda é uma codificação de caracteres de 8 bits, representando no máximo 256 caracteres diferentes, sendo que muitos idiomas possuem centenas de símbolos (particularmente idiomas de países asiáticos como a China, Coréia e Japão). A Microsoft, em colaboração com outras companhias como a Apple Computer e IBM, criou um consórcio sem fins lucrativos denominado Unicode, definindo um novo padrão de codificação para grupos de caracteres internacionais. O Unicode surgiu juntamente com projetos em progresso do ISO, e o resultado é o padrão Unicode para a codificação de caracteres, o qual utiliza 16 bits para a sua codificação, fornecendo 65.536 caracteres diferentes quantidade mais do que suficiente para representar os caracteres de todos os idiomas, até mesmo os mais arcaicos, como o sânscrito e hieróglifos egípcios, incluindo também marcas de pontuação, símbolos matemáticos e símbolos gráficos. Código de paridade Em virtude de transientes, ruídos e outras perturbações, erros de 1 bit às vezes ocorrem quando um dado na forma digital é transmitido por linhas telefônicas ou outros meios de transmissão de dados. Uma maneira de detectar estes erros é incluir um ou mais bits com os bits dos dados a serem transmitidos, de modo que estes bits adicionais sejam gerados a partir de uma combinação dos bits dos dados. Um modo de se efetuar este tipo de transmissão de dados é adicionar um bit de paridade - bit adicional que indicará se o número de bits 1 dos dados será par ou ímpar. Ex.: bit de paridade = 0 número par de bits 1 1 número ímpar de bits 1 bit de paridade informação 01001 11000 01100 00000 Na transmissão de dados, o circuito transmissor deve possuir um gerador de paridade e o circuito receptor um verificador de paridade, trabalhando como um codificador e decodificador. Cabe observar que o bit de paridade não faz parte da informação em si, sendo parte somente do processo de transmissão. Assim, ao invés de se transmitir somente os bits dos dados, se transmite um bit a mais (no exemplo acima a informação a ser transmitida é constituída por quatro bits mas são transmitidos cinco bits). UTFPR Cornélio Procópio 5
O gerador de paridade pode criar um bit de paridade de valor 0 para um número par e 1 para um número ímpar de bits 1 da informação, respectivamente. Este tipo de geração de paridade é chamada de geração de paridade par. No caso contrário, quando é gerado 1 para um número par e 0 para um número ímpar de bits 1, é chamada geração de paridade ímpar. bit de informação paridade 01001 paridade par 11001 paridade ímpar Um circuito gerador e verificador de paridade é o ou exclusivo (exclusive or). Abaixo é mostrado um gerador de paridade par e um verificador. Para gerar a paridade ímpar basta inverter a saída da porta lógica ou exclusivo na saída do gerador de paridade ( ). A última porta lógica indica se os sinais do gerador e verificador são iguais, fornecendo 0 caso a transmissão seja efetuada com sucesso e 1 caso ocorram erros na transmissão. E 0 E 1 E 2 E 3 S 2 gerador de paridade verificador de paridade = S 2 : 0 S 2 : 1 Código de Hamming Código para a detecção e correção de erros, geralmente utilizado em comunicações para as transmissões de dados binários, em que o grau de correção de erros seja importante. Desenvolvido por Richard Hamming na década de 1940 nos Bell Labs para implementar o computador Bell Model V dispositivo eletromecânico baseado em relés, que possuía o modo de entrada de dados efetuado por cartões perfurados, os quais geravam constantemente erros de leitura. O algoritmo Hamming Code foi publicado em1950. O princípio básico do código de Hamming baseia-se na geração de uma combinação de bits de paridade entre os bits de dados a serem transmitidos em um UTFPR Cornélio Procópio 6
determinado meio, gerando o bit stuffing. Os bits de paridade são gerados a cada par dos bits de dados, indicando o posicionamento do bit transmitido com erro de acordo com o diagrama abaixo: Bits a serem transmitidos: b0, b1 e b2; Bits do código de Hamming: p0, p1,p2 e p3; Transmissão final: b0 b1 b2 p0 p1 p2 p3. b0 p0 p1 p3 p2 b1 b2 Do esquema geral acima, caso exista um erro na transmissão de um bit, três bits de paridade serão gerados indicando o erro e os valores de p0, p1 e p2 indicam a posição do bit errado. Como exemplo, a transmissão dos bits 110: p 3 =1 Dados b0=1 b1=1 b2=0 p 0 =1 p 1 =0 p 2 =0 UTFPR Cornélio Procópio 7
1 1 0 1 0 1 0 Bits transmitidos: 1101001 Se um erro aparecer na transmissão do bit b1, mudando seu valor de 1 para 0, o circuito receptor receberá os seguintes bits: 1011001. O bit de paridade p3 indicará o erro na transmissão e os bits p0 e p2 indicarão a posição do erro (o bit errado). Codificadores Os codificadores são circuitos lógicos dedicados que convertem informações alfanuméricas ou de controle para um código determinado. A maior aplicação dos codificadores está na conversão de dados de um sistema de interface com o usuário, como o teclado, para o código com o qual o respectivo sistema digital trabalha. Codificador Decimal - BCD dados bits de paridade 0 1 E 9 E 8 E 7 E 6 E 5 E 4 E 3 Codificador Decimal BCD S 3 (MSB) S 2 S 0 (LSB) E 2 E 1 E 0 UTFPR Cornélio Procópio 8
E 9 E 8 E 7 E 6 E 5 E 4 E 3 E 2 E 1 E 0 S 3 S 2 S 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 S 3 = E 8 + E 9 S 2 = E 4 + E 5 + E 6 + E 7 = E 2 + E 3 + E 6 + E 7 S 0 = E 1 + E 3 + E 5 + E 7 + E 9 E 9 E 8 E 7 E 6 E 5 E 4 E 3 E 2 E 1 E 0 S 3 (MSB) S 2 S 0 (LSB) UTFPR Cornélio Procópio 9