Parte 2 Instruções de ADD, SUB e DECFnivaldo/Microcontroladores/Aulas/... · Instruções de ADD,...

15
Microcontrolador PIC 16F877 Parte 2 Instruções de ADD, SUB e DECF

Transcript of Parte 2 Instruções de ADD, SUB e DECFnivaldo/Microcontroladores/Aulas/... · Instruções de ADD,...

Microcontrolador PIC 16F877

Parte 2

Instruções de ADD, SUB e DECF

Conjunto de Instruções do PIC16F877 � Instruções Aritméticas (ADD) :

ADDLW kDescrição: Soma uma constante k é somada com W Operação: w = w + kLimites: 0 a 255Nro de Ciclos: 1Registros afetados: C, DC e Z (STATUS)Exemplo:

MOVLW .10 � W = 10ADDLW .19 � w = 10 + 19 = 29

EX:

Sabendo que media vale 10 implemente a seguinte equ ação

Valor = 3 + media

Conjunto de Instruções do PIC16F877

EX:

Sabendo que media vale 10 implemente a seguinte equ ação

Valor = 3 + media

MOVLW .10 ; w = 10

MOVWF media ; media = w = 10 (está na memória)

ADDLW .3 ; w = w + 3 = 10 + 3 = 13

MOVWF Valor

Conjunto de Instruções do PIC16F877 � Instruções Aritméticas (ADD) :

ADDWF f,d

Descrição: Valor de W é somado com o valor de f e é armazenado em d.Se d=0 resultado em WSe d=1 resultado em f

Se d for omitido assume-se 1 como valor default. Operação: d = w + fLimites: 0 a 127Nro de Ciclos: 1Registros afetados: C, DC e Z (STATUS)Exemplo:

MOVLW .10 � w = 10MOVWF AUX � AUX = w = 10MOVLW .19 � w = 19ADDWF AUX,0 � w = w + AUX = 19 + 10 = 29ADDWF AUX,1 � AUX = w + AUX = 29 + 10 = 39

Microcontrolador PIC 16F877Registradores de funRegistradores de funçção Especialão Especial

STATUS (03h, 83h, 103h e 183h) mostra o estado a ULA

Bit7 – Seleciona banco de memória p/ endereçamento indiretoBIT6..5 – Selecionam banco de memória para endereçamento direto

00 – Bank0 01 – Bank1 10 – Bank2 11 – Bank 3Bit4 – Indica que houve um estouro do Watchdog timer (WDT)

1 = depois da energização 0 = ocorreu estouro do WDTBit3 – 0 = indica que está no modo de baixo consumo SLEEPBit2 – Flag de zero Z

0 = a última operação realizada na ULA não foi zero1 = a última operação realizada na ULA foi zero

Bit1 – Carry/Borrow ou estouro de nibble na ultima operação da ULA. 1 = indica que houve estouro de nibble (bit3)

Bit0 – Carry ou estouro de byte na ultima operação da ULA.1 = indica que houve estouro de byte (bit 7)

Conjunto de Instruções do PIC16F877 � Exemplo de Instruções de dados (MOV e ADD):

Exemplo:

Código em C

NA = 3;

NB = 6;

NC = 4;

Soma = NA+NB+NC

Código em Assembler

MOVLW .3 � w = 3

MOVWF NA � NA = w

MOVLW .6 � w = 6

MOVWF NB � NB = w

MOVLW .4 � w = 4

MOVWF NC � NC = 4

MOVF NA,w � w = NA (3)

ADDWF NB,w � w = w + NB (w = 3+6 = 9)

ADDWF NC,w � w = w + NC (w = 9+4 = 13)

MOVWF SOMA � SOMA = w (SOMA = 13)

Conjunto de Instruções do PIC16F877 � Exemplo de Instruções de dados (MOV e ADD):

Exercício : Escrever o seguinte código

NA = 2

NB = 3

NC = 7

ND = 1

Soma = NA + NC

Soma2 = NB + ND

Total = Soma + Soma2

Conjunto de Instruções do PIC16F877 � Instruções Aritméticas (SUB) :

SUBLW kDescrição: Subtrai o W de uma constante k Operação: w = k - wLimites: 0 a 255Nro de Ciclos: 1Registros afetados: C, DC e Z (STATUS)Exemplo:

MOVLW .10 � W = 10SUBLW .19 � W = 19 – 10 = 9MOVWF valor � valor = W = 9ADDWF valor � valor = W + valor = 9 + 9 = 18SUBLW .1 � W = 1 - 9 = 248 (-8)

256 – 8 = 248

Atenção verificar o carry do status

Microcontrolador PIC 16F877Registradores de funRegistradores de funçção Especialão Especial

STATUS (03h, 83h, 103h e 183h) mostra o estado a ULA

Bit0 – Carry ou estouro de byte na ultima operação da ULA.0 = indica que não houve um estouro1 = indica que houve estouro de byte (bit 7)

No caso da função SUB o Carry trabalha com a lógica invertida:

0 = Negativo o resultado1 = Positivo o resultado

Conjunto de Instruções do PIC16F877 � Instruções Aritméticas (SUB) :

Exemplo:MOVLW .10 � W = 10SUBLW .19 � W = 19 – 10 = 9 c = 1MOVWF valor � valor = W = 9ADDWF valor � valor = W + valor = 9 + 9 = 18SUBLW .1 � W = 1 - 9 = 248 (-8) c = 0

256 – 8 = 248SUBLW .240 � W = 240 – 248=248 (-8) c = 0ADDLW .20 � W = 248 + 20 = 12 (268 – 256)NOPNOP

C = 0 indica que o resultado foi negativo

Conjunto de Instruções do PIC16F877 � Instruções Aritméticas (SUB) :

SUBWF f,d

Descrição: Subtrai W do valor de f, colocando o resultado em d. Operação: d = f - w

Se d=0 w = f - wSe d=1 f = f - w

Se d for omitido assume-se 1 como valor default. Nro de Ciclos: 1Registros afetados: C, DC e Z (STATUS)Exemplo:

MOVLW .10 � W = 10MOVWF AUX � AUX = 10MOVLW .19 � W = 19SUBWF AUX,0 � W = 10 -19 = 247 (-9) � 256 - 9 (C=0)SUBWF AUX,1 � AUX = 10 – 247 = 19 (-237) � 256-237 = 19(C=0)

Conjunto de Instruções do PIC16F877 � Exemplo de Instruções de dados (MOV e SUB):

Exemplo:

NA = 10

NB = 20

RES = NB - NA

Código em Assembler

MOVLW .10 � w = 10

MOVWF NA � NA = w

MOVLW .20 � w = 20

MOVWF NB � NB = w

MOVF NA,w � w = NA

SUBWF NB,w � w = NB - w

MOVWF RES � RES = w ??????

Conjunto de Instruções do PIC16F877 � Exemplo de Instruções de dados (MOV, ADD e SUB ):

Exercício : Escrever o seguinte código

NA = 2

NB = 3

NC = 7

ND = 1

Soma= NA - NC - ND + NB

Soma2= NB + ND

Total = Soma + Soma2

Conjunto de Instruções do PIC16F877 � Instruções aritmética: (DEC)

DECF f,dDescrição: Decrementa em uma unidade o registro da posição

de memória “f”. O resultado é guardado no conforme o destino “d” (0=W e 1=f).

Operação: d = f - 1Nro de Ciclos: 1Registros afetados: Z (STATUS)Exemplo:

MOVLW .2 � W = 2MOVWF AUX � AUX = W = 2DECF AUX,W � W = AUX – 1 = 2 – 1 = 1SUBLW .1 � W = 1 - W = 1 – 1 = 0

Conjunto de Instruções do PIC16F877 � Instruções de Salto (DEC E GOTO):

DECFSZ f,dDescrição: Decrementa (DEC) o registro “f” em uma unidade guardando o

resultado no destino “d” (W ou F), e salta se ele for zero (Z). O teste é realizado após o decremento.

Operação: d = f - 1 Nro de Ciclos: 2Registros afetados: Nenhum Exemplo:

INICIO:MOVLW .100 ���� W = 100MOVWF AUX ���� AUX = w = 100

LOOP:DECFSZ AUX,1 � AUX = AUX – 1 = 100 – 1 até 0GOTO LOOP � Se não for zero vai para loop

� Se for Zero, pula próxima linhaMOVLW 0x44 � W = 44h = 68 GOTO INICIO � Volta para posição INICIO.