Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 2. Sistemas de numeração Neste capitulo vai-se estudar vários sistemas de representação numeração e os quais se designam por sistemas de numeração. Na tabela x apresenta-se os diversos sistemas numéricos que se irão focar. Todo o sistema numérico pressupõe uma base essa base define o número de algarismos ou dígitos. Sistema Decimal Binário Octal Hexadecimal Tabela 17- Sistemas de numeração Base Dígitos 10 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 2 0, 1 8 0, 1, 2, 3, 4, 5, 6, 7 16 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 2.1. Generalidades Um número numa determinada base é de uma forma genérica composto por 2 partes a parte inteira e a parte fracionaria, em todo e qualquer número tem-se sempre um digito mais significativo (MSD) que corresponde ao digito mais à esquerda e um digito menos significativo (LSD) que corresponde ao digito mais à direita como se pode ver na figura 16 que se segue a qual representa um número N numa determinada base r. Figura 16 - Representação de um número. Qualquer número N, numa determinada base r pode-se decompor num polinómio de potências de base r. Para se perceber melhor veja-se a expressão seguinte: … , … ⋯ ⋯ (Equação 42) A expressão converte qualquer valor numa determinada base para a base 10, onde cada digito (dn...d-j) tem um valor numérico e um valor posicional (rn...r-j). Pagina | 44 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 2.2. Sistema decimal Este é o sistema de numeração que normalmente se utiliza na vida. No sistema decimal um número pode ser decomposto em potências de 10, ou seja r será igual a 10 veja-se o exemplo seguinte: 1485,53 1 × 103 4 × 102 8 × 101 5 × 100 5 × 10−1 3 × 10−2 2.3. Sistema binário Este sistema é o mais utilizado em sistemas digitais. No sistema binário um número pode ser decomposto em potências de dois e no qual apenas se utilizam dois algarismos (0 e 1). Para uma melhor compreensão veja-se a tabela 18. Pesos Potências 16 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Tabela 18 – Sistema binário conversão para decimal Binário 8 4 2 1 23 22 21 20 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0 0 0 0 Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Para se ver melhor vai-se utilizar um outro exemplo considerando o seguinte número 11101 em binário e decompondo-o em potências tem-se: 11101 1 × 2 1 × 2 1 × 2 0 × 2 1 × 2 29 2.4. Sistema octal O sistema octal não é muito utilizado mas por vezes é útil. Um número na base oito pode ser decomposto em potências de oito. Veja-se o exemplo seguinte: 56433,12 5 × 84 6 × 83 4 × 82 3 × 81 3 × 80 1 × 8−1 2 × 8−2 23835,15625 2.5. Sistema hexadecimal O sistema hexadecimal é um sistema bastante importante pois normalmente é neste sistema que se faz o mapeamento de memória (será abordado noutro contexto) em Pagina | 45 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando sistemas digitais. Um número em hexadecimal pode ser decomposto em potências de dezasseis. Veja-se o exemplo seguinte: 71!, 25" 13 × 16 7 × 16 1 × 16 10 × 16 2 × 16 5 × 16 55066,1445 2.6. Conversão de decimal para outros sistemas Do ponto 2.3 ao ponto 2.5 viu-se como converter um número em diferentes bases para a base 10 agora vai-se analisar como converter da base 10 para outras bases. 2.6.1. Conversão de decimal para binário Para se converter um número em decimal para binário tem de se dividir este nas duas partes que o constituem, isto é, na sua parte inteira e na sua parte fracionária e converter a parte inteira e a parte fracionaria separadamente. Para se converter a parte inteira usa-se o método das divisões sucessivas o qual se explica na tabela 19. Para se converter a parte fracionaria usa-se o método das multiplicações sucessivas o qual se explica na tabela 20. Para uma melhor compressão vai-se utilizar um exemplo suponha-se que se quer converter o número 143,75 de decimal para binário, primeiro separa-se a parte inteira da parte fracionária ficando-se com os números 143 e 0,75. Primeiro ira-se converter a parte inteira dividindo-a sucessivamente por 2 até que o cociente seja 1, sendo este o dígito mais significativo do número em binário, verificando se o resto da divisão é um ou zero em todas as divisões anteriores, sendo o primeiro resto obtido o dígito menos significativo do número em binário, veja-se a tabela 19. Para converter a parte fracionária terá de se ir multiplicando sucessivamente por 2 até que o resultado seja zero ou se atinja uma precisão suficiente verificando-se se a parte inteira do resultado de cada multiplicação é um ou zero, caso seja um elimina-se a parte inteira para a próxima multiplicação, veja-se a tabela 20. Das tabelas podemos retirar o número em binário correspondente a 143,75 que é 10001111,112. Pagina | 46 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 143 03 1 Resto 1 LSD 2 71 11 1 Resto 1 1 1 1 0 Tabela 19 – Conversão de decimal para binário da parte inteira Primeira divisão 2 Segunda divisão 35 2 Terceira divisão 15 17 2 Quarta divisão 1 1 8 2 Quinta divisão Resto 1 0 4 2 Sexta divisão Resto 1 0 2 2 Sétima divisão Resto 0 0 1 Resultado Resto 0 Resto 0 Resut 1 MSD 1 1 0 0 0 1 O valor terá de se ler da direita para a esquerda 0 0 1 1 1 1 Tabela 20– Conversão de decimal para binário da parte fracionária 1,5 MSD 1 0 LSD 1 1 0 1*2-1 1*2-2 0,75 0,75*2 0,5*2 0,0*2 Resultado Decimal De notar que em certas situações não se consegue obter o valor da parte fracionaria exato. 2.6.2. Conversão de decimal para octal O processo de conversão é o mesmo apenas passamos a efetuar divisões sucessivas por oito para a parte inteira e multiplicações sucessivas para a parte fracionária. Veja-se as tabelas 21 e 22 onde se faz a conversão do valor 1435,75 de decimal para octal. Das tabelas podemos retirar o número em octal correspondente a 1435,75 que é 2637,68. 1435 63 75 3 Resto 3 LSD 8 179 019 3 Tabela 21 – Conversão de decimal para octal da parte inteira Primeira divisão 8 Segunda divisão 22 8 Terceira divisão 6 2 Resultado Resto 3 Resto 6 Res 2 MSD 3 3 6 2 6 3 0,75*8 0,0*8 Resultado Decimal 2 O valor terá de se ler da direita para a esquerda 3 Tabela 22 – Conversão de decimal para octal da parte fracionária 6 MSD 0 LSD 6 0 6*8-1 0*2-2 0,75 Pagina | 47 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 2.6.3. Conversão de decimal para hexadecimal O processo de conversão é o mesmo apenas passamos a efetuar divisões sucessivas por dezasseis para a parte inteira e multiplicações sucessivas para a parte fracionária. Veja-se as tabelas 23 e 24 onde se faz a conversão do valor 6490,75 de decimal para hexadecimal. Das tabelas podemos retirar o número em hexadecimal correspondente a 6490,75 que é 195A,C016. Tabela 23 – Conversão de decimal para hexadecimal da parte inteira Primeira divisão 16 Segunda divisão 25 16 Terceira divisão 9 1 Resultado 6490 0090 10 Resto 10 A LSD 16 405 085 05 Resto 5 A 5 9 1 9 5 Resto 9 0,75*16 0,0*16 Resultado Decimal Resut 1 MSD 1 O valor terá de se ler da direita para a esquerda A Tabela 24 – Conversão de decimal para hexadecimal da parte fracionária 12=C MSD 0 LSD C 0 12*16-1 0*16-2 0,75 2.7. Conversão de binário para octal e vice-versa Até aqui tem-se considerado que um número é composto por dígitos independentemente da sua base a partir de agora vai-se considerar que sempre que um numero esteja na base dois, ou seja, em binário os seus dígitos serão bits. Analisando-se a relação entre bases verifica-se que a relação entre a base 8 do sistema octal com a base 2 do sistema binário é de 23, ou seja, 8= 23 através desta relação verifica-se que para representar os oito dígitos que compõem a base do sistema octal precisa-se de 3 bits. Assim para se converter um número de binário para octal basta fazer-se grupos de 3 bits e converte-los para decimal. Para a parte inteira tem de se começar a contar para a esquerda a partir da vírgula. Para a parte fracionaria tem de se começar a contar para a direita a partir da vírgula. Veja-se um exemplo para melhor se perceber o processo convertendo o número 111110,001110 Pagina | 48 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando Binário Grupos Sentido dos grupos Octal Tabela 25 – Conversão de binário para octal ou de octal para binário 1 1 1 1 1 0 , 0 0 1 1 111 110 001 ← → 7 6 , 1 1 110 0 6 2.8. Conversão de binário para hexadecimal e vice-versa Para se converter de binário para hexadecimal o processo é idêntico à conversão de binário para octal tem de se ter em consideração a relação de bases de hexadecimal e binário a qual é 16=24, ou seja, precisamos de 4 bits para representar os dezasseis números o que equivale a se efetuar grupos de 4 bits. Veja-se um exemplo para melhor se perceber o processo convertendo o número 111110,001110. Tabela 26 – Conversão de binário para hexadecimal ou de hexadecimal para binário Binário 1 1 1 1 1 0 , 0 0 1 1 Grupos 0011 1110 0011 Sentido dos grupos ← → Hexadecimal 3 (14) E , 3 1 0 1000 8 2.9. Conversão de octal para hexadecimal e vice-versa Para se converter uma das duas bases passa-se uma delas para binário e converte-se de seguida para a base pretendida ou seja, de octal para hexadecimal converte-se de octal para binário e depois de binário para hexadecimal. 2.10. Operações aritméticas em binário Já se viu como converter números de umas bases para outras agora está na altura de se estudar como efetuar operações aritméticas em bases diferentes da base 10, deste modo nesta secção e até a secção 2.11 vai-se estudar como efectuar operações aritméticas em binário, octal e hexadecimal. 2.10.1. Soma em binário Vai-se estudar como se fazem somas em binário para tal usa-se a tabuada da soma em binário a qual esta expressa na tabela 27. Operando 1 0 0 1 1 Tabela 27 – Tabuada da soma em binário Operando 2 Resultado Transporte ou carry (E vai) 0 0 0 1 1 0 0 1 0 1 0 1 Operador + Exemplo somar o número 11001 ao número 1000. E vai Op1 Op2 Resultado 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 Decimal 25 8 33 Pagina | 49 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 2.10.2. Subtração em binário Vai-se estudar como se fazem subtrações em binário para tal usa-se a tabuada da soma em binário a qual esta expressa na tabela 27. Operando 1 0 0 1 1 Tabela 28 – Tabuada da subtração em binário Operando 2 Resultado Transporte ou borrow (E vai) 0 0 0 1 1 1 0 1 0 1 0 0 Operador - Exemplo subtrair ao número 1010 o número 101. E vai Op1 Op2 Resultado 0 10 0 0 1 0 1 1 0 10 0 0 1 0 1 1 Decimal 10 5 5 2.10.3. Multiplicação em binário Vai-se estudar como se fazem multiplicações em binário para tal usa-se a tabuada da soma em binário a qual esta expressa na tabela 29. Operando 1 0 0 1 1 Operador * Tabela 29 – Tabuada da multiplicação em binário Operando 2 Resultado Transporte ou carry (E vai) 0 0 0 1 0 0 0 0 0 1 1 0 2.11. Operações aritméticas em octal Nesta secção vai-se ver como efetuar as operações em octal, ou seja, como somar, subtrair e multiplicar na base oito. 2.11.1. Soma em octal Soma-se, digito a digito como em decimal, no caso de o resultado ser maior ou igual a 8 subtrai-se 8 e vai 1. 78+38=10 10 > 8 então 10-8=2 e vai 1 então 78+38=128 168+58=238 Tabela 30 - Soma em octal 1 + 2 6 5 3 6+5=11>8 11-8=3 238 E vai 1 2.11.2. Subtração em octal Quando o algarismo de cima é inferior ao de baixo adiciona-se 8 ao algarismo de cima e subtrai-se como em decimal obtendo-se o resultado da subtração e vai 1. 3258-568 = 2478 Pagina | 50 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 3 2 Tabela 31 – Subtração em octal 5 5+8=13 6 2+8=10 7 3-1=2 2 5 4 13-6=7 10-5-1=4 E vai 1 E vai 1 2478 2.11.3. Multiplicação em octal Todo o processo é idêntico ao caso de decimal, contudo tem de se converter os resultados das multiplicações parciais para octal. 568 X 148=10508 x 2 + 0+1=1 1 5 7+1=8 8-8=0 E vai 1 0 Tabela 32 - Multiplicação em octal 5 6 1 4 3 0 4*6=24 4 + 4*5=20 6 + 6*1=6 + + 5*1=5 13 0 13-8=5 E vai 1 5 0 308 248 68 58 2.12. Operações aritméticas em hexadecimal Nesta secção vai-se ver como efetuar as operações em hexadecimal, ou seja, como somar, subtrair e multiplicar na base dezasseis. 2.12.1. Soma em hexadecimal Soma-se, digito a digito como em decimal, no caso de o resultado ser maior ou igual a 16 subtrai-se 16 e vai 1. 2.12.2. Subtração em hexadecimal Quando o algarismo de cima é inferior ao de baixo adiciona-se 16 ao algarismo de cima e subtrai-se como em decimal obtendo-se o resultado da subtração e vai 1. 2.12.3. Multiplicação em hexadecimal Todo o processo é idêntico ao caso de decimal, contudo tem de se converter os resultados das multiplicações parciais para hexadecimal. 2.12.4. Representação de números inteiros com sinal Até este momento viu-se apenas formas de representação de números positivos, contudo têm-se também números negativos assim surge a necessidade de os representarmos, assim de seguida ira-se analisar algumas formas de representação numérica de números. Pagina | 51 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 2.12.4.1. Código de sinal e valor absoluto Uma solução encontrada para se representar números negativos foi a de juntar ao número em binário um bit à esquerda do bit mais significativo designado por bit de sinal, assim para se representar o número positivo considera-se que o bit de sinal é 0 e para se representar um número negativo considera-se 1. Na tabela 33 apresenta-se os números em binário com 3 bits e um de sinal e da qual se podem retirar as seguintes conclusões: 1. O zero tem duas representações distintas 0000 (0 em decimal) e 1000 (–0). 2. O maior valor absoluto que pode ser representado é 24-1-1=7 para o caso dos valores representados na tabela, e generalizando-se para um número representado por N bits ira-se ter 2N-1-1. Esta forma de representação designa-se por código de sinal e valor absoluto e para o qual é difícil se desenvolverem circuitos de operações nomeadamente a adição e subtração de valores para alem do já referido problema respeitante à dupla representação do “0” para melhor se perceber a problemática de efetuar operações considere-se as adições seguintes -12 + 8 e 12 +8. Para se efetuar as operações será preciso tratar o bit de sinal de modo independente assim para a primeira operação vai-se ter o seguinte: + Bit sinal 1 0 1 Bit 3 1 1 0 Bit 2 1 0 1 Bit 1 0 0 0 Bit 0 0 0 0 Decimal -12 8 -4 Bit 1 0 0 0 Bit 0 0 0 0 Decimal 12 8 4 Para a segunda operação obtém-se o seguinte: + Bit sinal 0 0 0 Bit 3 1 1 0 Bit 2 1 0 1 Analisando as duas situações deduz-se que ao se tratar de forma independente o primeiro valor está correto mas o segundo está errado sendo deste modo muito difícil conceber circuitos que prevejam todas as situações idênticas à anterior. Pagina | 52 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando Tabela 33- Código de sinal e valor absoluto Bit 2 Bit 1 Bit 0 1 1 1 1 1 0 1 0 1 1 0 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 Bit sinal 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Decimal 7 6 5 4 3 2 1 0 -0 -1 -2 -3 -4 -5 -6 -7 2.12.4.2. Código complemento de um Uma das vantagens deste método é que o sinal ao contrário do caso do código de sinal e valor absoluto, formando-se os números negativos a partir do complemento dos números positivos, ou seja da sua negação, para uma melhor compreensão veja-se a tabela 34, a qual representa os números compostos por 4 bits e o seu respetivo valor em decimal. Bit sinal 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Bit 2 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 Tabela 34 – Código complemento de um Bit 1 Bit 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 Decimal 7 6 5 4 3 2 1 0 -0 -1 -2 -3 -4 -5 -6 -7 Como se pode observar na tabela com 4 bits pode-se representar 24 = 16 números, o maior valor absoluto é dado por 24-1-1=7, de uma forma genérica tem-se que o maior valor absoluto representável é 2N-1-1 em que N é o numero de bits, de notar ainda que se continua a ter uma dupla representação para o zero mas em termos de operações matemáticas é mais simples realiza-las pois o sinal deixa de ser tratado separadamente, veja-se a soma seguinte 106 + (-2). Pagina | 53 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando + 1 0 1 0 1 1 1 1 1 1 0 1 1 0 1 0 1 1 0 0 1 1 1 0 1 0 1 0 0 + 0 1 1 1 0 106 -2 104 Da operação verifica-se a necessidade de efetuar o transporte do e vai 1 e somalo ao resultado não sendo muito pratico mas aceitável em termos de realização de circuitos que elaboram operações. 2.12.4.3. Código complemento de dois No código de complemento de um verifica-se que se tem ainda uma dupla representação do zero para se eliminar tal ambiguidade surgiu o código complemento de dois o qual é formado a partir do código complemento de um somando-se um no caso da representação de números negativos. Para além da vantagem de não se ter a dupla representação do zero as operações aritméticas se tornam ainda mais simples como se irá ver mais à frente. Neste sistema podem-se representar 2N números diferentes em que N é o número de bits o maior valor absoluto positivo será 2N-1-1 e o maior valor absoluto negativo será 2N-1 como se pode observar na tabela 35 onde se representa a representação em complemento de dois para o caso de 4 bits. Bit sinal 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Bit 2 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 Tabela 35- Código complemento de 2 Bit 1 Bit 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 Decimal 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 Para se ver como efetuar operações em complemento de dois analise-se a operação 106 + (-2). + 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 0 1 0 0 0 O valor que vai simplesmente se despreza quando se chega ao fim da operação 106 -2 104 Pagina | 54 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando Como se pode verificar pela operação realizada anteriormente é bem mais simples de realizar assim como de desenvolver circuitos que a implementem quando comparado com o caso do código complemento de um. 2.12.5. Comparação das formas de representação de inteiros com sinal Para se comparar as diversas formas de representação de números inteiros com sinal vai-se efetuar a mesma operação com os três formas de representação e ver as diferenças entre elas. Decimal 7 + -6 1 Tabela 36 – operações com sinal nas três formas de representação Binário sinal valor abs. Complemento de um Complemento de dois 0 1 1 1 0 1 1 1 0 1 1 1 + 1 1 1 0 + 1 0 0 1 + 1 0 1 0 1 1 1 0 1 1 0 0 0 0 1 0 0 0 1 1 Valor errado Transporte e soma 1 Despreza-se o 1 Sinal tratamento sep. 0 0 0 1 O que fazer?? Com 1 A partir da tabela 36 pode-se tirar as seguintes conclusões: 1. Na representação com o código de sinal valor absoluto o resultado das operações pode ser errado e quando vai um da operação não se sabe o que fazer, o que provoca com que os circuitos sejam difíceis de conceber e sem garantias de um resultado correto. 2. Na representação com o código complemento de um verifica-se que o resultado é o correto mas quando vai um tem de se transportar e somar para se obter o resultado, o que provoca com que os circuitos sejam difíceis de conceber mas com garantias de um resultado correto. 3. Na representação com o código complemento de dois verifica-se que o resultado é o correto e quando vai um apenas se despreza esse bit, o que provoca com que os circuitos sejam simples de conceber, sendo esse o motivo pelo qual é a representação de inteiros com sinal mais utilizada. 2.12.6. Operações matemáticas em complemento de dois Como o complemento de dois é o sistema mais utilizado por esse motivo ira-se analisar como efetuar as operações aritméticas, mais propriamente como somar e subtrair e assim como ver o conceito de Overflow o qual é de extrema importância em sistemas digitais. Pagina | 55 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 2.12.6.1. Soma em complemento de dois A soma em complemento de dois é realizada do mesmo modo que a soma em binário natural mas contudo quando vai um nos últimos bits a se adicionarem desprezase esse bit, de seguida vai-se analisar as situações possíveis. Soma de dois números positivos de 4 bits + Bit 3 0 0 0 Sinal Bit 2 1 0 1 Bit 1 0 1 1 Bit 0 1 0 1 Decimal 5 2 7 Soma de dois números negativos de 4 bits + 1 Desprezado Bit 3 1 1 1 Sinal Bit 2 0 1 0 1 Bit 1 1 1 0 1 Bit 0 0 1 1 0 Decimal -6 -1 -7 6+1 Soma de um número negativo e um positivo de 4 bits + 1 Desprezado Bit 3 1 0 0 Sinal Bit 2 0 1 0 Bit 1 1 1 0 Bit 0 0 0 0 Decimal -6 6 0 2.12.6.2. Subtração em complemento de dois Para se subtrair em complemento de dois mudamos o sinal do subtrativo (Valor que se quer subtrair) e adicionam-se os valores escritos com o mesmo número de bits, de seguida vai-se dar um exemplo. Exemplo: 9-4=5 → 01001c2-00100c2=00101c2 Passos Passo 1 Passo 2 + + 1 Sai Bit 4 0 1 0 1 0 0 Sinal Bit 3 0 1 0 1 1 0 Bit 2 1 0 0 1 0 1 Bit 1 0 1 0 0 0 0 Bit 0 0 1 1 0 1 1 Descrição Subtrativo Complemento de um Mais 1 Complemento de dois Complemento de dois Complemento de dois Resultado Decimal 4 -4 9 5 2.12.6.3. Noção de Overflow O overflow dá-se quando o resultado de uma determinada operação entre dois números necessita de mais bits para se representar, em complemento de dois é facilmente detetável pela análise dos sinais dos operandos e do resultado da operação, para melhor compreensão veja-se os exemplos que se seguem. Pagina | 56 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando Exemplo 1: + Bit 4 0 0 1 Sinal errado Bit 3 1 1 0 Bit 2 Bit 1 0 0 0 0 0 0 Grandeza errada Bit 0 1 0 1 Decimal 9 8 17 Analisando-se a operação verifica-se que o valor da grandeza está errado pois não corresponde ao valor 17, por outro lado o sinal também está errado pois a soma de dois números positivos será sempre um número positivo e neste caso o resultado é um número negativo. Exemplo 2: Bit 4 1 0 1 Passar 8 a -8 + 1 Sai fora 1 1 0 Sinal errado Bit 3 0 1 0 + 1 0 1 Bit 2 1 0 1 0 1 1 Bit 1 1 0 1 Bit 0 1 0 1 1 0 0 1 1 1 1 Grandeza errada Decimal -9 8 -8 -9 -17 Analisando-se a operação verifica-se que o valor da grandeza está errado pois não corresponde ao valor 17, por outro lado o sinal também está errado pois a subtração de um número negativo com um número soma positivo será sempre um número negativo e neste caso o resultado é um número positivo. Ao se canalizar as duas situações verifica-se que em ambos os casos o sinal do resultado está errado assim em complemento de dois para se detetar um overflow basta analisar os sinais dos operandos e do resultado para se verificar uma situação de overflow. 2.13. Códigos Em sistemas digitais tem-se a necessidade de representar números contudo estes apenas podem ser representados em binário assim terá de se utilizar códigos para representar números de modo a que as pessoas os entendam facilmente assim nesta perspetiva desenvolveram-se códigos. Contudo não se utilizam apenas números na vida quotidiana, utilizam-se também letras e símbolos assim em sistemas digitais tem-se dois tipos distintos de códigos os códigos numéricos que servem para se representar números e os códigos alfanuméricos os quais servem para representar números, letras e símbolos. Para além da necessidade das pessoas entenderem facilmente a representação de números e letras existem outros motivos para se utilizarem códigos que se prendem Pagina | 57 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando com o armazenamento da informação assim como outras situações pertinentes como a deteção de erros em transmissão de informação ou a sua deteção e correção. 2.13.1. Códigos numéricos Os códigos numéricos servem para se representar números um deles é o código binário puro o qual já se falou assim como o código de sinal e valor absoluto, o código complemento para um e o código complemento para dois, destes códigos o mais importante é o código complemento para dois pois é o que nos possibilita representar números inteiros com sinal de uma forma simples assim como efetuar operações matemáticas de uma forma mais simples. Para alem dos códigos numéricos já descritos atrás existem outros códigos numéricos e os quais se vão a passar a descrever assim como quis são as suas aplicações. 2.13.1.1. Código NBCD O código NBCD (Natural Binary Coded Decimal) é um código que utiliza quatro bits para representar os nove dígitos em decimal, com este código pode-se representa números inteiros ou fracionários positivos, assim como efetuar operações matemáticas. A metodologia que se utiliza para a representação numérica é converter cada um dos dígitos em decimal para o seu correspondente em binário natural com 4 bits. Para se converter um número em NBCD para binário efetuam-se grupos de 4 bits confessando a formar-se os grupos da parte inteira (número atrás da virgula) da direita para a esquerda e da parte fracionária (número à frente da virgula) efetuam-se grupos de 4 bits mas da esquerda para a direita. Na tabela x apresenta-se a representação em binário de cada um dos nove dígitos em binário e o seu valor em decimal, na tabela x apresenta-se como converter um número em NBCD para decimal. Pagina | 58 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando Bit 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 NBCD Decimal Bit 2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 2 Tabela 37 – Código NBCD NBCD Bit 1 Bit 0 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 Tabela 38– Conversão NBCD para decimal e vice-versa 0 0 0 0 1 1 1 1 0 0 1 , 0 0 0 0 7 9 , 0 Sentido da conversão ← → 0 0 Decimal 0 1 2 3 4 5 6 7 8 9 Invalido 0 0 0 0 1 1 2.13.1.2. Código de Gray O código de Gray é um código de representação numérica e com o qual não se executam operações matemáticas contudo ele é bastante utilizado nomeadamente em conversores analógico para digital e em sensores do tipo encoder. A grande vantagem deste código consiste na sua elevada imunidade a erros de transmissão. Este código é elaborado de modo a que de número para número apenas varie um bit, tal como nos mapas de Karnaugh de quadrícula para quadrícula apenas varia uma variável. Este código também é designado por código refletido pois à medida que se vai aumentando um bit acrescenta-se um “zero” à esquerda da última tabela e acrescentando um “um” para gerar a outra parte da tabela reflete-se esta como se fosse um espelho, na tabela 39 apresenta-se a formação do código de Gray desde um bit até 4 bits. Pagina | 59 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 1 bit Bit 0 0 1 2 bit’s Bit 1 Bit 0 0 0 0 1 1 1 1 0 Bit 2 0 0 0 0 1 1 1 1 Tabela 39 - Geração do código de Gray Código de Gray 3 bit’s 4 bit’s Bit 1 Bit 0 Bit 3 Bit 2 Bit 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 0 0 1 0 0 Decimal Bit 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Para se converter do código de Gray para binário natural vai-se construir uma tabela em que se representa o código de Gray com quatro bits e o código em binário com quatro bits e a partir desta retirar as expressões lógicas através de mapas de Karnaugh, isto é, vai-se utilizar como entradas os quatro bits do código de Gray G0, G1, G2 e G3 e considerar as saídas B0, B1, B2 e B3 como as saídas. Na tabela 40 apresenta-se a correspondência código Gray de 4 bits e binário natural. Tabela 40 - Correspondência código Gray de 4 bits e binário natural Gray 4 bits Binário natural 4 bits G2 G1 G0 B3 B2 B1 B0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 1 0 0 1 1 1 0 1 0 1 1 0 1 0 1 1 0 1 0 0 0 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 0 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 1 1 1 G3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Construindo-se os mapas de Karnaugh para B0, B1, B2 e B3 obtém-se: B0 G1 G0 G2 G3 00 01 11 10 00 01 11 01 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 Pagina | 60 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando Tirando-se a expressão e simplificando tem-se: %%%%$3 %%%%$2 %%%% $1 %%%%$0$3 %%%%$2 %%%% $1 %%%%$0 %%%%$3$2 %%%% $1$0$3$2 %%%% $1$0 %%%%$3$2 #0 $1$0 %%%%$0$3$2 %%%% %%%%$3 %%%%$2 $1$0$3 %%%%$2 $1 $1$0 %%%% $1 %%%%$0('$3 %%%%$2 %%%% $3$2( '$1 %%%%$0 %%%% $1$0('$3$2 %%%% $3 %%%%$1( #0 '$1$0 %%%%%%%%%%%%% '$2⨁$3('$1⨁$0( %%%%%%%%%%%%% #0 '$1⨁$0('$3⨁$2( #0 $0⨁$1⨁$2⨁$3 B1 G1 G0 G3 G2 00 01 11 10 00 01 11 10 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 Tirando-se a expressão e simplificando tem-se: %%%%$2 %%%% $1 %%%%%%%% %%%% #1 $1$3 $3$2 $1$3$2 %%%% $1$3$2 %%%%$2 %%%% $3$2( '$3 %%%%$2 $3$2 %%%%($1 %%%% #1 $1'$3 %%%%%%%%%%%% $1 %%%%'$2 ⊕ $3( #1 $1'$3⨁$2( #1 $1⨁$2 ⊕ $3 B2 G1 G0 G3 G2 00 01 11 10 00 01 11 10 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Tirando-se a expressão e simplificando tem-se: %%%% $3 %%%%$2 #2 $3$2 #2 $3⨁$2 B3 G1 G0 G3 G2 00 01 11 10 00 01 11 10 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 #3 $3 Pagina | 61 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando Das expressões lógicas anteriores pode-se construir o logigrama com portas lógicas para a conversão do código de Gray para binário natural, o qual se apresenta na figura 17. Figura 17- Logigrama da conversão do código de Gray para binário natural Para se converter do código binário para o código de Gray procede-se da mesma forma mas as entradas passam a ser B0, B1, B2 e B3 e as saídas serão G0, G1, G2 e G3 construindo-se os mapas de Karnaugh para G0, G1, G2 e G3: G0 B1 B0 B2 B3 00 01 11 10 00 01 11 01 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 Tirando-se a expressão e simplificando tem-se: %%%% #0 %%%%#1 $0 #0#1 $0 #0⨁#1 G1 B1 B0 B3 B2 00 01 11 10 00 01 11 10 0 1 1 0 0 1 1 0 1 0 0 1 1 0 0 1 Pagina | 62 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando Tirando-se a expressão e simplificando tem-se: %%%% #2#1 %%%% $1 #1#2 $1 #1⨁#2 G2 B0 B1 B3 B2 00 01 11 10 00 01 11 10 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Tirando-se a expressão e simplificando tem-se: %%%% #3 %%%%#2 $2 #3#2 $2 #3⨁#2 G3 B1 B0 B3 B2 00 01 11 10 00 01 11 10 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 $3 #3 Das expressões lógicas anteriores pode-se construir o logigrama com portas lógicas para a conversão de binário natural para código de Gray, o qual se apresenta na figura 18. Figura 18- Logigrama da conversão de binário natural para código de Gray Pagina | 63 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando 2.13.2. Códigos alfanuméricos Os códigos alfanumérico permitem a representação de números, letras e símbolos os mais importantes e os quais se irão abordar são os códigos ASCII e o código ASCII estendido. 2.13.2.1. Código ASCII O código ASCII ou seja o American Standard Code for Information Interchange traduz-se por “Código Americano Standard para a Troca de Informações”, este código é composto por 7 bits ou seja pode-se representar 128 símbolos diferentes, sendo algumas destas representações correspondentes a instruções de transmissão de informação. Na figura 19 apresenta-se a correspondência entre octal hexadecimal e decimal de cada um dos símbolos do código ASCII. Figura 19- código ASCII 2.13.2.2. Código ASCII estendido O código ASCII estendido é um código que em vez de utilizar 7 bits utiliza 8 duplicando assim o número de símbolos que se podem utilizar sendo os primeiros símbolos os mesmos dos representados pelo código ASCII e estando a correspondência de decimal e hexadecimal com o símbolo dos restantes 128 símbolos represados na figura 20. Pagina | 64 Rogério Monteiro Sistemas Digitais – Curso Profissional de Eletrónica, Automação e Comando Figura 20 - restantes 128 símbolos do código ASCII estendido 2.14. Deteção e correção de erros Todo e qualquer sistema de transmissão de informação na forma digital, está sujeito a erros, esses advêm de existirem perturbação nos sinais transmitidos, tais perturbações podem ser devidas a atenuação do sinal assim como ao aparecimento de ruído no sinal o qual não se consegue eliminar como o caso do ruído térmico. Desta forma torna-se necessário utilizar técnicas de deteção e correção de erros de entre as muitas técnicas existentes vai-se apenas ver a técnica mais simples de deteção de erros que é o método da paridade que se descreve de seguida. 2.14.1. Método da paridade O método de paridade é o método mais simples de deteção de erros de transmissão este método apenas consegue detetar um erro numa palavra transmitida ou no caso de existirem um numero de erros impar na palavra transmitida, de notar ainda que esta técnica apenas nos permite detetar erros em numero impar na transmissão e não consegue corrigi-los. Temos duas formas para aplicar este método a paridade par em que à mensagem transmitida é acrescentado um bit designado por bit de paridade, sendo este bit 1 no caso do número de uns ser impar e zero no caso do número de uns da mensagem ser par. O outro método é o de paridade impar sendo este exatamente implementado da mesma forma que o método de paridade par mas desta feita o número de uns na mensagem será impar ou seja quando o número de uns é par o bit de paridade a acrescentar à mensagem terá o valor zero e no caso do número de uns ser par terá o valor de 1. Pagina | 65 Rogério Monteiro