51
AAAA SEL SEL–0629 0629 Aplicação de Aplicação de Aplicação de Aplicação de Microprocessadores I Microprocessadores I Aula 4 Aula 4 Operações Lógicas e Operações Lógicas e A it éti A it éti Aritméticas Aritméticas Marcelo Andrade da Costa Vieira AAAA

Aula 4 - Operacoes Logicas e Aritmeticas

Embed Size (px)

Citation preview

AAAASELSEL––06290629

Aplicação deAplicação deAplicação de Aplicação de Microprocessadores IMicroprocessadores I

Aula 4Aula 4Operações Lógicas e Operações Lógicas e

A it étiA it étiAritméticasAritméticas

Marcelo Andrade da Costa Vieira

AAAA

Operações LógicasOperações Lógicas

AA

Operações LógicasOperações Lógicas

Existem 5 tipos de operações lógicas nosmicrocontroladores PIC:microcontroladores PIC:

AND : “E” Lógico;OR : “OU” Lógico;OR : OU Lógico;XOR : “OU” Exclusivo;COMP : Complemento;SWAP : Inversão.SWAP : Inversão.

AA

ANDAND

Byte1 1 0 1 0 0 0 1 0Byte2 1 1 0 0 1 0 1 0AND 1 0 0 0 0 0 1 0

“E” Lógico entre todos os bits do registrador bit a bitE Lógico entre todos os bits do registrador, bit a bit.

AA

ANDAND

A B AND0 0 0 Criar uma “máscara”:0 0 0

0 1 0

Criar uma máscara :

1: “Copia” o valor do bit1 0 0

1: Copia o valor do bit

0: “Reseta” o valor do bit1 1 1

0: Reseta o valor do bit

AA

ANDAND

Byte1 1 0 1 1 0 0 1 0Byte2 1 1 1 1 0 0 0 0AND 1 0 1 1 0 0 0 0

“Máscara”Máscara

AA

ANDAND

1 ANDLW k “E” ló i l li l k l1. ANDLW k : “E” lógico entre o valor literal k e o valorcontido no registrador w, guardando o resultado em w(w ← k AND w);

2. ANDWF f,d : “E” lógico entre o valor de w e oregistrador f guardando o resultado no destino (w ouregistrador f, guardando o resultado no destino (w ouf) (d ← f AND w);

AA

ANDWF e ANDLWANDWF e ANDLW

Garantir que um número seja menor que 15

MOVLW B ‘00001111’ANDWF NUM_1,F

Ou

MOVF NUM_1,WANDLW B ‘00001111’MOVWF NUM_1

AA

OROR

Byte1 1 0 1 0 0 0 1 0Byte2 1 1 0 0 1 0 1 0OR 1 1 1 0 1 0 1 0

“OU” Lógico entre todos os bits do registrador bit a bitOU Lógico entre todos os bits do registrador, bit a bit.

AA

OROR

A B OR0 0 0 Criar uma “máscara”:0 0 0

0 1 1

Criar uma máscara :

0: “Copia” o valor do bit1 0 1

0: Copia o valor do bit

1: “Seta” o valor do bit1 1 1

1: Seta o valor do bit

AA

OROR

Byte1 1 0 1 0 0 0 1 0Byte2 0 0 0 0 1 1 1 1AND 1 0 1 0 1 1 1 1

“Máscara”Máscara

AA

OROR

1 IORLW k “OU” ló i l li l k l1. IORLW k : “OU” lógico entre o valor literal k e o valorcontido no registrador w, guardando o resultado em w(w ← k OR w);

2. IORWF f,d : “OU” lógico entre o valor de w e oregistrador f guardando o resultado no destino (w ouregistrador f, guardando o resultado no destino (w ouf) (d ← f OR w);

AA

IORWF e IORLWIORWF e IORLW

Garantir que um número seja maior que 15

MOVLW B ‘00010000’IORWF NUM_1,F

Ou

MOVF NUM_1,WIORLW B ‘00010000’MOVWF NUM_1

AA

XORXOR

Byte1 1 0 1 0 0 0 1 1Byte2 1 1 0 0 1 0 1 0XOR 0 1 1 0 1 0 0 1

“OU” Exclusivo entre todos os bits do registrador bit a bitOU Exclusivo entre todos os bits do registrador, bit a bit.

Bits Iguais 0Bits Iguais – 0Bits Diferentes - 1

AA

XORXOR

Criar uma “máscara” do A B XOR0 0 0

Criar uma máscara do tipo “inversor controlado”:

0 0 0

0 1 10: “Copia” o valor do bit1: “Inverte” o valor do bit

1 0 1“Comparação” bit a bit

1 1 0Comparação bit a bit

0: Bits iguaisg1: Bits diferentes

AA

XORXOR

Byte1 1 0 1 1 0 0 1 0Byte2 1 1 1 1 0 0 0 0XOR 0 1 0 0 0 0 1 0

“Máscara”Máscara

AA

XORXOR

Byte1 1 0 1 1 0 0 1 0Byte2 1 1 1 1 0 0 0 0XOR 0 1 0 0 0 0 1 0

“Comparação”Comparação

AA

XORXOR

1 XORLW k “OU” E l i l li l k1. XORLW k : “OU” Exclusivo entre o valor literal k e ovalor contido no registrador w, guardando o resultadoem w (w ← k XOR w);

2. XORWF f,d : “OU” Exclusivo entre o valor de w e oregistrador f guardando o resultado no destino (w ouregistrador f, guardando o resultado no destino (w ouf) (d ← f XOR w);

AA

XORWFXORWFChamar uma rotina 10 vezes – Contador

Se a operação “OU” Exclusivo resultar em Zero, é porque os valores são iguais.

CLRF CONTADORLOOPCALL ROTINAINCF CONTADOR FINCF CONTADOR,FMOVLW .10XORWF CONTADOR WXORWF CONTADOR,WBTFSS STATUS,ZGOTO LOOPGOTO LOOPFIM

AA

COMFCOMF

Byte 0 0 0 1 0 0 1 0 18COMF 1 1 1 0 1 1 0 1

18

237

Inverte o valor de todos os bits do registrador, bit a bit;

Cálculo do complemento do byte: (COMF = 255 – Byte)

Cálculo do complemento de 2 do byte: (ADDLW .1)

AA

COMFCOMF

COMF f,d : Complemento do valor do registrador f,guardando o resultado no destino (w ou f) (d ← COMP f );guardando o resultado no destino (w ou f) (d ← COMP f );

AA

SWAPSWAP

Byte 0 1 1 0 1 1 0 0SWAP 1 1 0 0 0 1 1 0

Inverte os 4 bits (nibble) mais significativos com os 4 bits menos significativos

AA

SWAPSWAP

SWAPF f,d : Inversão dos 4 bits do valor do registrador f,guardando o resultado no destino (w ou f) (d ← COMP f );guardando o resultado no destino (w ou f) (d ← COMP f );

AA

Operações AritméticasOperações Aritméticas

AA

ADIÇÃOADIÇÃO• Existem 4 comandos para adição no PIC:

1.INCF f,d : Incrementa uma unidade o registrador f, guardandoo resultado no destino (w ou f) (d ← f + 1);

2.INCFSZ f,d : Incrementa uma unidade o registrador f, e pulauma linha se o resultado for zero (d ← f + 1);uma linha se o resultado for zero (d ← f + 1);

3 ADDWF f d : Soma o valor de W com o registrador f3.ADDWF f,d : Soma o valor de W com o registrador f,guardando o resultado no destino (w ou f) (d ← f + w);

4.ADDLW k: Soma o valor literal k ao W, guardando o resultadoem w (w ← k + w);

AA

INCFINCF

Chamar uma rotina 4 vezes

CLRF CONTADORLOOPCALL ROTINACALL ROTINAINCF CONTADOR,FBTFSS CONTADOR,2GOTO LOOPFIM

AA

INCFSZINCFSZ

Chamar uma rotina 4 vezes

MOVLW D‘252’MOVLW D 252MOVWF CONTADORCALL ROTINAINCFSZ CONTADOR FINCFSZ CONTADOR,FGOTO $-2FIM

AA

INCFSZINCFSZ

Essa instrução afeta o registrador STATUS

Carry – STATUS, 0 ou STATUS, Cy , ,- Vai para “1” se o registrador “estourar”

Zero – STATUS, 2 ou STATUS, ZZero STATUS, 2 ou STATUS, Z- Vai para “1” se o registrador “zerar”

AA

AA

ADDWF e ADDLWADDWF e ADDLWSomar dois números

MOVLW .10MOVWF NUM 1_MOVLW .20MOVWF NUM_2CLRF RESULTMOVF NUM_1,W ; W ← 10ADDWF NUM2,W ;W ← 10 + 20ADDLW .5 ;W ← 30 + 5MOVWF RESULT RESULT 35MOVWF RESULT ; RESULT ← 35FIM

AA

E se a soma for maior que 255?E se a soma for maior que 255?

NUM1 100 1 1 0 0 1 0 0 0Carry

NUM1 100 1 1 0 0 1 0 0 0NUM2 200 0 1 1 0 0 1 0 0

RESULT 300 1 0 0 1 0 1 1 0 0 44

255 + 255 = 510 (9 bits no máximo)255 + 255 = 510 (9 bits no máximo)255 + 255 + 255 = 765 (10 bits no máximo)

Utiliza 2 bytes para guardar o resultadoA cada número somado incrementa o carry uma vez!

AAA cada número somado, incrementa o carry uma vez!

E se a soma for maior que 255?E se a soma for maior que 255?Utilizar o Carry!

MOVLW .100MOVWF NUM_1MOVLW 200MOVLW .200MOVWF NUM_2CLRF RESULT_LSBCLRF RESULT MSBCLRF RESULT_MSBMOVF NUM_1,W ; W ← 100ADDWF NUM2,W ;W ← 100 + 200, ;BTFSC STATUS,C ; testa o carryINCF RESULT_MSB,FMOVWF RESULT LSBMOVWF RESULT_LSBFIM

AA

SUBTRAÇÃOSUBTRAÇÃO• Existem 4 comandos para subtração no PIC:

1.DECF f,d : Decrementa uma unidade o registrador f,guardando o resultado no destino (w ou f) (d ← f - 1);

2.DECFSZ f,d : Decrementa uma unidade o registrador f, e pulauma linha se o resultado for zero (d ← f 1);uma linha se o resultado for zero (d ← f - 1);

3 SUBWF f d : Subtrai o valor de W do registrador f guardando3.SUBWF f,d : Subtrai o valor de W do registrador f, guardandoo resultado no destino (w ou f) (d ← f - w);

4.SUBLW k: Subtrai o valor de W do literal k, guardando oresultado em w (w ← k - w);

AA

DECFSZDECFSZ

Chamar uma rotina 10 vezes

MOVLW .10MOVWF CONTADORLOOPLOOPCALL ROTINADECFSZ CONTADOR,FGOTO LOOPFIM

AA

SUBWF e SUBLWSUBWF e SUBLWSubtrair dois números quaisquer

MOVLW 12MOVLW .12MOVWF NUM1MOVLW 20MOVLW .20MOVWF NUM2CLRF RESULTCLRF RESULTMOVF NUM1,W ; W ← 12SUBWF NUM2 W ;W ← 20 12 = 8 (NUM2 W)SUBWF NUM2,W ;W ← 20 – 12 = 8 (NUM2 – W)SUBLW .10 ; W ← 10 – 8 (k – W)MOVWF RESULT; RESULT ← 2MOVWF RESULT; RESULT ← 2FIM

AA

DECFSZDECFSZA subtração afeta o carry (STATUS) de modo inverso à

operação de adição!operação de adição!

ÃADIÇÃO: n° positivo: C = 0zero: C = 1 e Z = 1 (“estouro”)zero: C 1 e Z 1 ( estouro )

ÃSUBTRAÇÃO: n° positivo: C = 1zero: C = 1 e Z = 1zero: C 1 e Z 1

n° negativo: C = 0 (“estouro”)

AA

E se o resultado for negativo?E se o resultado for negativo?

NUM1 160 1 0 1 0 0 0 0 0Carry

NUM1 160 1 0 1 0 0 0 0 0NUM2 200 1 1 0 0 1 0 0 0

RESULT -40 0 1 1 0 1 1 0 0 0 216

256 216 = 40 (complemento para 256) = Complemento de 2256 - 216 = 40 (complemento para 256) = Complemento de 2

Utiliza 1 bit (flag) para guardar o sinalUtiliza 1 bit (flag) para guardar o sinal

AA

SUBWF e SUBLWSUBWF e SUBLWSubtrair dois números quaisquer

CLRF RESULTCLRF RESULTMOVF NUM_1,W ;W ← NUM_1SUBWF NUM2 W ;W ← NUM 2 – NUM 1SUBWF NUM2,W ;W ← NUM_2 NUM_1BTFSS STATUS,C ;TESTA O CARRY (NÚMERO NEGATIVO → C = 0)GOTO NEGATIVOMOVWF RESULT ; SALVA O RESULTADO POSITIVOBCF NEG ; LIMPA O FLAG DE SINAL NEGATIVOGOTO FIMGOTO FIMNEGATIVOSUBLW 0 ; W ←256 – WSUBLW .0 ; W ←256 WMOVWF RESULT ; SALVA O RESULTADO NEGATIVOBSF NEG ; SETA O FLAG DE SINAL NEGATIVO

AAFIM

Rotacionando o ByteRotacionando o Byte

• RLF f,d – rotacionar o byte à esquerda

• RRF f,d – rotacionar o byte à direita

Cuidado com o CARRY!!

AA

MULTIPLICAR e DIVIDIRMULTIPLICAR e DIVIDIR

• Só é válido para potências de 2 (2-4-8-16-32):

– RLF f,d : Rotaciona o bit à esquerda (left) – multiplica por , q ( ) p p2 cada vez que o bit é rotacionado;

– RRF f,d : Rotaciona o bit à direita (right) – divide por 2 cada vez que o bit é rotacionado;cada vez que o bit é rotacionado;

Deve-se garantir que o o bit que entra na posição menos significativa seja zero!

AA

Rotacionando o ByteRotacionando o Byte

• O PIC rotaciona um número de 9 bits!

– 8 bits do registrador F + Bit Carry (STATUS,C)

AA

Multiplicar um número por 4MOVLW 200MOVLW .200MOVWF NUM_1CLRF RESULT LSBCLRF RESULT_LSBCLRF RESULT_MSBBCF STATUS, C ; LIMPA O CARRYRLF NUM_1,F ; MULTIPLICA POR 2 (400 = 200 (11001000) X 2)RLF RESULT_MSB,F ;ROTACIONA O BYTE MAIS SIGNIFICATIVO PARA “PEGAR” O BIT DO CARRY (400 = 110010000)O BIT DO CARRY (400 = 110010000)RLF NUM_1,F ; MULTIPLICA POR 2 NOVAMENTE (800 = 200 X 4)RLF RESULT MSB,F ; “PEGA” O CARRY (800 = 1100100000)_ , ; ( )MOVF NUM_1, WMOVWF RESULT_LSBFIM

AA

RETLWRETLW

AA

Tabela de ConversãoTabela de ConversãoRotina de conversão: (NUM ← NUM * 3 + 2)

CONVERSAOMOVF NUM,WADDWF PCL FADDWF PCL,FRETLW .2 ; NUM = 0 → Retorna 2RETLW .5 ; NUM = 1 → Retorna 5RETLW 8 ; NUM 2 R t 8RETLW .8 ; NUM = 2 → Retorna 8RETLW .11 ; NUM = 3 → Retorna 11

AA

Endereçamento IndiretoEndereçamento Indireto

AA

EndereçamentoEndereçamento

- Endereçamento Direto: o endereço do dado está naprópria instrução.p p ç

- Endereçamento Indireto: o endereço do dado está emum registrador de uso específico (Ponteiro).

AA

AA

Acesso Indireto à MemóriaAcesso Indireto à Memória

Endereçamento Indireto: o endereço do dado está em umregistrador de uso específico (SFR).g p ( )

FSR Contém o endereço que o ponteiro deverá apontar- FSR – Contém o endereço que o ponteiro deverá apontar.Equivalente ao DPTR do 8051

- INDF – Ponteiro (não é fisicamente um registrador!)

AA

AA

Acesso Indireto à MemóriaAcesso Indireto à MemóriaRotina para limpar um bloco de endereços da memória RAM de 0x20 a 0x2F

LIMPAMOVLW 0x20MOVWF FSR ; Inicia o ponteiro com o endereço 0x20hLOOPLOOPCLRF INDF; na verdade está “limpando” o endereço dado que está no

endereço indicado no ponteiro FSRendereço indicado no ponteiro FSRMOVLW 0X2FXORWF FSR,WBTFSC STATUS,ZRETURNINCF FSR,FGOTO LOOP

AAFIM

FIM

AA