quarta-feira, 6 de janeiro de 2010

Um pouco de Instruções lógicas.

Usando instruções lógica

Para construir os programas dos nossos projetos vamos primeiro criar um conhecimento base. São apenas alguns conceitos que vamos usar na criação dos códigos dos programas, que vou ficar fazendo referências, assim se precisarmos relembrar esses elementos, poderemos ver nestes posts.

Embora essas instruções sejam mais 'aritiméticas' elas tambem são instruções lógicas e podem ser usadas em funções mais simples do que o calculo matemático, veja agora alguns desses usos.

Considerando os PIC da familia Média ( Middle Range ) podemos contar com as algumas instruções lógicas muito poderosas para a construção de um código dinâmico e eficiente:



ANDWF Executa um AND lógico entre o conteúdo de F e W (Registro de trabalho).
IORWF Executa um Inclusive OR lógico entre o conteúdo de F e W (Registro de trabalho).
XORWF Executa um Exclusive OR lógico entre o conteúdo de F e W (Registro de trabalho).
ANDLW Executa um AND lógico entre o conteúdo de W (Registro de trabalho) e uma literal de 8 bits; Observe que a operação lógica ocorre bit a bit por isso a literal DEVE ter oito bits de largura
IORLW Executa um Inclusive OR lógico entre o conteúdo de W (Registro de trabalho) e uma literal de 8 bits; Observe que a operação lógica ocorre bit a bit por isso a literal DEVE ter oito bits de largura
XORLF Executa um Exclusive OR lógico entre o conteúdo de W (Registro de trabalho) e uma literal de 8 bits; Observe que a operação lógica ocorre bit a bit por isso a literal DEVE ter oito bits de largura

Entendendo:

Todas as instruções que envolvem F (FILE) e W requerem a indicação de um registro da RAM e do destino da operação. Se o destino for 0 (zero) o resultado fica em W. Se destino for igual a 1, o resultado é gravado na possição da memoria indicado em FILE.
A Sintaxe de todas elas é:

instrução FILE, destino

Exemplo:
andwf reg1,0 ;essa instrução faz um AND lógico com o conteúdo
                 ;de W e do reg1 (endereço da RAM) com resultado em W.
movwf reg1 ;essa instrução grava o conteúdo de W em reg1.
xorwf reg1,1 ;essa instrução faz um XOR (exclusive OR) entre o
;conteúdo de W e reg1 e grava o resultado em reg1.

Todas as instruções que envolvem literal deve ter uma literal de 8 bits, e o resultado da operação é gravado em W e afeta os flags de Status do PIC.

Exemplo:
andlw b'00001111' ; essa instrução faz um AND lógico entra W

                     ; e a literal binária 00001111

Usando:

Os principais usos das instruções lógicas é a determinação de um valor e a criação de mascaras para dados. Vejamos alguns exemplos, supondo que o valor de W seja 0xE3:

  • AND

a resposta de uma função AND será 1 se as duas variaveis testadas tambem forem 1, seguindo a tabela verdade:


A * B Y
0 0 0
0 1 0
1 0 0
1 1 1

Pela tabela verdade temos que todo bit que sofrer a operação AND com um valor 1 não será alterado, pois os resultados possiveis são; se o bit for zero, 0 * 1 = 0 e se o bit for 1, 1 * 1 = 1.
Mas quaquer bit que sofrer a operação AND com um valor 0, será = 0, pois os resultados possiveis são: para bit 0, 0 * 0 = 0, e para bit 1, 1 * 0 = 0.

Isso pode ser muito util quando queremos isolar um nibble, ou um valor especifico, veja o exemplo:
andlw  0xF0  ; faz um AND entre o valor de W (oxE3) e a literal F0.
; Com essa operação W fica assim:
; W = 1110 0011 (0xE3)
; K = 1111 0000 (0xF0)
; R = 1110 0000 (0xE0), o novo valor de W é E0,
; zeramos o nibble menos significativo.

O mesmo pode ser feito com o nibble mais significativo, bastaria usar uma literal 0x0F e o valor de W mudaria para 0x03.
  • IOR Inclusive OR

a resposta de uma função OR inclusiva será 1 se ao menos uma das variáveis testada for 1, seguindo a tabela verdade:


A * B Y
0 0 0
0 1 1
1 0 1
1 1 1

Um dos usos desta operação é quando queremos setar um bit, sem afetar os outros. Veja que se o bit for testado contra 0, vai manter seu valor, pois os resultados possiveis são: se bit = 0, 0 + 0 = 0, e se bit = 1, 1 + 0 = 1. Mas se o bit for testado contra 1, ele será setado, pois os resultados possiveis são: se bit = 0, 0 + 1 = 1, e se bit = 1. 1 + 1 = 1. Veja um exemplo:

iorlw  0xF0  ; faz um IOR entre o valor de W (oxE3) e a literal F0.
; Com essa operação W fica assim:
; W = 1110 0011 (0xE3)
; K = 1111 0000 (0xF0)
; R = 1111 0011 (0xF3), o novo valor de W é F3,
; tudo que fizemos foi setar o bit 5, mantendo
; os outros inalterados.

  • XOR Exclusive OR

a resposta de uma função OR exclusiva será 1 se, e somente se uma das variaveis testada for 1, seguindo a tabela verdade:

A  *  B  Y
0 0 0
0 1 1
1 0 1
1 1 0
Um dos usos desta operação é a determinação do valor guardado num registro. Veja que se o bit for testado contra o seu proprio valor a resposta é zero, mas se testado contra um valor diferente o resultado será 1. Assim podemos usar essa instrução para determinar o valor do registro, testando o bit Z (bit zero) do PIC. Veja um exemplo, nele o valor de reg1 é 0xE3.
xorlw  0xF0  ; faz um XOR entre o valor de W (oxE3) e a literal F0.
; Com essa operação W fica assim:
; W = 1110 0011 (0xE3)
; K = 1111 0000 (0xF0)
; R = 0001 0011 (0x13), o novo valor de W é 13, e bit Z=0
movf reg1,0 ; move valor de reg1 para w
xorlw 0xE3 ;faz um XOR entre o valor de W (oxE3) e a literal E3.
; Com essa operação W fica assim:
; W = 1110 0011 (0xE3)
; K = 1110 0011 (0xE3)
; R = 0000 0000 (0x00), o novo valor de W é 00, setando
; o bit Z.
Assim podemos fazer sucessivas operações xorlw, testando contra valores diferente e quando testarmos contra o mesmo valor do registro, o Bit Zero será setado. Tudo que temos que fazer é ficar verificando o bit Zero após cada operação XOR.

Continue Lendo >

terça-feira, 5 de janeiro de 2010

Inicio

Tudo tem um começo...


...E se você chegou aqui, então começou a estudar eletronica, programação ou entrou na grande fusão destes dois mundos: os MCU's ' MicroControler Unit
Esse blog vai, ao longo do tempo, expôr elementos de eletronica, principalmente sua determinações matematicas;
Tambem iremos passear pela programação, em especial Assembly;
E iremos viajar pelo Tutorial Assembly PIC, um antigo projeto meu que estou devendo a comunidade "Clube do Hardware'

.

os arquivos preliminares serão distribuidos por este canal. Estou a procura de voluntários para redigir alguns topicos do tutorial



Os arquivos finais (os 4 volumes do tutorial) serão distribuidos gratuitamente por este Blog e pelo post oficial do tutorial "Forum do clube do Hardwawe'



Até a proxima então =]

Continue Lendo >