Parte 2 Instruções de ADD, SUB e DECFnivaldo/Microcontroladores/Aulas/... · Instruções de ADD,...
Transcript of Parte 2 Instruções de ADD, SUB e DECFnivaldo/Microcontroladores/Aulas/... · Instruções de ADD,...
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.