Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
pt:avr:registers [2015/11/20 17:14] articapt:avr:registers [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 5: Line 5:
 ===== Essencial ===== ===== Essencial =====
  
-[{{  :images:logic:tape_buttons.jpg?240|Tape player's buttons}}]+[{{  :images:logic:tape_buttons.jpg?240|Botões do equipamento de cassetes}}]
  
 O registro é como um painel de botões num controlo doméstico. Tem botões, que podem estar ligados ou desligados. Um dos melhores exemplos é um radio de cassetes. Estes equipamentos, como deve recordar, tem seis botões de controlo: O registro é como um painel de botões num controlo doméstico. Tem botões, que podem estar ligados ou desligados. Um dos melhores exemplos é um radio de cassetes. Estes equipamentos, como deve recordar, tem seis botões de controlo:
Line 20: Line 20:
 Os registros do microcontrolador comportam-se da mesma forma – cada botão faz algo, quando usado corretamente. Quando pressionamos o botão errado, o microcontrolador pode não deixar de funcionar, mas também não irá funcionar. Na realidade, não existem botões de registro, em vez disso existe um conjunto de transístores, os quais ligam ou desligam a eletricidade. Os microcontroladores mais simples tem 8 comutadores com base em transístores de um só registo. Um registo pode ser considerado como um número de 8 bits, onde cada bit é registado no estado de cada um dos transístores. Por exemplo, um bit com o valor de 1 pode significar que o comutador está ligado e com o valor 0 que o comutador está desligado. Os registros do microcontrolador comportam-se da mesma forma – cada botão faz algo, quando usado corretamente. Quando pressionamos o botão errado, o microcontrolador pode não deixar de funcionar, mas também não irá funcionar. Na realidade, não existem botões de registro, em vez disso existe um conjunto de transístores, os quais ligam ou desligam a eletricidade. Os microcontroladores mais simples tem 8 comutadores com base em transístores de um só registo. Um registo pode ser considerado como um número de 8 bits, onde cada bit é registado no estado de cada um dos transístores. Por exemplo, um bit com o valor de 1 pode significar que o comutador está ligado e com o valor 0 que o comutador está desligado.
  
-[{{  :images:logic:register_buttons_and_bits.png?240|Register's "buttons" and bit values}}]+[{{  :images:logic:register_buttons_and_bits.png?240|Botões do Registo e valores dos bits}}]
  
 Uma vez que o estado dos registos pode facilmente ser mostrado como um número, um registo pode ser comparado com a memória, a qual pode guardar dados do tamanho de um número. Com esta comparação, podemos depreender que os registros são espaços de memória. A diferença entre registos e espaços de memória é que a ultima apenas guarda informação, enquanto o registo na realidade controla algo mais. Por exemplo, se o valor binário 01100001 se encontrar escrito no registo, significa que três dos 8 botões encontram-se pressionados o que implicará algum acontecimento.  Uma vez que o estado dos registos pode facilmente ser mostrado como um número, um registo pode ser comparado com a memória, a qual pode guardar dados do tamanho de um número. Com esta comparação, podemos depreender que os registros são espaços de memória. A diferença entre registos e espaços de memória é que a ultima apenas guarda informação, enquanto o registo na realidade controla algo mais. Por exemplo, se o valor binário 01100001 se encontrar escrito no registo, significa que três dos 8 botões encontram-se pressionados o que implicará algum acontecimento. 
Line 37: Line 37:
 Não existe nada de difícil em escrever e ler valores de registo, mas pode ser um quanto complicado se se pretende alterar o valor de apenas um dos bits. Para alterar bits, precisamos de saber matemática binária e recorrer a sistemas numéricos diferentes. Não é impossível lidar apenas com sistema binário, mas poderá tornar-se um quanto complicado, uma vez que os números binários podem tornar-se longos, razão pela qual a maioria das pessoas recorre a números hexadecimais.  Não existe nada de difícil em escrever e ler valores de registo, mas pode ser um quanto complicado se se pretende alterar o valor de apenas um dos bits. Para alterar bits, precisamos de saber matemática binária e recorrer a sistemas numéricos diferentes. Não é impossível lidar apenas com sistema binário, mas poderá tornar-se um quanto complicado, uma vez que os números binários podem tornar-se longos, razão pela qual a maioria das pessoas recorre a números hexadecimais. 
  
-[{{  :images:logic:logic_hexadecimal.png?209|Hexadecimal numbers}}]+[{{  :images:logic:logic_hexadecimal.png?209|Números hexadecimais}}]
  
 No sistema hexadecimal, os números não são apenas 0 e 1 como no sistema binário, ou 0 a 9 no sistema decimal, mas antes de 0 a F. Um número hexadecimal consiste em quatro bits. A tabela ao lado mostra os números binários e os correspondentes hexadecimais. Os números binários são convertidos em hexadecimais lendo os bits ao mesmo tempo, começando pelo de mais baixo nível. Os níveis são lidos da direita para a esquerda e os seus números começam em 0. Por exemplo, o bit de nível mais baixo (nível 0) é 0, e o de nível mais alto é 1. No exemplo anterior, o valor binário do registo é 01100001, o que corresponde a 61 em hexadecimal sendo escrito como 0x61 (zero à esquerda) em C. No sistema hexadecimal, os números não são apenas 0 e 1 como no sistema binário, ou 0 a 9 no sistema decimal, mas antes de 0 a F. Um número hexadecimal consiste em quatro bits. A tabela ao lado mostra os números binários e os correspondentes hexadecimais. Os números binários são convertidos em hexadecimais lendo os bits ao mesmo tempo, começando pelo de mais baixo nível. Os níveis são lidos da direita para a esquerda e os seus números começam em 0. Por exemplo, o bit de nível mais baixo (nível 0) é 0, e o de nível mais alto é 1. No exemplo anterior, o valor binário do registo é 01100001, o que corresponde a 61 em hexadecimal sendo escrito como 0x61 (zero à esquerda) em C.
Line 45: Line 45:
 [{{  :images:logic:logic_all_4.png?550  |Negação, Multiplicação lógica, Adição lógica and disjunção exclusiva  }}] [{{  :images:logic:logic_all_4.png?550  |Negação, Multiplicação lógica, Adição lógica and disjunção exclusiva  }}]
  
-~~PB~~+<pagebreak>
  
   * ** Negação / Inversão** \\ A negação altera o valor do bit para o oposto, 0 torna-se 1 e vice-versa. Em C, a negação é representada por “~”.   * ** Negação / Inversão** \\ A negação altera o valor do bit para o oposto, 0 torna-se 1 e vice-versa. Em C, a negação é representada por “~”.
Line 58: Line 58:
 ==== Definindo um único bit positivo ==== ==== Definindo um único bit positivo ====
  
-[{{  :images:logic:op_bit_set.png?230|Setting a single bit high}}]+[{{  :images:logic:op_bit_set.png?230| Definir um único bit como positivo}}]
  
 Para definir apenas um bit num registo para positivo (1) deve ser operada uma adição lógica. Um dos operandos da operação deve ser o registo em conjunto com outro número binário, onde o único bit positivo é aquele que se pretende ver ligado no registo. O número binário é denominado de mascara de bits. Abaixo segue o código em C para a operação em causa: Para definir apenas um bit num registo para positivo (1) deve ser operada uma adição lógica. Um dos operandos da operação deve ser o registo em conjunto com outro número binário, onde o único bit positivo é aquele que se pretende ver ligado no registo. O número binário é denominado de mascara de bits. Abaixo segue o código em C para a operação em causa:
Line 73: Line 73:
 ==== Definindo um único bit negativo ==== ==== Definindo um único bit negativo ====
  
-[{{  :images:logic:op_bit_clear.png?229|Setting a single bit low}}]+[{{  :images:logic:op_bit_clear.png?229|Definir um único bit como baixo}}]
  
 Para definir apenas um bit num registo para negativo (0) deve ser operada uma multiplicação lógica. Um dos operandos da operação deve o registo e outro a mascara de bits, na qual o único bit negativo é o que precisa de ser definido como negativo. A seguir segue o código em C da operação em causa: Para definir apenas um bit num registo para negativo (0) deve ser operada uma multiplicação lógica. Um dos operandos da operação deve o registo e outro a mascara de bits, na qual o único bit negativo é o que precisa de ser definido como negativo. A seguir segue o código em C da operação em causa:
Line 86: Line 86:
 </code> </code>
  
-~~PB~~+<pagebreak>
  
 ==== Inverter um só bit ==== ==== Inverter um só bit ====
  
-[{{  :images:logic:op_bit_invert.png?229|Inverting a single bit}}]+[{{  :images:logic:op_bit_invert.png?229|Inverter um só bit}}]
  
 Para inverter um ou mais bits num registo é necessário recorrer a uma disjunção exclusiva. Um dos operandos na operação deve ser o registo e outro a mascara de bits, onde o único bit positivo é aquele que precisa de ser invertido no registo. Segue-se o exemplo de código em C: Para inverter um ou mais bits num registo é necessário recorrer a uma disjunção exclusiva. Um dos operandos na operação deve ser o registo e outro a mascara de bits, onde o único bit positivo é aquele que precisa de ser invertido no registo. Segue-se o exemplo de código em C:
Line 105: Line 105:
 ==== Invertendo todo o registo ==== ==== Invertendo todo o registo ====
  
-[{{  :images:logic:op_reg_invert.png?229|Inverting all bits}}]+[{{  :images:logic:op_reg_invert.png?229|Invertendo todo os bits}}]
  
 Para inverter todos os bits num registo, deve ser usada a negação. Esta operação é unitária, oque significa que recorre apenas um operando. Segue um exemplo de código C para tal operação: Para inverter todos os bits num registo, deve ser usada a negação. Esta operação é unitária, oque significa que recorre apenas um operando. Segue um exemplo de código C para tal operação:
Line 119: Line 119:
 ==== Ler um valor de um único bit ==== ==== Ler um valor de um único bit ====
  
-[{{  :images:logic:op_bit_get.png?229|Reading the value of a bit}}]+[{{  :images:logic:op_bit_get.png?229|Ler um valor de um único bit}}]
  
 Para ler um ou mais valores de um registo na mesma operação é necessário recorrer a mesma operação para a definição de um bit positivo – multiplicação logica. Um dos operandos deverá ser o registo e o outro a mascara de bits, onde o único bit positivo é aquele que precisa de ser lido do registo. A seguir apresenta-se um exemplo de código em C para realizar esta operação: Para ler um ou mais valores de um registo na mesma operação é necessário recorrer a mesma operação para a definição de um bit positivo – multiplicação logica. Um dos operandos deverá ser o registo e o outro a mascara de bits, onde o único bit positivo é aquele que precisa de ser lido do registo. A seguir apresenta-se um exemplo de código em C para realizar esta operação:
Line 131: Line 131:
 </code> </code>
  
-~~PB~~+<pagebreak>
  
 ==== Deslocar um bit ==== ==== Deslocar um bit ====
Line 139: Line 139:
  
  
-[{{  :images:logic:op_bit_shift_left.png?241|Shift left}}]+[{{  :images:logic:op_bit_shift_left.png?241|Deslocar à esquerda}}]
  
 A imagem na direita mostra uma operação de deslocamento à esquerda. No entanto o deslocamento de bits não é uma operação lógica e não tem símbolo correspondente, sendo identificada em C por «”. O deslocamento à esquerda é usado para transformar um nível de bits numa mascara de bits. Por exemplo, para obter a mascara do 6º bit (NB! Nível 5), o numero 1 tem que ser deslocado à esquerda 5 vezes. Segue-se um exemplo da operação em C: A imagem na direita mostra uma operação de deslocamento à esquerda. No entanto o deslocamento de bits não é uma operação lógica e não tem símbolo correspondente, sendo identificada em C por «”. O deslocamento à esquerda é usado para transformar um nível de bits numa mascara de bits. Por exemplo, para obter a mascara do 6º bit (NB! Nível 5), o numero 1 tem que ser deslocado à esquerda 5 vezes. Segue-se um exemplo da operação em C:
Line 150: Line 150:
 </code> </code>
  
-[{{  :images:logic:op_bit_shift_right.png?241|Shift right}}]+[{{  :images:logic:op_bit_shift_right.png?241|Deslocar à direita}}]
  
 A operação de deslocamento à direita funciona de forma semelhante ao deslocamento à esquerda. É representada em C como “»”. O deslocamento à direita é usado para obter um valor lógico de um único bit. Vamos supor que o bit a ser lido não é o de mais baixo nível, mas por exemplo de nível 5. Neste caso, o resultado poderá ser tanto 0x20 como 0x00, mas por vezes o resultado 1 ou 0 é necessário o que implica deslocamento à direita. Segue-se um exemplo de código em C para o efeito: A operação de deslocamento à direita funciona de forma semelhante ao deslocamento à esquerda. É representada em C como “»”. O deslocamento à direita é usado para obter um valor lógico de um único bit. Vamos supor que o bit a ser lido não é o de mais baixo nível, mas por exemplo de nível 5. Neste caso, o resultado poderá ser tanto 0x20 como 0x00, mas por vezes o resultado 1 ou 0 é necessário o que implica deslocamento à direita. Segue-se um exemplo de código em C para o efeito:
Line 170: Line 170:
 Para na realidade fazer algo nos registos do microcontrolador AVR, precisamos de saber como usar esse microcontrolador em particular. Cada microcontrolador vem dotado de vários folhas de dados (datasheets), as quais descrevem toda a estrutura e funcionalidades do microcontrolador. A folha de dados também escreve os registos. A seguir analisamos um exemplo da descrição dos registos de um microcontrolador AVR. Para na realidade fazer algo nos registos do microcontrolador AVR, precisamos de saber como usar esse microcontrolador em particular. Cada microcontrolador vem dotado de vários folhas de dados (datasheets), as quais descrevem toda a estrutura e funcionalidades do microcontrolador. A folha de dados também escreve os registos. A seguir analisamos um exemplo da descrição dos registos de um microcontrolador AVR.
  
-[{{  :images:logic:avr_example_register.png?580  |One of AVRs registers from its datasheet}}]+[{{  :images:logic:avr_example_register.png?580  |Um dos registos AVRs a partir da folha de dados}}]
  
 A imagem mostra o registo UCSRnA do microcontrolador ATmega128, nomenclatura que significa “USART Control and Status Register A”. O registo é usado para configurar o modulo do AVR denominado USART e ler os seus estados. Todos os nomes dos registos do AVR são identificados por caracteres em maiúsculas, mas como poderá verificar, os nomes de registo incluem também algumas letras minúsculas. Uma letra minúscula é usada para denotar o índex do modulo. Uma vez que o ATmega128 tem 2 módulos muito semelhantes, e para evitar descreve-los duas vezes, sendo descritos apenas uma vez devendo neste caso o n ser lido como 0 ou 1. Neste sentido, o ATmega128 tem dois registos UCSR0A e UCSR1A. A imagem mostra o registo UCSRnA do microcontrolador ATmega128, nomenclatura que significa “USART Control and Status Register A”. O registo é usado para configurar o modulo do AVR denominado USART e ler os seus estados. Todos os nomes dos registos do AVR são identificados por caracteres em maiúsculas, mas como poderá verificar, os nomes de registo incluem também algumas letras minúsculas. Uma letra minúscula é usada para denotar o índex do modulo. Uma vez que o ATmega128 tem 2 módulos muito semelhantes, e para evitar descreve-los duas vezes, sendo descritos apenas uma vez devendo neste caso o n ser lido como 0 ou 1. Neste sentido, o ATmega128 tem dois registos UCSR0A e UCSR1A.
pt/avr/registers.1448039653.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0