Microcontrolador PIC 16F877 Parte 2 Instruções de ADD, SUB e DECF
Instruções Aritméticas (ADD) : ADDLW k Descrição: Soma uma constante k é somada com W Operação: w = w + k Limites: 0 a 255 Nro de Ciclos: 1 Registros afetados: C, DC e Z (STATUS) MOVLW.10 W = 10 ADDLW.19 w = 10 + 19 = 29 EX: Sabendo que media vale 10 implemente a seguinte equação Valor = 3 + media
EX: Sabendo que media vale 10 implemente a seguinte equaçã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
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 W Se d=1 resultado em f Se d for omitido assume-se 1 como valor default. Operação: d = w + f Limites: 0 a 127 Nro de Ciclos: 1 Registros afetados: C, DC e Z (STATUS) MOVLW.10 w = 10 MOVWF AUX AUX = w = 10 MOVLW.19 w = 19 ADDWF AUX,0 w = w + AUX = 19 + 10 = 29 ADDWF AUX,1 AUX = w + AUX = 29 + 10 = 39
Microcontrolador PIC 16F877 Registradores de função Especial STATUS (03h, 83h, 103h e 183h) mostra o estado a ULA Bit7 Seleciona banco de memória p/ endereçamento indireto BIT6..5 Selecionam banco de memória para endereçamento direto 00 Bank0 01 Bank1 10 Bank2 11 Bank 3 Bit4 Indica que houve um estouro do Watchdog timer (WDT) 1 = depois da energização 0 = ocorreu estouro do WDT Bit3 0 = indica que está no modo de baixo consumo SLEEP Bit2 Flag de zero Z 0 = a última operação realizada na ULA não foi zero 1 = 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)
Exemplo de Instruções de dados (MOV e ADD): 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)
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
Instruções Aritméticas (SUB) : SUBLW k Descrição: Subtrai o W de uma constante k Operação: w = k - w Limites: 0 a 255 Nro de Ciclos: 1 Registros afetados: C, DC e Z (STATUS) MOVLW.10 W = 10 SUBLW.19 W = 19 10 = 9 MOVWF valor valor = W = 9 ADDWF valor valor = W + valor = 9 + 9 = 18 SUBLW.1 W = 1-9 = 248 (-8) 256 8 = 248 Atenção verificar o carry do status
Microcontrolador PIC 16F877 Registradores de funçã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 estouro 1 = 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 resultado 1 = Positivo o resultado
Instruções Aritméticas (SUB) : MOVLW.10 W = 10 SUBLW.19 W = 19 10 = 9 c = 1 MOVWF valor valor = W = 9 ADDWF valor valor = W + valor = 9 + 9 = 18 SUBLW.1 W = 1-9 = 248 (-8) c = 0 256 8 = 248 SUBLW.240 W = 240 248=248 (-8) c = 0 ADDLW.20 W = 248 + 20 = 12 (268 256) NOP NOP C = 0 indica que o resultado foi negativo
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 - w Se d=1 f = f - w Se d for omitido assume-se 1 como valor default. Nro de Ciclos: 1 Registros afetados: C, DC e Z (STATUS) MOVLW.10 W = 10 MOVWF AUX AUX = 10 MOVLW.19 W = 19 SUBWF AUX,0 W = 10-19 = 247 (-9) 256-9 (C=0) SUBWF AUX,1 AUX = 10 247 = 19 (-237) 256-237 = 19(C=0)
Exemplo de Instruções de dados (MOV e SUB): 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??????
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
Instruções aritmética: (DEC) DECF f,d Descriçã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 - 1 Nro de Ciclos: 1 Registros afetados: Z (STATUS) MOVLW.2 W = 2 MOVWF AUX AUX = W = 2 DECF AUX,W W = AUX 1 = 2 1 = 1 SUBLW.1 W = 1 - W = 1 1 = 0
Instruções de Salto (DEC E GOTO): DECFSZ f,d Descriçã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: 2 Registros afetados: Nenhum INICIO: MOVLW.100 W = 100 MOVWF AUX AUX = w = 100 LOOP: DECFSZ AUX,1 AUX = AUX 1 = 100 1 até 0 GOTO LOOP Se não for zero vai para loop Se for Zero, pula próxima linha MOVLW 0x44 W = 44h = 68 GOTO INICIO Volta para posição INICIO.