This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| pt:avr:registers [2015/11/20 17:14] – artica | pt:avr:registers [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 5: | Line 5: | ||
| ===== Essencial ===== | ===== Essencial ===== | ||
| - | [{{ : | + | [{{ : |
| 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, | 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, | ||
| 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 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, | ||
| - | [{{ : | + | [{{ : |
| 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, | 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, | ||
| 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. | ||
| - | [{{ : | + | [{{ : |
| No sistema hexadecimal, | No sistema hexadecimal, | ||
| Line 45: | Line 45: | ||
| [{{ : | [{{ : | ||
| - | ~~PB~~ | + | < |
| * ** 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 ==== | ||
| - | [{{ : | + | [{{ : |
| 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 ==== | ||
| - | [{{ : | + | [{{ : |
| 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: | ||
| </ | </ | ||
| - | ~~PB~~ | + | < |
| ==== Inverter um só bit ==== | ==== 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 ==== | ||
| - | [{{ : | + | [{{ : |
| 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 ==== | ||
| - | [{{ : | + | [{{ : |
| 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: | ||
| </ | </ | ||
| - | ~~PB~~ | + | < |
| ==== Deslocar um bit ==== | ==== Deslocar um bit ==== | ||
| Line 139: | Line 139: | ||
| - | [{{ : | + | [{{ : |
| 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, | 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, | ||
| Line 150: | Line 150: | ||
| </ | </ | ||
| - | [{{ : | + | [{{ : |
| 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), | 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), | ||
| - | [{{ : | + | [{{ : |
| 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, | 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, | ||