Você está na página 1de 103

INSTRUES ASSEMBLER PIC - Microchip

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 1/103

INSTRUES ASSEMBLER
Introduo
Atravs das Instrues o cdigo-fonte pode executar as funes determinadas pelo programador para controlar o sistema externo de acordo com o projeto. A Instruo Assembler formada por uma srie de palavras (mnemnicos) que traduzem a funo a ser realizada. Normalmente, cada fabricante desenvolve seu prprio conjunto de instrues que tem aplicao exclusiva nos seus componentes, sem nenhuma compatibilidade com outros fabricantes. Para o programador, cabe estudar cada instruo no seu formato, funo e aplicao de acordo com o controlador empregado no projeto. claro que, se existem vrios projetos de aplicao desenvolvidos por uma nica empresa, esta optar pelo uso de um s fabricante de controlador por uma simples questo de custo/investimento na educao dos programadores para a linguagem de programao (conjunto de instrues) e caractersticas de intercambio de programas ou trechos de programas em aplicaes diversas. No geral, entre os diversos controladores existentes no mercado, a funo que se deseja realizar com uma instruo em qualquer dispositivo no altera, apenas o nome da instruo (mnemnico) que sofre uma alterao. Para o nosso caso, sero utilizadas as instrues da famlia PIC Microchip, que rene um conjunto de 37 instrues aplicadas em controladores de 8 bits (Mid Range MCU).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 2/103

ndice de Instrues
As instrues so agrupadas em trs categorias bsicas de aplicao: INSTRUO ORIENTADA A BYTE (BYTE-ORIENTED OPERATION)
MNEMONICO ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF DESCRIO Soma o valor contido em W com valor contido em F Operao AND (E) entre o valor contido em W e valor contido em F Coloca valor 0 (zero) no registro F Coloca valor 0 (zero) no registro W Complemento de 1 (1s complement) do valor contido em F Decrementa uma unidade do valor contido em F Decrementa uma unidade do valor contido em F e salta a instruo seguinte se o resultado for 0 (zero) Incrementa uma unidade no valor contido em F Incrementa uma unidade no valor contido em F e salta a instruo seguinte se o resultao for 0 (zero) Operao OR (OU) entre o valor contido em W e valor contido em F Mover o valor contido no registro F para o destino especificado Mover o valor contido em W para o registro F Nenhuma operao (No Operation) Rotaciona valor contido em F esquerda atravs do bit CARRY Rotaciona valor contido em F direita atravs do bit CARRY Subtrai o valor contido em W do valor contido em F Troca NIB_LO com NIB_HI no registro F Operao EXCLUSIVE OR (OU EXCLUSIVO) entre o valor contido em W e valor contido em F CM 1 1 1 1 1 1 1 (2) 1 1 (2) 1 1 1 1 1 1 1 1 1 Z C C C, DC, Z * * * Z Z Z STATUS C, DC, Z Z Z Z Z Z * * * * * * * * PG. * * * *

INSTRUO ORIENTADA A BIT (BIT-ORIENTED OPERATION)


MNEMONICO BCF BSF BTFSC BTFSS DESCRIO Coloca valor 0 (clear) no bit F CM 1 STATUS PG. * * * *

Coloca valor 1 (set) no bit F 1 Testa o valor (nvel lgico) do bit F e salta a instruo seguinte se valor do 1 (2) bit for igual a 0 (clear) Testa o valor (nvel lgico) do bit F e salta a instruo seguinte se valor do 1 (2) bit for igual a 1 (set)

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 3/103

INSTRUO LITERAL E CONTROLE (LITERAL AND CONTROL OPERATION)


MNEMONICO ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW DESCRIO Soma valor literal ao valor contido em W Operao AND (E) entre o valor literal e valor contido em W Chama sub-rotina Coloca valor zero no registro WDT (Watchdog Timer) V para (o endereo indicado) Operao OR (OU) entre o valor literal e valor contido em W Mover o valor literal para o registro W Retorna do Tratamento das Interrupes Retorna o valor literal no registro W Retorna de uma sub-rotina Vai para modo baixo consumo Subtrai valor literal do valor contido em W Operao EXCLUSIVE OR (OU EXCLUSIVO) entre o valor literal e valor contido em W CM 1 1 2 1 2 1 1 2 2 2 1 1 1 /TO, /PD C, DC, Z Z * * Z * * * * STATUS C, DC, Z Z /TO, /PD PG. * * *

Interpretando as Informaes
Cada instruo se apresenta como um captulo onde descrita em sua funo com os detalhes necessrios para a compreenso de sua operao, includos exemplos de aplicao com amostra da sintaxe no cdigo_fonte e como ocorre o comportamento dos bits e registros quando a instruo executada. Quadro Demonstrativo Contm as informaes bsicas para consulta de aplicao indicando a funo e o uso a instruo. MNEMNICO Forma contrada da instruo - normalmente formado pelas iniciais da frase que descreve a operao - o compilador dispes dos cdigos de converso adequados para esta forma. Frase que descreve a operao realizada pela instruo reproduzindo o texto na lngua de origem (ingles). Forma que as instrues devem ser escritas no cdigo_fonte para que o compilador interprete corretamente a converso para cdigo de mquina. Descreve a operao da instruo com detalhes.

INSTRUO SINTAXE DESCRIO

Quantidade de Ciclos de Mquina necessrios para que a instruo seja executada CICLO MQUINA completamente - tempo de execuo da instruo, dependente da frequencia do clock do dispositivo aplicado. STATUS Bit do registro STATUS que sofre alterao quando a execuo da instruo resulta em situao definida pelo fabricante (ver quadro descritivo do registro STATUS).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 4/103

Organizao do Registro Lembrar que todos os sistemas processados tem como base as Tcnicas Digitais fundamentais logo, a estrutura do registro onde a informao armazenada segue todos os padres habituais de formato, nomes, localizao de bit etc., etc., etc.. Para a exposio do funcionamento das instrues e seu emprego, os exemplos sero sempre baseados nos elementos identificados como mostra a figura abaixo:
> [ posio bit ] > 6 > [ nome bit ] > BOTAO 7 6 5 4 3 2 1 0 1 0 1 0 1 0 0 1 PORTA
MSB LSB

> Bit menos significativo LSB - Least Significant Bit > Bit mais significativo MSB - Most Significant Bit

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 5/103

Vocabulrio [ posio bit ] nmero inteiro, no intervalo de 0 a 7, que identifica a posio do bit em um registro, contado sempre da direita para a esquerda, comeando no bit 0 (LSB - bit menos significativo). [ nome registro ],[ posio bit ]
PORTA,6 ; VERIFICA O ESTADO DO BIT [ ; REG. [ nome registro ]

BTFSC

posio bit ] DO

BTFSC

; VERIFICA O ESTADO DO BIT 6 DO REG. PORTA > [ posio bit ] > 6 7 6 5 4 3 2 1 0 1 0 1 0 1 0 0 1

PORTA

MSB

LSB

_______________________________________________________________________________________ [ nome bit ] nome que identifica o bit dentro do registro em substituio do nmero que identifica a [ posio bit ] - o nome do bit pode ser estabelecido pelo fabricante (Registros de Funes Especiais - SFR): [ nome registro ],[ nome bit ] ; DESLIGA O BIT [ nome bit ] NO REGISTRO ; [ nome registro ]
INTCON,PEIE > PEIE 0 0 0 0 0 0 0 0 INTCON ; DESLIGA BIT PEIE NO REGISTRO INTCON

BCF

BCF

Ou pode ser estabelecido pelo programador (Registros de Uso Geral) e devidamente declarado na rea de Diretivas.
BCF BCF

[ nome bit ]
F_CONT > F_CONT 0 0 0 0 0

; DESLIGA O BIT [

nome bit ]

; DESLIGA BIT F_CONT

FLAG

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 6/103

[ nome registro ] -

identifica um registro na memria (Ram ou Programa) a partir de um nome - o nome do registro pode ser estabelecido pelo fabricante (Registros de Funes Especiais SFR):
0 1 0 0 0 0 0 0 TMR0

Ou pode ser estabelecido pelo programador (Registros de Uso Geral) e devidamente declarado na rea de Diretivas:
CBLOCK ENDC CBLOCK 0x20 FLAG ENDC 0 1 0 0 0

[ endereo ] [ nome registro ]

; REGISTRO USO GERAL

; REGISTRO PARA FLAGS DE CONTROLE 0 0 0 FLAG

_______________________________________________________________________________________ [ registro origem ] - identifica o registro de origem do valor a ser empregado pela instruo a partir de um nome - o nome do registro pode ser estabelecido pelo fabricante (Registros de Funes Especiais - SFR), ou pode ser estabelecido pelo programador (Registros de Uso Geral) e devidamente declarado na rea de Diretivas.
ADDWF

[ registro origem ],[ registro destino ]

; SOMAR O VALOR DO [ registro origem ; COM O VALOR DO [ registro destino ] E COLOCAR O ; RESULTADO DA OPERAO NO [ registro destino ] ; SOMAR O VALOR DO REG. W COM O VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. W

ADDWF

CONT,W

_______________________________________________________________________________________ [ registro destino ] - identifica o registro de destino do valor resultado da execuo da instruo a partir de um nome - o nome do registro pode ser estabelecido pelo fabricante (Registros de Funes Especiais - SFR), ou pode ser estabelecido pelo programador (Registros de Uso Geral) e devidamente declarado na rea de Diretivas.
SUBWF

[ registro origem ],[ registro destino ]

; SOMAR O VALOR DO [ registro origem ; COM O VALOR DO [ registro destino ] E COLOCAR O ; RESULTADO DA OPERAO NO [ registro destino ] ; SOMAR O VALOR DO REG. W COM O VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. W

SUBWF

CONT,W

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 7/103

[ nome literal ] -

identifica um valor numrico (constante) a partir de um nome estabelecido pelo programador e devidamente declarado na rea de Diretivas. A utilizao do valor numrico (constante) no programa se faz utilizando sempre o nome dado. O compilador se encarrega de realizar a substituio do nome pelo valor no registro.
EQU .XXX ; RELACIONA O NOME [ nome ; VALOR NUMRICO XXX

[ nome literal ]
REFERENCIA

literal ] AO

EQU

.133

; RELACIONA O NOME REFERENCIA AO ; VALOR NUMRICO 133 ; MOVER [

MOVLW MOVLW

[ nome literal ]
REFERENCIA

nome literal ] PARA REG. W

; MOVER REFERENCIA PARA REG. W

_______________________________________________________________________________________ [ endereo ] identifica o destino de um desvio originado no cdigo_fonte - o programador pode utilizar nomes para identificar os diversos endereos. O compilador se encarrega de realizara a substituio do nome pela posio numrica na memria. No tem necessidade de se declarar os nomes dos endereos na rea de Diretivas. [ endereo ]
SINALIZACAO ; DESVIA PARA SUB-ROTINA [

CALL CALL

endereo ]

; DESVIA PARA SUB-ROTINA DE SINALIZAO

GOTO GOTO

[ endereo ]
DESLIGA_LED

; VAI PARA O ENDEREO [

endereo ]

; VAI PARA O ENDEREO DESLIGA_LED

_______________________________________________________________________________________ [ valor ] valor numrico diretamente declarado na instruo dentro do cdigo_fonte - o programador no identificou o valor atravs de um nome declarado na rea de Diretivas. [ valor ]
B'10000011' ; MOVER [

MOVLW MOVLW

valor ] PARA REG. W

; MOVER LITERAL PARA REG. W

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 8/103

STATUS
O registro STATUS dispe de 6 bits de flag (sinalizao) reagindo ao resultado das operaes realizadas por diversas instrues. A tabela descreve apenas os bits relacionados s funes afetadas.
R/W 7 R/W 6 R/W 5 R 4 R 3 R/W 2 R/W 1 R/W 0

IRP
MSB

RP1

RP0

/TO

/PD

DC

C
LSB

BIT OPER INCIO 7 R/W 0

NOME IRP

FUNO Seleo da Pgina de Memria (usado para endereamento indireto)

6:5

R/W

1 = Ativa Pginas de Memria 2 e 3 (Bank2 e Bank3) 0 = Ativa Pginas de Memria 0 e 1 (Bank0 e Bank1) RP1:RP0 Seleo da Pgina de Memria (usado para endereamento direto) 11 = Ativa Pgina de Memria 3 (Bank3) 10 = Ativa Pgina de Memria 2 (Bank2) 01 = Ativa Pgina de Memria 1 (Bank1) 00 = Ativa Pgina de Memria 0 (Bank0) Time-Out - Tempo esgotado a CPU informa as seguintes ocorrncias neste bit: 1 = aps energizao do controlador ou ocorrncia da instruo CLRWDT ou ocorrncia da instruo SLEEP 0 = tempo esgotado para ocorrncia da instruo WDT (o programa est parado em um loop infinito) Power Down Queda Alimentao/Reduo de Consumo - a CPU informa as seguintes ocorrncias neste bit: 1 = aps energizao do controlador ou ocorrncia da instruo SLEEP 0 = execuo da instruo SLEEP Zero - a CPU informa as seguintes ocorrncias neste bit: 1 = o resultado da ltima operao aritmtica/lgica foi zero 0 = o resultado da ltima operao aritmtica/lgica no foi zero Digit Carry/Borrow - Dgito de Transporte/Emprstimo - a CPU informa as seguintes ocorrncias neste bit: 1 = o resultado da ltima operao aritmtica/lgica no excedeu os 4 bits menos significativos do registro. 0 = o resultado da ltima operao aritmtica/lgica excedeu os 4 bits menos significativos do registro. Carry/Borrow - Transporte/Emprstimo - a CPU informa as seguintes ocorrncias neste bit: 1 = o resultado da ltima operao aritmtica/lgica no excedeu o valor 255. 0 = o resultado da ltima operao aritmtica/lgica excedeu o valor 255.

/TO

/PD

R/W

R/W

DC

R/W

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 9/103

BCF
MNEMNICO INSTRUO SINTAXE DESCRIO BCF Bit Clear F BCF BCF BCF [ nome bit ] bit pertence a Registro de Uso Geral [ nome registro ],[ nome bit ] bit pertence a Registro Especial [ nome registro ],[ posio bit ] uso geral

Coloca o valor (nvel lgico) 0 (clear) no bit identificado por [ nome bit ]

CICLO MQUINA 1 STATUS Nenhum

Esta instruo coloca o nvel lgico 0 (zero - clear) no bit especfico em um determinado registro. S afeta o bit considerado dentro do registro. A sintaxe da instruo depende do tipo de registro em que o bit est localizado: Bit em Registro de Uso Geral: BCF [ nome bit ]

O programador indica o nome do Bit e relaciona ao nome do Registro de Uso Geral na rea de Diretivas no cdigo_fonte, usar o nome do Bit aps a instruo. Bit em Registro Especial: BCF [ nome registro ],[ nome bit ]

O nome do Bit j existe (o fabricante estabelece no arquivo de incluso) mas no tem relacionamento entre ele e os Registros Especiais (o fabricante no coloca este relacionamento no arquivo de incluso) no cdigo_fonte o programador deve identificar o Registro Especial e o nome do Bit. Uso Geral: BCF [ nome registro ],[ posio bit ]

O Registro Especial no possui nomes para os Bits (por exemplo: registros PORT) no cdigo_fonte, o programador indica o nome do registro (definido na rea de Diretivas) e a posio do Bit. EXEMPLOS: Bit em Registro de Uso Geral Operao: Desligar o bit F_CONT BCF [ nome bit ]

* Definir o nome do bit na rea de diretivas identificando qual o registro e qual a posio do bit no registro:
#DEFINE F_CONT FLAG,6 ; IDENTIFICANDO COM O NOME F_CONT O BIT 6 DO ; REGISTRO FLAG

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 10/103

* Valor contido no bit 6 (F_CONT) do registro FLAG antes da execuo da instruo:


> F_CONT 0 1 0 0 0 0 0 0 FLAG

* Instruo
BCF BCF [ nome bit ] F_CONT ; DESLIGA [ nome bit ] ; DESLIGA FLAG F_CONT

* Valor contido no bit 6 (F_CONT) do registro FLAG depois da execuo da instruo:


> F_CONT 0 0 0 0 0 0 0 0 FLAG

Bit em Registro Especial Operao:

BCF [ nome registro ],[ nome bit ]

Desligar a interrupo do TMR0 no registro INTCON

* Valor contido no bit 5 (T0IE) do registro INTCON antes da execuo da instruo:


> T0IE 1 0 1 0 0 0 0 0 INTCON

* Instruo
BCF BCF [ nome registro ],[ nome bit ] INTCON,T0IE ; DESLIGA [ nome registro ],[ nome bit ] ; DESLIGA INTERRUPO TMR0

* Valor contido no bit 5 (T0IE) do registro INTCON depois da execuo da instruo:


> T0IE 1 0 0 0 0 0 0 0 INTCON

Uso Geral Operao:

BCF [ nome registro ],[ posio bit ]

Desligar o bit relacionado a um Led (apagar o Led eltricamente ligado a uma sada)

* Valor contido no bit 6 (eltricamente ligado a um Led) do registro PORTA antes da execuo da instruo (o estado do bit indica que o Led est ligado):
> LED 0 1 0 0 0 0 0 0 PORT A
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 11/103

* Instruo
BCF BCF [ nome registro ],[ posio bit ] PORTA,6 ; DESLIGA [ nome registro ],[ posio bit ] ; DESLIGA O BIT 6 DO REGISTRO PORTA

* Valor contido no bit 6 (eltricamente ligado a um Led) do registro PORTA depois da execuo da instruo (o estado do bit indica que o Led est desligado):
> LED 0 0 0 0 0 0 0 0 PORT A

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 12/103

BSF
MNEMNICO INSTRUO SINTAXE DESCRIO BSF Bit Set F BSF BSF BSF [ nome bit ] bit pertence a Registro de Uso Geral [ nome registro ],[ nome bit ] bit pertence a Registro Especial [ nome registro ],[ posio bit ] uso geral

Coloca o valor (nvel lgico) 1 (set) no bit identificado por [ nome bit ]

CICLO MQUINA 1 STATUS Nenhum

Esta instruo coloca o nvel lgico (valor) 1 (set) no bit especfico em um determinado registro. S afeta o bit considerado dentro do registro. A sintaxe da instruo depende do tipo de registro em que est localizado: Bit em Registro de Uso Geral: BSF [ nome bit ]

O programador indica o nome do Bit e relaciona ao nome do Registro de Uso Geral na rea de Diretivas no cdigo_fonte, usar o nome do Bit aps a instruo Bit em Registro Especial: BSF [ nome registro ],[ nome bit ]

O nome do Bit j existe (o fabricante estabelece no arquivo de incluso) mas no tem relacionamento entre ele e os Registros Especiais (o fabricante no coloca este relacionamento no arquivo de incluso) no cdigo_fonte o programador deve identificar o Registro Especial e nome do Bit Uso Geral: BSF [ nome registro ],[ posio bit ]

O Registro Especial no possui nomes para os Bits (por exemplo: registros PORT) no cdigo_fonte, o programador indica o nome do registro (definido na rea de Diretivas) e a posio do Bit. EXEMPLOS: Bit em Registro de Uso Geral Operao: Ligar o bit F_CONT BSF [ nome bit ]

* Definir o nome do bit na rea de diretivas identificando qual o registro e qual a posio do bit no registro:
#DEFINE F_CONT FLAG,6 ; IDENTIFICANDO COM O NOME F_CONT O BIT 6 DO ; REGISTRO FLAG

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 13/103

* Valor contido no bit 6 (F_CONT) do registro FLAG antes da execuo da instruo:


> F_CONT 0 0 0 0 0 0 0 0 FLAG

* Instruo
BSF BSF [ nome bit ] F_CONT ; LIGA [ nome bit ] ; LIGA FLAG F_CONT

* Valor contido no bit 6 (F_CONT) do registro FLAG depois da execuo da instruo:


> F_CONT 0 1 0 0 0 0 0 0 FLAG

Bit em Registro Especial Operao:

BSF

[ nome registro ],[ posio bit ]

Ligar a interrupo do TMR0 no registro INTCON

* Valor contido no bit 5 (T0IE) do registro INTCON antes da execuo da instruo:


> T0IE 1 0 0 0 0 0 0 0 INTCON

* Instruo
BSF BSF [ nome registro ],[ nome bit ] INTCON,T0IE ; LIGA [ nome registro ],[ nome bit ] ; LIGA INTERRUPO TMR0

* Valor contido no bit 5 (T0IE) do registro INTCON depois da execuo da instruo:


> T0IE 1 0 1 0 0 0 0 0 INTCON

Uso Geral Operao:

BSF

[ nome registro ],[ posio bit ]

Ligar o bit relacionado a um Led (acender o Led ligado a uma sada)

* Valor contido no bit 6 (eltricamente ligado a um Led) do registro PORTA antes da execuo da instruo (o estado do bit indica que o Led est desligado):
> LED 0 0 0 0 0 0 0 0 PORT A
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 14/103

* Instruo
BSF BSF [ nome registro ],[ posio bit ] PORTA,6 ; LIGA [ nome registro ],[ posio bit ] ; LIGA BIT 6 NO REGISTRO PORTA

* Valor contido no bit 6 (eltricamente ligado a um Led) do registro PORTA depois da execuo da instruo (o estado do bit indica que o Led est ligado):
> LED 0 1 0 0 0 0 0 0 PORT A

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 15/103

BTFSC
MNEMNICO INSTRUO SINTAXE BTFSC Bit Test F, Skip if Clear BTFSC [ nome bit ] uso geral BTFSC [ nome registro ],[ nome bit ] bit pertence a Registro Especial BTFSC [ nome registro ],[ posio bit ] - bit pertence a Reg de Uso Geral Testa o valor (nvel lgico) do bit identificado por [ nome bit ] e salta a instruo DESCRIO seguinte se valor do bit for igual a 0 (clear) 2 CM se valor do bit = 0 (clear) executa uma NOP CICLO MQUINA 1 CM se valor do bit = 1 (set) STATUS Nenhum

Esta instruo verifica o nvel lgico (valor) de um bit especfico em um determinado registro: - se o bit = 1 (set) executa a instruo seguinte (no caso um GOTO). - se o bit = 0 (clear) salta a instruo seguinte e executa as demais instrues. Ateno: a execuo da instruo (teste de um bit) no altera o valor contido no bit. A sintaxe da instruo depende do tipo de registro em que est localizado: Bit em Registro de Uso Geral: BTFSC [ nome bit ]

O programador indica o nome do Bit e relaciona ao nome do Registro de Uso Geral na rea de Diretivas no cdigo_fonte, usar o nome do Bit aps a instruo Bit em Registro Especial: BTFSC [ nome registro ], [ nome bit ]

O nome do Bit j existe (o fabricante estabelece no arquivo de incluso) mas no tem relacionamento entre ele e os Registros Especiais (o fabricante no coloca este relacionamento no arquivo de incluso) no cdigo_fonte o programador deve identificar o Registro Especial e nome do Bit Uso Geral: BTFSC [ nome registro ], [ posio bit ]

O Registro Especial no possui nomes para os Bits (por exemplo: registros PORT) no cdigo_fonte, o programador indica o nome do registro (declarado na rea de Diretivas) e a posio do Bit. Nos EXEMPLOS DE SINTAXE podemos ver como a instruo deve ser escrita no cdigo_fonte nas suas diversas formas, mas no explica como a instruo funciona. No EXEMPLO DE APLICAO utiliza-se um cdigo_fonte funcional completo para explicar como a instruo opera com detalhe. EXEMPLOS DE SINTAXE: Bit em Registro de Uso Geral Operao: BTFSC [ nome bit ]

Testar o valor do bit F_CONT


Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 16/103

* Definir o nome do bit na rea de diretivas identificando qual o registro e qual a posio do bit no registro:
#DEFINE F_CONT FLAG,6 ; IDENTIFICANDO COM O NOME F_CONT O BIT 6 DO ; REGISTRO FLAG

* Valor contido no bit 6 (F_CONT) do registro FLAG:


> F_CONT 0 0 0 0 0 0 0 0 FLAG

* Instruo
BTFSC BTFSC [ nome bit ] F_CONT ; VERIFICA ESTADO [ nome bit ] ; VERIFICA ESTADO FLAG F_CONT

Bit em Registro Especial Operao:

BTFSC

[ nome registro ],[ posio bit ]

Verificar se a interrupo do TMR0 (no registro INTCON) est habilitada

* Valor contido no bit 5 (T0IE) do registro INTCON:


> T0IE 1 0 0 0 0 0 0 0 INTCON

* Instruo
BTFSC BTFSC [ nome registro ],[ nome bit ] INTCON,T0IE ; VERIFICA ESTADO [ nome registro ],[ nome bit ] ; VERIFICA ESTADO T0IE - INTERRUPO TMR0

Uso Geral Operao:

BTFSC

[ nome registro ],[ posio bit ]

Verificar o bit relacionado a um Led (verificar se o Led est ligado)

* Valor contido no bit 6 (eltricamente ligado a um Led) do registro PORTA (o estado do bit indica que o Led est desligado):
> LED 0 0 0 0 0 0 0 0 PORT A

* Instruo
BTFSC BTFSC [ nome registro ],[ posio bit ] PORTA,6 ; VERIFICA ESTADO [ nome registro ],[ posio bit ] ; VERIFCA ESTADO DO BIT 6 NO REGISTRO PORTA

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 17/103

EXEMPLO DE APLICAO: Para estudar a maneira como a instruo funciona dentro de um cdigo_fonte, vamos desenvolver uma aplicao simples onde possamos verificar detalhadamente o comportamento dos bits controlados . Consideremos o diagrama funcional:

VDD

R1

MCU RA0

RA6 R2 B1 L1 VSS

A operao proposta bastante simples: - Aperta o boto B1, acende o led L1. - Solta o boto B1, apaga o led L1. Os estados lgicos que os componentes B1 e L1 podem apresentar para a operao proposta:
B1 Livre Pressionado Apagado Aceso 1 0 0 1

L1

Agora podemos elaborar o fluxograma representativo do funcionamento do sistema:


INICIO

B1

= 1 (B1 livre)

L1 = 0

=0 (B1 pressionado)

L1 = 1

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 18/103

No exemplo de aplicao vamos empregar a sintaxe da instruo: Bit em Registro de Uso Geral BTFSC [ nome bit ]

O programador deve indicar o nome do Bit e relacionar ao nome do Registro de Uso Geral na rea de Diretivas no cdigo_fonte ser usado o nome do Bit aps a instruo * Definir o nome dos bits de entrada e sada na rea de diretivas relacionando o nome ao registro e posio do bit no registro:
#DEFINE #DEFINE B1 L1 PORTA,0 PORTA,6 ; RELACIONANDO O NOME B1 AO BIT 0 DO ; REGISTRO PORTA ; RELACIONANDO O NOME L1 O BIT 6 DO ; REGISTRO PORTA > B1 bit 0 0 0 1 PORT A

> L1 bit 6 0 0 0 0 0

Baseado no fluxograma, o cdigo_fonte pode ser escrito como:


INICIO BTFSC GOTO BSF GOTO DESLIGA_L1 BCF GOTO L1 INICIO ; DESLIGA L1 ; RETORNA PARA INICIO B1 DESLIGA_L1 L1 INICIO ; VERIFICA O ESTADO DO BIT QUE REPRESENTA B1 ; B1 = 1 > VAI PARA DESLIGA_L1 ; B1 = 0 > LIGA L1 ; RETORNA PARA INICIO

A execuo do cdigo comea em INICIO, verifica o nvel lgico (valor) do bit representado pelo nome B1 e adota uma das duas possibilidades que a instruo oferece, como o cdigo_fonte indica abaixo:
>INICIO BTFSC B1 ; VERIFICA O ESTADO DE B1 =0 =1 > VALORES QUE B1 PODE ASSUMIR > GOTO DESLIGA_L1 ; B1 = 1 > VAI PARA DESLIGA_L1 > BSF L1 ; B1 = 0 > LIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO) < (BUSCA ENDEREO DESLIGA_L1) DESLIGA_L1 > BCF L1 ; DESLIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO)

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 19/103

Analisando as opes da instruo: * Se B1 = 1 (set) - B1 livre realiza a instruo seguinte (no caso, um GOTO). O fluxograma mostra o caminho que o cdigo_fonte realiza para esta condio:
INICIO

B1

=1 (B1 livre)

L1 = 0

=0 (B1 pressionado)

L1 = 1

A sequencia do cdigo_fonte realizada na forma indicada (em vermelho, tambm):


>INICIO BTFSC B1 ; VERIFICA O ESTADO DE B1 =0 =1 > VALOR B1 = 1 > GOTO DESLIGA_L1 ; B1 = 1 > VAI PARA DESLIGA_L1 > BSF L1 ; B1 = 0 > LIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO) < (BUSCA ENDEREO DESLIGA_L1) DESLIGA_L1 > BCF L1 ; DESLIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO)

Analisando o comportamento dos bits envolvidos nas instrues dentro do registro PORTA: * Valor contido no bit 0 (B1) do registro PORTA antes da execuo da instruo BTFSC:
> L1 0 0 0 0 0 0 0 > B1 1 PORT A

* Instruo - durante a execuo do cdigo_fonte, somente as instrues envolvidas so consideradas, as demais so completamente ignoradas - no existem - portanto, o controlador vai ver o cdigo_fonte da seguinte forma:

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 20/103

>INICIO BTFSC B1 ; VERIFICA O ESTADO DE B1 =1 > GOTO DESLIGA_L1 ; B1 = 1 > VAI PARA DESLIGA_L1 (BUSCA ENDEREO DESLIGA_L1) DESLIGA_L1 > BCF L1 ; DESLIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO)

* Valor contido no bit 0 (B1) do registro PORTA depois da execuo da instruo BTFSC - o valor contido no bit 0 (B1) no se altera com a execuo da instruo; a execuo da instruo BCF impe o valor 0 (zero) no bit 6 (L1).
> L1 0 0 0 0 0 0 0 > B1 1 PORT A

* Se B1 = 0 (clear) - B1 pressionado salta a instruo seguinte e executa a instruo encontrada (no caso, um BSF). O fluxograma mostra o caminho que o cdigo_fonte realiza para esta condio:
INICIO

B1

=1 (B1 livre)

L1 = 0

=0 (B1 pressionado)

L1 = 1

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 21/103

A sequencia do cdigo_fonte realizada na forma indicada (em vermelho, tambm):


>INICIO BTFSC B1 ; VERIFICA O ESTADO DE B1 =0 =1 > VALOR B1 = 0 > GOTO DESLIGA_L1 ; B1 = 1 > VAI PARA DESLIGA_L1 > BSF L1 ; B1 = 0 > LIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO) < (BUSCA ENDEREO DESLIGA_L1) DESLIGA_L1 > BCF L1 ; DESLIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO)

Analisando o comportamento dos bits envolvidos nas instrues dentro do registro PORTA: * Valor contido no bit 0 (B1) do registro PORTA antes da execuo da instruo BTFSC:
> L1 0 0 0 0 0 0 0 > B1 0 PORT A

* Instruo - durante a execuo do cdigo_fonte, somente as instrues envolvidas so consideradas, as demais so completamente ignoradas - no existem - portanto, o controlador vai ver o cdigo_fonte da seguinte forma:
>INICIO BTFSC B1 =0 > BSF L1 GOTO INICIO (BUSCA ENDEREO INICIO) < ; VERIFICA O ESTADO DE B1

; B1 = 0 > LIGA L1 ; RETORNA PARA INICIO

* Valor contido no bit 0 (B1) do registro PORTA depois da execuo da instruo BTFSC - o valor contido no bit 0 (B1) no se altera com a execuo da instruo; a execuo da instruo BSF impe o valor 1 (um) no bit 6 (L1).
> L1 0 1 0 0 0 0 0 > B1 1 PORT A

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 22/103

BTFSS
MNEMNICO INSTRUO SINTAXE BTFSS Bit Test F, Skip if Set BTFSS [ nome bit ] uso geral BTFSS [ nome registro ],[ nome bit ] bit pertence a Registro Especial BTFSS [ nome registro ],[ posio bit ] - bit pertence a Reg de Uso Geral Testa o valor (nvel lgico) do bit identificado por F [ nome bit ] e salta a instruo DESCRIO seguinte se valor do bit for igual a 1 (set) 2 CM se valor do bit = 1 (set) executa uma NOP CICLO MQUINA 1 CM se valor do bit = 0 (clear) STATUS Nenhum

Esta instruo verifica o nvel lgico (valor) de um bit especfico em um determinado registro: - se o bit = 0 (clear) executa a instruo seguinte (no caso um GOTO). - se o bit = 1 (set) salta a instruo seguinte e executa as demais instrues. Ateno: a execuo da instruo (teste de um bit) no altera o valor contido no bit. A sintaxe da instruo depende do tipo de registro em que est localizado: Bit em Registro de Uso Geral: BTFSS [ nome bit ]

O programador indica o nome do Bit e relaciona ao nome do Registro de Uso Geral na rea de Diretivas no cdigo_fonte, usar o nome do Bit aps a instruo Bit em Registro Especial: BTFSS [ nome registro ],[ nome bit ]

O nome do Bit j existe (o fabricante estabelece no arquivo de incluso) mas no tem relacionamento entre ele e os Registros Especiais (o fabricante no coloca este relacionamento no arquivo de incluso) no cdigo_fonte o programador deve identificar o Registro Especial e nome do Bit Uso Geral: BTFSS [ nome registro ],[ posio bit ]

O Registro Especial no possui nomes para os Bits (por exemplo: registros PORT) no cdigo_fonte, o programador indica o nome do registro (declarado na rea de Diretivas) e a posio do Bit. Nos EXEMPLOS DE SINTAXE podemos ver como a instruo deve ser escrita no cdigo_fonte nas suas diversas formas, mas no explica como a instruo funciona. No EXEMPLO DE APLICAO utiliza-se um cdigo_fonte funcional completo para explicar como a instruo opera com detalhe.

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 23/103

EXEMPLOS DE SINTAXE: Bit em Registro de Uso Geral Operao: BTFSS [ nome bit ]

Testar o valor do bit F_CONT

* Definir o nome do bit na rea de diretivas identificando qual o registro e qual a posio do bit no registro:
#DEFINE F_CONT FLAG,6 ; IDENTIFICANDO COM O NOME F_CONT O BIT 6 DO ; REGISTRO FLAG

* Valor contido no bit 6 (F_CONT) do registro FLAG:


> F_CONT 0 0 0 0 0 0 0 0 FLAG

* Instruo
BTFSS BTFSS [ nome bit ] F_CONT ; VERIFICA ESTADO [ nome bit ] ; VERIFICA ESTADO FLAG F_CONT

Bit em Registro Especial Operao:

BTFSS

[ nome registro ],[ posio bit ]

Verificar se a interrupo do TMR0 (no registro INTCON) est habilitada

* Valor contido no bit 5 (T0IE) do registro INTCON:


> T0IE 1 0 0 0 0 0 0 0 INTCON

* Instruo
BTFSS BTFSS [ nome registro ],[ nome bit ] INTCON,T0IE ; VERIFICA ESTADO [ nome registro ],[ nome bit ] ; VERIFICA ESTADO T0IE - INTERRUPO TMR0

Uso Geral Operao:

BTFSS

[ nome registro ],[ posio bit ]

Verificar o bit relacionado a um Led (verificar se o Led est ligado)

* Valor contido no bit 6 (eltricamente ligado a um Led) do registro PORTA (o estado do bit indica que o Led est desligado):
> LED 0 0 0 0 0 0 0 0 PORT A

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 24/103

* Instruo
BTFSS BTFSS [ nome registro ],[ posio bit ] PORTA,6 ; VERIFICA ESTADO [ nome registro ],[ posio bit ] ; VERIFCA ESTADO DO BIT 6 NO REGISTRO PORTA

EXEMPLO DE APLICAO: Para estudar a maneira como a instruo funciona dentro de um cdigo_fonte, vamos desenvolver uma aplicao simples onde possamos verificar detalhadamente o comportamento dos bits controlados . Consideremos o diagrama funcional:

VDD

R1

MCU RA0

RA6 R2 B1 L1 VSS

A operao proposta bastante simples: - Aperta o boto B1, acende o led L1. - Solta o boto B1, apaga o led L1. Os estados lgicos que os componentes B1 e L1 podem apresentar para a operao proposta:
B1 Livre Pressionado Apagado Aceso 1 0 0 1

L1

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 25/103

Agora podemos elaborar o fluxograma representativo do funcionamento do sistema:


INICIO

B1

= 1 (B1 livre)

L1 = 0

=0 (B1 pressionado)

L1 = 1

No exemplo de aplicao vamos empregar a sintaxe da instruo: Bit em Registro de Uso Geral BTFSS [ nome bit ]

O programador deve indicar o nome do Bit e relacionar ao nome do Registro de Uso Geral na rea de Diretivas no cdigo_fonte ser usado o nome do Bit aps a instruo * Definir o nome dos bits de entrada e sada na rea de diretivas relacionando o nome ao registro e posio do bit no registro:
#DEFINE #DEFINE B1 L1 PORTA,0 PORTA,6 ; RELACIONANDO O NOME B1 AO BIT 0 DO ; REGISTRO PORTA ; RELACIONANDO O NOME L1 O BIT 6 DO ; REGISTRO PORTA > B1 bit 0 0 0 1 PORT A

> L1 bit 6 0 0 0 0 0

Baseado no fluxograma, o cdigo_fonte pode ser escrito como:


INICIO BTFSS GOTO BCF GOTO LIGA_L1 BSF GOTO L1 INICIO ; LIGA L1 ; RETORNA PARA INICIO B1 LIGA_L1 L1 INICIO ; VERIFICA O ESTADO DO BIT QUE REPRESENTA B1 ; B1 = 0 > VAI PARA LIGA_L1 ; B1 = 1 > DESLIGA L1 ; RETORNA PARA INICIO

A execuo do cdigo comea em INICIO, verifica o nvel lgico (valor) do bit representado pelo nome B1 e adota uma das duas possibilidades que a instruo oferece, como o cdigo_fonte indica abaixo:

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 26/103

>INICIO BTFSS B1 ; VERIFICA O ESTADO DE B1 =1 =0 > VALORES QUE B1 PODE ASSUMIR > GOTO LIGA_L1 ; B1 = 0 > VAI PARA LIGA_L1 > BCF L1 ; B1 = 1 > DESLIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO) < (BUSCA ENDEREO LIGA_L1) LIGA_L1 > BSF L1 ; LIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO)

Analisando as opes da instruo: * Se B1 = 1 (set) - B1 livre salta a instruo seguinte e executa a instruo encontrada (BCF). O fluxograma mostra o caminho que o cdigo_fonte realiza para esta condio:
INICIO

B1

=1 (B1 livre)

L1 = 0

=0 (B1 pressionado)

L1 = 1

A sequencia do cdigo_fonte realizada na forma indicada (em vermelho, tambm):


>INICIO BTFSS B1 ; VERIFICA O ESTADO DE B1 =1 =0 > VALOR B1 = 1 > GOTO LIGA_L1 ; B1 = 0 > VAI PARA LIGA_L1 > BCF L1 ; B1 = 1 > DESLIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO) < (BUSCA ENDEREO LIGA_L1) LIGA_L1 > BSF L1 ; LIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO)
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 27/103

Analisando o comportamento dos bits envolvidos nas instrues dentro do registro PORTA: * Valor contido no bit 0 (B1) do registro PORTA antes da execuo da instruo BTFSS:
> L1 0 0 0 0 0 0 0 > B1 1 PORT A

* Instruo - durante a execuo do cdigo_fonte, somente as instrues envolvidas so consideradas, as demais so completamente ignoradas - no existem - portanto, o controlador vai ver o cdigo_fonte da seguinte forma:
>INICIO BTFSS B1 =1 > BCF L1 GOTO INICIO (BUSCA ENDEREO INICIO) < ; VERIFICA O ESTADO DE B1

; B1 = 1 > DESLIGA L1 ; RETORNA PARA INICIO

* Valor contido no bit 0 (B1) do registro PORTA depois da execuo da instruo BTFSS - o valor contido no bit 0 (B1) no se altera com a execuo da instruo; a execuo da instruo BCF impe o valor 0 (zero) no bit 6 (L1).
> L1 0 0 0 0 0 0 0 > B1 1 PORT A

* Se B1 = 0 (clear) - B1 pressionado realiza a instruo seguinte (GOTO). O fluxograma mostra o caminho que o cdigo_fonte realiza para esta condio:
INICIO

B1

=1 (B1 livre)

L1 = 0

=0 (B1 pressionado)

L1 = 1

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 28/103

A sequencia do cdigo_fonte realizada na forma indicada (em vermelho, tambm):


>INICIO BTFSS B1 ; VERIFICA O ESTADO DE B1 =1 =0 > VALOR B1 = 0 > GOTO LIGA_L1 ; B1 = 0 > VAI PARA LIGA_L1 > BCF L1 ; B1 = 1 > DESLIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO) < (BUSCA ENDEREO LIGA_L1) LIGA_L1 > BSF L1 ; LIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO)

Analisando o comportamento dos bits envolvidos nas instrues dentro do registro PORTA: * Valor contido no bit 0 (B1) do registro PORTA antes da execuo da instruo BTFSS:
> L1 0 0 0 0 0 0 0 > B1 0 PORT A

* Instruo - durante a execuo do cdigo_fonte, somente as instrues envolvidas so consideradas, as demais so completamente ignoradas - no existem - portanto, o controlador vai ver o cdigo_fonte da seguinte forma:
>INICIO BTFSS B1 ; VERIFICA O ESTADO DE B1 =0 > GOTO LIGA_L1 ; B1 = 0 > VAI PARA LIGA_L1 (BUSCA ENDEREO LIGA_L1) LIGA_L1 > BSF L1 ; LIGA L1 GOTO INICIO ; RETORNA PARA INICIO (BUSCA ENDEREO INICIO)

* Valor contido no bit 0 (B1) do registro PORTA depois da execuo da instruo BTFSS - o valor contido no bit 0 (B1) no se altera com a execuo da instruo; a execuo da instruo BSF impe o valor 1 (um) no bit 6 (L1).
> L1 0 1 0 0 0 0 0 > B1 1 PORT A
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 29/103

CALL
MNEMNICO INSTRUO SINTAXE DESCRIO CALL Call Subroutine CALL [ endereo ] Desvia o programa para uma sub-rotina (sequencia de instrues pr-definida) identificada por [ endereo ] Nenhum

CICLO MQUINA 2 STATUS

Esta instruo desvia o programa para o endereo indicado em [ nome subrotina ] e executa a sequencia de instrues indicada. A sequencia de instrues do desvio deve ser encerrada com a instruo RETURN, que retorna posio imediatamente seguinte da instruo CALL. EXEMPLO:
CALL SINALIZACAO ; DESVIA PARA SUB-ROTINA DE SINALIZACAO > ; SEQUENCIA DE INSTRUES DE EXECUO ; NORMAL DO PROGRAMA (BUSCA ENDEREO SINALIZACAO) SINALIZACAO ; SEQUENCIA DE INSTRUES DE EXECUO ; DA SUB-ROTINA SINALIZACAO RETURN ; SADA DA SUB-ROTINA SINALIZACAO (BUSCA ENDEREO DE RETORNO - linha seguinte da instruo CALL)

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 30/103

CLRF
MNEMNICO INSTRUO SINTAXE DESCRIO CLRF Clear F CLRF [ nome registro ]

Coloca o valor 0 (clear) dentro do registro identificado por [ nome registro ]

CICLO MQUINA 1 STATUS Z

Esta instruo substitui todos os valores de cada bit de um registro pelo valor 0 (clear). Ateno: colocar valor 0 (zero) em todos os bits de um registro no significa apagar o valor contido anteriormente neste registro, uma vez que o nmero zero representado por um registro com todos os bits com valor 0 (zero). EXEMPLO: * Valor contido no registro PORTA antes da execuo da instruo:
1 0 1 0 1 0 0 1 PORTA

* Instruo
CLRF PORTA ;COLOCA VALOR ZERO NO REGISTRO PORTA

* Valor contido no registro PORTA depois da execuo da instruo:


0 0 0 0 0 0 0 0 PORTA

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 31/103

CLRW
MNEMNICO INSTRUO SINTAXE DESCRIO CLRW Clear W CLRW Coloca o valor 0 (clear) dentro do registro W

CICLO MQUINA 1 STATUS Z

Esta instruo substitui todos os valores de cada bit do registro W pelo valor 0 (clear). Ateno: colocar valor 0 (zero) em todos os bits de um registro no significa apagar o valor contido anteriormente neste registro, uma vez que o nmero zero representado por um registro com todos os bits com valor 0 (zero). EXEMPLO: * Valor contido no registro W antes da execuo da instruo:
1 0 1 0 1 0 0 1 W

* Instruo
CLRW ; COLOCA VALOR ZERO NO REGISTRO W

* Valor contido no registro W depois da execuo da instruo:


0 0 0 0 0 0 0 0 W

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 32/103

DECF
MNEMNICO INSTRUO SINTAXE DESCRIO CICLO MQUINA STATUS DECF Decrement F DECF [ nome registro ] Decrementa de uma unidade o valor contido no registro F identificado por [ nome registro ] 1 Z

Esta instruo subtrai uma unidade ( 1 ) do registro. Se o resultado da subtrao do registro resultar em valor zero (nulo), o bit Z do registro STATUS altera o valor para 1. necessrio que o registro seja definido como varivel nas diretivas. EXEMPLO: * Definir o registro como varivel nas diretivas:
CBLOCK 0x20 CONT ENDC ; REGISTRO CONTADOR

* Valor contido no registro CONT antes da execuo da instruo:


0 0 0 0 0 0 1 0 2 CONT

* Instruo
DECF CONT 0 0 0 0 0 ; DECREMENTA UMA UNIDADE O REG. CONT 0 1 0 2 CONT

0 0 0 0 0 0 0 1 1

CONT 1

CONT

* Valor contido no registro CONT depois da execuo da instruo DECF:


0 0 0 0 0 0 0 1 1 CONT

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 33/103

DECFSZ
MNEMNICO INSTRUO SINTAXE DESCRIO DECFSZ Decrement F, Skip if Zero DECFSZ [ nome registro ]

Decrementa de uma unidade o valor contido no registro F identificado por [ nome registro ] e salta a instruo seguine se o resultado da operao for zero. 2 CM se valor do registro for igual a zero executa uma NOP CICLO MQUINA 1 CM se valor do registro for diferente de zero STATUS Nenhum

Esta instruo subtrai uma unidade ( 1 ) do registro e verifica se o resultado da operao zero (nulo): - se o resultado da operao = 0 (igual a zero) salta a instruo seguinte e executa as demais instrues. - se o resultado da operao 0 (diferente de zero) executa a instruo seguinte (no caso um GOTO). necessrio que o registro seja definido como varivel nas diretivas. EXEMPLO: * Definir o registro como varivel nas diretivas:
CBLOCK 0x20 CONT ENDC ; REGISTRO CONTADOR

Vamos considerar o cdigo abaixo:


INICIO DECFSZ GOTO BSF CONT INICIO FLAG ; DECREMENTA UMA UNIDADE O REG. CONT ; RESULTADO 0 > VAI PARA INICIO ; RESULTADO = 0 > COLOCA 1 NO BIT FLAG ; SEQUENCIA DE INSTRUES DO PROGRAMA

A execuo do cdigo comea em INICIO, subtrai uma unidade do registro CONT,verifica se o resultado da operao zero e deve adotar uma das duas possibilidades que a instruo oferece: * Resultado da operao 0 (diferente de zero) executa a instruo seguinte (no caso um GOTO). * Valor contido no registro CONT antes da execuo da instruo:
0 0 0 0 0 0 1 0 2 CONT

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 34/103

* Instruo
DECFSZ CONT 0 0 0 0 0 ; DECREMENTA UMA UNIDADE O REG. CONT 0 1 0 2 CONT

0 0 0 0 0 0 0 1 1

CONT 1

CONT

* Valor contido no registro CONT depois da execuo da instruo DECFSZ:


0 0 0 0 0 0 0 1 1 CONT

* Instruo seguinte
GOTO INICIO ; RESULTADO 0 > VAI PARA INICIO

* Resultado da operao = 0 (clear) salta a instruo seguinte e executa as demais instrues. * Valor contido no registro CONT antes da execuo da instruo:
0 0 0 0 0 0 0 1 1 CONT

* Instruo
DECFSZ CONT 0 0 0 0 0 ; DECREMENTA UMA UNIDADE O REG. CONT 0 0 1 1 CONT

0 0 0 0 0 0 0 1 1

CONT 1

CONT

* Valor contido no registro CONT depois da execuo da instruo DECFSZ:


0 0 0 0 0 0 0 0 0 CONT

* Instruo seguinte
BSF FLAG ; RESULTADO = 0 > COLOCA 1 NO BIT FLAG ; SEQUENCIA DE INSTRUES DO PROGRAMA

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 35/103

Observando o cdigo completo com as indicaes de caminhos a serem seguidos em funodo resultado da operao INCFSZ, podemos notar que, uma vez escolhido o caminho de execuo, as demais possbilidades so ignoradas:

(BUSCA ENDEREO)

INICIO DECFSZ =0 0 > GOTO > BSF

CONT INICIO FLAG

; DECREMENTA UMA UNIDADE O REG. CONT ; RESULTADO 0 > VAI PARA INICIO ; RESULTADO = 0 > COLOCA 1 NO BIT FLAG ; SEQUENCIA DE INSTRUES DO PROGRAMA

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 36/103

GOTO
MNEMNICO INSTRUO SINTAXE DESCRIO GOTO Go To GOTO [ endereo ]

Desvia para o [ endereo ] indicado

CICLO MQUINA 2 STATUS Nenhum

Esta instruo cria um desvio incondicional para qualquer outra parte do programa de acordo com o nome do endereo indicado. Este desvio no tem retorno e no depende de condies internas ou externas ao programa. EXEMPLO: * Instruo
GOTO DESLIGA_LED ; VAI PARA O ENDEREO DESLIGA_LED

(BUSCA ENDEREO DESLIGA_LED)

DESLIGA_LED > BCF LED

; DESLIGA LED

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 37/103

INCF
MNEMNICO INSTRUO SINTAXE DESCRIO INCF Increment F INCF [ nome registro ] Incrementa de uma unidade o valor contido no registro F identificado por [ nome registro ] Z

CICLO MQUINA 1 STATUS

Esta instruo adiciona uma unidade ( 1 ) ao registro. Se o resultado da adio ao registro resultar em valor zero (nulo), o bit Z do registro STATUS altera o valor para 1. necessrio que o registro seja definido como varivel nas diretivas. EXEMPLO: * Definir o registro como varivel nas diretivas:
CBLOCK 0x20 CONT ENDC ; REGISTRO CONTADOR

* Valor contido no registro CONT antes da execuo da instruo:


1 1 1 1 1 1 1 0 254 CONT

* Instruo
INCF CONT 1 1 1 1 1 ; INCREMENTA UMA UNIDADE O REG. CONT 1 1 0 254 CONT

+
0 0 0 0 0 0 0 1 1

+
CONT + 1

255

CONT

* Valor contido no registro CONT depois da execuo da instruo INCF:


1 1 1 1 1 1 1 1 255 CONT

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 38/103

INCFSZ
MNEMNICO INSTRUO SINTAXE DESCRIO INCFSZ Increment F, Skip if Zero INCFSZ [ nome registro ]

Incrementa de uma unidade o valor contido no registro F identificado por [ nome registro ] e salta a instruo seguine se o resultado da operao for zero. 2 CM se valor do registro for igual a zero executa uma NOP CICLO MQUINA 1 CM se valor do registro for diferente de zero STATUS Nenhum

Esta instruo adiciona uma unidade ( 1 ) ao registro e verifica se o resultado da operao zero (nulo): - se o resultado da operao = 0 (igual a zero) salta a instruo seguinte e executa as demais instrues. - se o resultado da operao 0 (diferente de zero) executa a instruo seguinte (no caso um GOTO). necessrio que o registro seja definido como varivel nas diretivas. EXEMPLO: * Definir o registro como varivel nas diretivas:
CBLOCK 0x20 CONT ENDC ; REGISTRO CONTADOR

Vamos considerar o cdigo abaixo:


INICIO INCFSZ GOTO BSF CONT INICIO FLAG ; INCREMENTA UMA UNIDADE O REG. CONT ; RESULTADO 0 > VAI PARA INICIO ; RESULTADO = 0 > COLOCA 1 NO BIT FLAG ; SEQUENCIA DE INSTRUES DO PROGRAMA

A execuo do cdigo comea em INICIO, adiciona uma unidade ao registro CONT,verifica se o resultado da operao zero e deve adotar uma das duas possibilidades que a instruo oferece: * Resultado da operao 0 (diferente de zero) executa a instruo seguinte (no caso um GOTO). * Valor contido no registro CONT antes da execuo da instruo:
1 1 1 1 1 1 1 0 254 CONT

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 39/103

* Instruo
INCFSZ CONT 1 1 1 1 1 ; INCREMENTA UMA UNIDADE O REG. CONT 1 1 0 254 CONT

+
0 0 0 0 0 0 0 1 1

+
CONT + 1

255

CONT

* Valor contido no registro CONT depois da execuo da instruo INCFSZ:


1 1 1 1 1 1 1 1 255 CONT

* Instruo seguinte
GOTO INICIO ; RESULTADO 0 > VAI PARA INICIO

* Resultado da operao = 0 (igual a zero) salta a instruo seguinte e executa as demais instrues. * Valor contido no registro CONT antes da execuo da instruo:
1 1 1 1 1 1 1 1 255 CONT

* Instruo
INCFSZ CONT 1 1 1 1 1 ; INCREMENTA UMA UNIDADE O REG. CONT 1 1 1 255 CONT

+
0 0 0 0 0 0 0 1 1

+
CONT + 1

CONT

* Valor contido no registro CONT depois da execuo da instruo INCFSZ:


0 0 0 0 0 0 0 0 0 CONT

* Instruo seguinte
BSF FLAG ; RESULTADO = 0 > COLOCA 1 NO BIT FLAG ; SEQUENCIA DE INSTRUES DO PROGRAMA

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 40/103

Observando o cdigo completo com as indicaes de caminhos a serem seguidos em funodo resultado da operao INCFSZ, podemos notar que, uma vez escolhido o caminho de execuo, as demais possbilidades so ignoradas:

(BUSCA ENDEREO)

INICIO INCFSZ =0 0 > GOTO > BSF

CONT INICIO FLAG

; INCREMENTA UMA UNIDADE O REG. CONT ; RESULTADO 0 > VAI PARA INICIO ; RESULTADO = 0 > COLOCA 1 NO BIT FLAG ; SEQUENCIA DE INSTRUES DO PROGRAMA

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 41/103

MOVLW
MNEMNICO INSTRUO SINTAXE DESCRIO MOVLW Move Literal to W MOVLW [ nome literal ] MOVLW [ valor ] Mover o valor do literal identificado por [ nome literal ] ou [ valor ] para o registro W Nenhum

CICLO MQUINA 1 STATUS

Esta instruo usada para copiar o valor de um nmero ou constante (literal) armazenado em um registro da memria de programa, para o registro W. Observar que no importa a forma que o valor declarado (binrio, decimal ou hexa) no programa, o valor que ser colocado no registro W ser sempre em binrio. O valor do literal pode ser expresso de duas formas: - Nome Literal: o valor do literal relacionado a um nome estabelecido pelo programador e declarado dentro das diretivas. - Valor: o valor do literal declarado diretamente na forma numrica dentro da prpria instruo. EXEMPLOS: - Nome Literal * Relacionar a constante a um nome e declarar o valor na rea de diretivas:
CT_TEMPO EQU .125 ; CONSTANTE DE TEMPO

* Valor contido no registro W antes da execuo da instruo:


0 0 0 0 0 0 0 0 W

* Instruo
MOVLW CT_TEMPO ; MOVER LITERAL PARA REG. W

* Valor contido no registro W depois da execuo da instruo:


0 1 1 1 1 1 0 1 W

- Valor em binrio * Valor contido no registro W antes da execuo da instruo:


0 0 0 0 0 0 0 0 W

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 42/103

* Instruo
MOVLW B'10000011' ; MOVER LITERAL PARA REG. W

* Valor contido no registro W depois da execuo da instruo:


1 0 0 0 0 0 1 1 W

- Valor em decimal * Valor contido no registro W antes da execuo da instruo:


0 0 0 0 0 0 0 0 W

* Instruo
MOVLW .123 ; MOVER LITERAL PARA REG. W

* Valor contido no registro W depois da execuo da instruo:


0 1 1 1 1 0 1 1 W

- Valor em hexadecimal * Valor contido no registro W antes da execuo da instruo:


0 0 0 0 0 0 0 0 W

* Instruo
MOVLW 0x4F ; MOVER LITERAL PARA REG. W

* Valor contido no registro W depois da execuo da instruo:


0 1 0 0 1 1 1 1 W

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 43/103

MOVF
MNEMNICO INSTRUO SINTAXE DESCRIO MOVF Move F MOVF [ registro origem ], [ registro destino ] Mover o valor contido no registro F identificado em [registro origem] para o registro identificado em [ registro destino ] Z (ver observao)

CICLO MQUINA 1 STATUS

Esta instruo usada para copiar o valor contido no registro F [registro origem] para o registro F identificado em [registro destino] da seguinte maneira: - se o registro de origem for o registro W, o registro de destino ser sempre o registro W. - se o registro de origem for o registro F, o registro de destino ser o registro F ou o registro W. - no possvel mover do registro de origem W para o registro de destino F. Observao: se o valor contido no registro de origem F for nulo (todos os bits contm o valor 0), a execuo da instruo MOVF muda o estado do bit Z do registro STATUS de 0 1, indicando que o resultado da operao foi nulo. O programador pode utilizar este evento para testar se o registro de origem F nulo ou no. EXEMPLO: - Mover valor do registro de origem W para o registro de destino W * Valor contido no registro W antes da execuo da instruo:
1 0 1 0 1 0 0 1 W

* Instruo
MOVF W,W ; MOVER O VALOR CONTIDO NO REG. W PARA O REG. W

* Valor contido no registro W depois da execuo da instruo:


1 0 1 0 1 0 0 1 W

- Mover valor do registro de origem F (INTCON) para o registro de destino F (INTCON). * Valor contido no registro INTCON antes da execuo da instruo:
1 0 1 0 1 1 1 1 INTCON

* Instruo
MOVF INTCON,F ; MOVER O VALOR CONTIDO NO REG. INTCON PARA ; O REG. INTCON

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 44/103

* Valor contido no registro INTCON depois da execuo da instruo:


1 0 1 0 1 0 0 1 INTCON

- Mover valor do registro de origem F (INTCON) para o registro de destino W * Valores contidos nos registros INTCON e W antes da execuo da instruo:
1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 INTCON W

* Instruo
MOVF INTCON,W ; MOVER O VALOR CONTIDO NO REG. INTCON PARA ; O REG. W

* Valores contidos nos registros INTCON e W depois da execuo da instruo:


1 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 INTCON W

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 45/103

MOVWF
MNEMNICO INSTRUO SINTAXE DESCRIO MOVFW Move W to F MOVWF [ nome registro ] Mover o valor contido no registro W para o registro F identificado em [ nome registro ] Nenhum

CICLO MQUINA 1 STATUS

Esta instruo usada para copiar o valor contido no registro W para o registro F identificado em [ nome registro ] EXEMPLO: Vamos realizar o exemplo com uma sequencia de instrues bastante comum nos programas, colocando o valor de um literal no registro W e, na sequencia, colocar o valor contido no registro W no registro INTCON (j existente na memria RAM rea SFR). A sequencia de instrues fica como abaixo:
MOVLW MOVWF B'10100000' INTCON ; GIE HABILITADO (INTERRUPES LIGADAS) ; INTERRUPO TMR0 HABILITADA

Os valores dentro dos registros modificam-se de acordo com a sequencia de instrues: * Valores contidos nos registros W e INTCON antes da execuo da instruo:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 W INTCON

* Instruo
MOVLW B'10100000'

* Valores contidos nos registros W e INTCON depois da execuo da instruo MOVLW:


1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 W INTCON

* Instruo
MOVWF INTCON ; GIE HABILITADO (INTERRUPES LIGADAS) ; INTERRUPO TMR0 HABILITADA

* Valores contidos nos registros W e INTCON depois da execuo da instruo MOVWF:


1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 W INTCON

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 46/103

NOP
MNEMNICO INSTRUO SINTAXE DESCRIO NOP No Operation NOP No executa nenhuma operao

CICLO MQUINA 1 STATUS Nenhum

Esta instruo no executa nenhuma operao especfica em um cdigo ou programa. A execuo da instruo NOP consome 1 CM (um ciclo de mquina) que pode ser empregado para produzir um atraso equivalente. EXEMPLO: Vamos considerar o cdigo abaixo:
INICIO BTFSC GOTO BSF NOP NOP NOP GOTO BOTAO DESLIGA_LED LED ; VERIFICA O ESTADO DO BIT QUE REPRESENTA BOTAO ; BOTAO = 0 > VAI PARA DESLIGA_LED ; BOTAO = 1 > LIGA LED ; ; AGUARDA 3 CM ANTES DA INSTRUO GOTO ; ; RETORNA PARA INICIO

INICIO

Entre a instruo BSF e a instruo GOTO existem tres instrues NOP, isto , o programa consome 3 CM sem realizar nenhuma operao. O nmero de vezes que a instruo NOP pode ser utilizada (sem sequencia ou no) no tem limite. Depende exclusivamente da necessidade de uso no programa.

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 47/103

RETFIE
MNEMNICO INSTRUO SINTAXE DESCRIO RETFIE Return From Interrupt Enable RETFIE Retorno de uma Interrupo

CICLO MQUINA 2 STATUS Nenhum

Esta instruo empregada somente para retorno de interrupo (qualquer tipo). Para melhor visualizao da aplicao da instruo, vamos considerar o cdigo abaixo como uma sequencia padro para tratamento de interrupes:
ORG GOTO SAI_INT RETFIE 0X04 ; ENDEREO DO VETOR DE INTERRUPO ; SEQUENCIA DE INSTRUES DO PROGRAMA ; PARA PRESERVAR CONTEXTO (REGISTROS ; IMPORTANTES)

; SEQUENCIA DE INSTRUES DO PROGRAMA ; PARA DETERMINAR QUAL INTERRUPO ; FOI ATIVADA PARA TRATAMENTO SAI_INT ; VAI PARA ROTINA DE SADA INTERRUPO ; QUANDO O TRATAMENTO TERMINAR ; SEQUENCIA DE INSTRUES DO PROGRAMA ; PARA RECUPERAR CONTEXTO (REGISTROS ; IMPORTANTES SALVOS) ; SADA DO TRATAMENTO DE INTERRUPO

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 48/103

RETURN
MNEMNICO INSTRUO SINTAXE DESCRIO RETURN Return RETURN Retorna de uma sub-rotina (sequencia de instrues pr-definida) executada completamente. Nenhum

CICLO MQUINA 2 STATUS

Esta instruo retorna ao programa aps a execuo das instrues de uma sub-rotina iniciada pela instruo CALL. EXEMPLO:
CALL SINALIZACAO ; DESVIA PARA SUB-ROTINA DE SINALIZACAO > ; SEQUENCIA DE INSTRUES DE EXECUO ; NORMAL DO PROGRAMA (BUSCA ENDEREO SINALIZACAO) SINALIZACAO ; SEQUENCIA DE INSTRUES DE EXECUO ; DA SUB-ROTINA SINALIZACAO RETURN ; SADA DA SUB-ROTINA SINALIZACAO (BUSCA ENDEREO DE RETORNO - linha seguinte da instruo CALL)

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 49/103

SWAPF
MNEMNICO INSTRUO SINTAXE DESCRIO SWAPF Swap Nibbles in F SWAPF [ registro origem ], [ registro destino ] Troca de posio o Nibble Alto (NIB_HI) com o Nibble Baixo (NIB_LO) do registro F identificado em [registro origem] e coloca o resultado da operao no registro identificado em [ registro destino ] Nenhum

CICLO MQUINA 1 STATUS

Esta instruo troca de posio os quatro bits menos significativos (Nibble Baixo (NIB_LO)) com os quatro bits mais significativos (Nibble Alto (NIB_HI)) do registro.
0 0 0 0 1 1 1 1 Registro

NIBBLE ALTO (NIB_HI)

NIBBLE BAIXO (NIB_LO)

O resultado da operao pode ser direcionado para um registro de destino da seguinte maneira: - se o registro de origem for o registro W, o registro de destino ser sempre o registro W. - se o registro de origem for o registro F, o registro de destino ser o registro F ou o registro W. Observao: quando a instruo for empregada no registro de origem F e o resultado da operao for colocado no registro de destino W, a instruo troca o Nibble Alto (NIB_HI) com o Nibble Baixo (NIB_LO) somente no registro de destino W, preservando a posio original no registro de origem F. EXEMPLO: - Trocar a posio no registro de origem W e colocar o resultado no registro de destino W * Valor contido no registro W antes da execuo da instruo:
0 0 0 0 1 1 1 1 W

* Instruo
SWAPF W,W ; TROCA O NIB_HI COM O NIB_LO DO REG. W ; E COLOCA O RESULTADO DA OPERAO ; NO REG. W

* Valor contido no registro W depois da execuo da instruo:


1 1 1 1 0 0 0 0 W

- Trocar a posio do registro de origem F (INTCON) e colocar o resultado no registro de destino F (INTCON). * Valor contido no registro INTCON antes da execuo da instruo:
0 0 0 0 1 1 1 1 INTCON
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 50/103

* Instruo
SWAPF INTCON,F ; TROCA O NIB_HI COM O NIB_LO DO REG. INTCON ; E COLOCA O RESULTADO DA OPERAO ; NO REG. INTCON

* Valor contido no registro INTCON depois da execuo da instruo:


1 1 1 1 0 0 0 0 INTCON

- Trocar a posio no registro de origem F (INTCON) e colocar o resultado no registro de destino W * Valores contidos nos registros INTCON e W antes da execuo da instruo:
0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 INTCON W

* Instruo
SWAPF INTCON,W ; TROCA O NIB_HI COM O NIB_LO DO REG. INTCON ; E COLOCA O RESULTADO DA OPERAO ; NO REG. W

* Valores contidos nos registros INTCON e W depois da execuo da instruo:


0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 INTCON W

Observao: notar que a instruo foi empregada no registro de origem INTCON e o resultado da operao foi colocado no registro de destino W, enquanto a troca do Nibble Alto (NIB_HI) com o Nibble Baixo (NIB_LO) ocorreu somente no registro de destino W, preservando a posio original no registro de origem INTCON.

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 51/103

IORWF
MNEMNICO INSTRUO SINTAXE DESCRIO IORWF W logic OR with F IORWF [ registro origem ], [ registro destino ] Realiza a operao lgica OR (ou) entre o valor contido no registro W e o valor contido no registro F identificado em [registro origem], e coloca o resultado da operao no registro identificado em [ registro destino ] Z

CICLO MQUINA 1 STATUS

Esta instruo realiza a operao lgica OR (ou), bit a bit, entre o valor contido no registro W e o valor contido no registro F de acordo com a expresso booleana: - registro de destino W - registro de destino F W =W + F F =W + F

A tabela verdade da lgica OR (ou) representada abaixo para todas as possveis combinaes de W e F:
W 0 0 1 1 F 0 1 0 1 0 1 1 1

A Unidade Lgica do processador realiza a operao em cada bit dos registros individualmente, colocando o resultado da operao no bit correspondente do registro de destino (W ou F), onde o sinal + representa a operao lgica ou:
Bit 0 1 2 3 4 5 6 7 W 0 0 1 1 0 0 1 1 + + + + + + + + F 0 1 0 1 0 1 0 1 = = = = = = = = 0 1 1 1 0 1 1 1

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 52/103

EXEMPLO: - Realizar a lgica OR (ou) entre o registro W e o registro CONT e colocar o resultado no registro W * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 W CONT

* Instruo
IORWF CONT,W ; LGICA OR ENTRE O REG. W E O REG. CONT COLOCAR O ; RESULTADO DA OPERAO NO REG. W 0 1 1 1 0 0 0 1 W (OR) + CONT

+
0

+
1

+
1

+
0

+
1

+
0

+
0

+
0

Ateno: o sinal + representa a operao lgica ou. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 0 1 1 1 1 1 0 1 1 0 0 0 0 1 0 W CONT

Observao: notar que o valor contido no registro W sofreu modificao (apresenta o resultado da operao aps a execuo da instruo), enquanto o registro CONT permanece inalterado (o valor contido originalmente preservado). - Realizar a lgica OR (ou) entre o registro W e o registro CONT e colocar o resultado no registro CONT * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 W CONT

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 53/103

* Instruo
IORWF CONT,F ; LGICA OR ENTRE O REG. W E O REG. CONT - COLOCAR ; O RESULTADO DA OPERAO NO REG. CONT 0 1 1 1 0 0 0 1 W (OR) + CONT

+
0

+
1

+
1

+
0

+
1

+
0

+
0

+
0

CONT

Ateno: o sinal + representa a operao lgica ou. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 0 1 1 1 1 1 1 0 1 0 0 0 0 1 1 W CONT

Observao: notar que o valor contido no registro CONT sofreu modificao (apresenta o resultado da operao aps a execuo da instruo), enquanto o registro W permanece inalterado (o valor contido originalmente preservado).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 54/103

ANDWF
MNEMNICO INSTRUO SINTAXE DESCRIO ANDWF W logic AND with F ANDWF [ registro origem ], [ registro destino ] Realiza a operao lgica AND (e) entre o valor contido no registro W e o valor contido no registro F identificado em [registro origem], e coloca o resultado da operao no registro identificado em [ registro destino ] Z

CICLO MQUINA 1 STATUS

Esta instruo realiza a operao lgica AND (e), bit a bit, entre o valor contido no registro W e o valor contido no registro F de acordo com a expresso booleana: - registro de destino W - registro de destino F W =W F F =W F

A tabela verdade da lgica AND (e) representada abaixo para todas as possveis combinaes de W e F:
W 0 0 1 1 F 0 1 0 1 0 0 0 1

A Unidade Lgica do processador realiza a operao em cada bit dos registros individualmente, colocando o resultado da operao no bit correspondente do registro de destino (W ou F), onde o sinal representa a operao lgica e:
Bit 0 1 2 3 4 5 6 7 W 0 0 1 1 0 0 1 1 F

0 1 0 1 0 1 0 1

= = = = = = = =

0 0 0 1 0 0 0 1

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 55/103

EXEMPLO: - Realizar a lgica AND (e) entre o registro W e o registro CONT e colocar o resultado no registro W * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 W CONT

* Instruo
ANDWF CONT,W ; LGICA AND ENTRE O REG. W E O REG. CONT ; COLOCAR O RESULTADO DA OPERAO NO REG W

W (AND)

CONT

Ateno: o sinal representa a operao lgica e. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 0 1 1 1 1 0 0 0 1 0 0 0 0 0 0 W CONT

Observao: notar que o valor contido no registro W sofreu modificao (apresenta o resultado da operao aps a execuo da instruo), enquanto o registro CONT permanece inalterado (o valor contido originalmente preservado). - Realizar a lgica AND (e) entre o registro W e o registro CONT e colocar o resultado no registro CONT * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 W CONT

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 56/103

* Instruo
ANDWF CONT,F ; LGICA AND ENTRE O REG. W E O REG. CONT ; COLOCAR O RESULTADO DA OPERAO NO REG W 0 1 1 1 0 0 0 1 W (AND)

CONT

CONT

Ateno: o sinal representa a operao lgica e. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 0 W CONT

Observao: notar que o valor contido no registro CONT sofreu modificao (apresenta o resultado da operao aps a execuo da instruo), enquanto o registro W permanece inalterado (o valor contido originalmente preservado).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 57/103

XORWF
MNEMNICO INSTRUO SINTAXE DESCRIO XORWF W logic EXCLUSIVE-OR with F XORWF [ registro origem ], [ registro destino ] Realiza a operao lgica EXCLUSIVE-OR (ou-exclusivo) entre o valor contido no registro W e o valor contido no registro F identificado em [registro origem], e coloca o resultado da operao no registro identificado em [ registro destino ] Z

CICLO MQUINA 1 STATUS

Esta instruo realiza a operao lgica AND (e), bit a bit, entre o valor contido no registro W e o valor contido no registro F de acordo com a expresso booleana: - registro de destino W - registro de destino F W =W F F =W F

A tabela verdade da lgica EXCLUSIVE-OR (ou-exclusivo) representada abaixo para todas as possveis combinaes de W e F:
W 0 0 1 1 F 0 1 0 1 0 1 1 0

A Unidade Lgica do processador realiza a operao em cada bit dos registros individualmente, colocando o resultado da operao no bit correspondente do registro de destino (W ou F), onde o sinal representa a operao lgica exclusive-or:
Bit 0 1 2 3 4 5 6 7 W 0 0 1 1 0 0 1 1 F

0 1 0 1 0 1 0 1

= = = = = = = =

0 1 1 1 0 1 1 0

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 58/103

EXEMPLO: - Realizar a lgica EXCLUSIVE-OR (ou-exclusivo) entre o registro W e o registro CONT e colocar o resultado no registro W * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 W CONT

* Instruo
XORWF CONT,W ; LGICA EXCLUSIVE-OR ENTRE O REG. W E O REG. CONT ; COLOCAR O RESULTADO DA OPERAO NO REG W 0 1 1 1 0 0 0 1 W


0 1 1 0 1 0 0 0

CONT

Ateno: o sinal representa a operao lgica ou-exclusivo. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 0 0 1 0 1 1 0 1 1 0 0 0 0 1 0 W CONT

Observao: notar que o valor contido no registro W sofreu modificao (apresenta o resultado da operao aps a execuo da instruo), enquanto o registro CONT permanece inalterado (o valor contido originalmente preservado). - Realizar a lgica EXCLUSIVE-OR (ou-exclusivo) entre o registro W e o registro CONT e colocar o resultado no registro CONT * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 W CONT

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 59/103

* Instruo
XORWF CONT,F ; LGICA EXCLUSIVE-OR ENTRE O REG. W E O REG. CONT ; COLOCAR O RESULTADO DA OPERAO NO REG W 0 1 1 1 0 0 0 1 W


0 1 1 0 1 0 0 0

CONT

CONT

Ateno: o sinal representa a operao lgica ou-exclusivo. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 0 1 0 1 0 1 1 0 1 0 0 0 0 1 1 W CONT

Observao: notar que o valor contido no registro CONT sofreu modificao (apresenta o resultado da operao aps a execuo da instruo), enquanto o registro W permanece inalterado (o valor contido originalmente preservado).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 60/103

ANDLW
MNEMNICO INSTRUO SINTAXE DESCRIO ANDLW Literal logic AND with W ANDLW [ nome literal ] Realiza a operao lgica AND (e) entre o valor do literal identificado em [ nome literal ] e o valor contido no registro W; o resultado da operao ser colocado no registro W. Z

CICLO MQUINA 1 STATUS

Esta instruo realiza a operao lgica AND (e), bit a bit, entre o valor de um nmero ou constante (literal) e o valor contido no registro W de acordo com a expresso booleana:
W = Literal W

O valor do literal deve ser relacionado a um nome estabelecido pelo programador e declarado dentro das diretivas. A tabela verdade da lgica AND (e) representada abaixo para todas as possveis combinaes do literal e W:
Literal 0 0 1 1 W 0 1 0 1 0 0 0 1

A Unidade Lgica do processador realiza a operao em cada bit dos registros individualmente, colocando o resultado da operao no bit correspondente do registro W, onde o sinal representa a operao lgica e:
Bit 0 1 2 3 4 5 6 7 Literal 0 0 1 1 0 0 1 1 W

0 1 0 1 0 1 0 1

= = = = = = = =

0 0 0 1 0 0 0 1

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 61/103

EXEMPLO: - Realizar a lgica AND (e) entre o literal SOMA_REF e o registro W e colocar o resultado no registro W * Relacionar o literal (ou constante) a um nome e declarar o valor na rea de diretivas:
SOMA_REF EQU .125 ; VALOR DE REFERENCIA DA SOMA

* Valores contidos nos registros W e SOMA_REF antes da execuo da instruo:


0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 1 W SOMA_REF

* Instruo
ANDLW SOMA_REF,W ; LGICA AND ENTRE O LITERAL SOMA_REF E O REG. W ; COLOCAR O RESULTADO DA OPERAO NO REG W 1 1 1 0 0 0 1 W (AND)

SOMA_REF

Ateno: o sinal representa a operao lgica e. * Valores contidos nos registros W e SOMA_REF depois da execuo da instruo:
0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 1 W SOMA_REF

Observao: notar que o valor contido no registro W sofreu modificao (apresenta o resultado da operao aps a execuo da instruo), enquanto o registro SOMA_REF permanece inalterado (o valor do literal no sofre alterao).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 62/103

IORLW
MNEMNICO INSTRUO SINTAXE DESCRIO IORLW Literal logic OR with W IORLW [ nome literal ] Realiza a operao lgica OR (ou) entre o valor do literal identificado em [ nome literal ] e o valor contido no registro W; o resultado da operao ser colocado no registro W. Z

CICLO MQUINA 1 STATUS

Esta instruo realiza a operao lgica OR (ou), bit a bit, entre o valor de um nmero ou constante (literal) e o valor contido no registro W de acordo com a expresso booleana:
W = Literal + W

O valor do literal deve ser relacionado a um nome estabelecido pelo programador e declarado dentro das diretivas. A tabela verdade da lgica OR (ou) representada abaixo para todas as possveis combinaes de W e F:
W 0 0 1 1 F 0 1 0 1 0 1 1 1

A Unidade Lgica do processador realiza a operao em cada bit dos registros individualmente, colocando o resultado da operao no bit correspondente do registro W, onde o sinal + representa a operao lgica ou:
Bit 0 1 2 3 4 5 6 7 Literal 0 0 1 1 0 0 1 1 + + + + + + + + W 0 1 0 1 0 1 0 1 = = = = = = = = 0 1 1 1 0 1 1 1

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 63/103

EXEMPLO: - Realizar a lgica OR (ou) entre o literal SOMA_REF e o registro W e colocar o resultado no registro W * Relacionar o literal (ou constante) a um nome e declarar o valor na rea de diretivas:
SOMA_REF EQU .125 ; VALOR DE REFERENCIA DA SOMA

* Valores contidos nos registros W e SOMA_REF antes da execuo da instruo:


0 0 IORLW SOMA_REF,W 1 1 1 1 1 1 0 1 0 1 0 0 1 1 W SOMA_REF

; LGICA OR ENTRE O LITERAL SOMA_REF E O REG. W ; COLOCAR O RESULTADO DA OPERAO NO REG. W 0 1 1 1 0 0 0 1 W (OR) + SOMA_REF

+
0

+
1

+
1

+
1

+
1

+
1

+
0

+
1

Ateno: o sinal + representa a operao lgica ou. * Valores contidos nos registros W e SOMA_REF depois da execuo da instruo:
0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 W SOMA_REF

Observao: notar que o valor contido no registro W sofreu modificao (apresenta o resultado da operao aps a execuo da instruo), enquanto o registro SOMA_REF permanece inalterado (o valor do literal no sofre alterao).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 64/103

XORLW
MNEMNICO INSTRUO SINTAXE DESCRIO XORLW Literal logic EXCLUSIVE-OR with W XORLW [ nome literal ] Realiza a operao lgica EXCLUSIVE-OR (ou-exclusivo) entre o valor do literal identificado em [ nome literal ] e o valor contido no registro W; e coloca o resultado da operao no registro W. Z

CICLO MQUINA 1 STATUS

Esta instruo realiza a operao lgica AND (e), bit a bit, entre o valor de um nmero ou constante (literal) e o valor contido no registro W de acordo com a expresso booleana:
W = Literal W

A tabela verdade da lgica EXCLUSIVE-OR (ou-exclusivo) representada abaixo para todas as possveis combinaes de W e F:
W 0 0 1 1 F 0 1 0 1 0 1 1 0

A Unidade Lgica do processador realiza a operao em cada bit dos registros individualmente, colocando o resultado da operao no bit correspondente do registro de destino (W ou F), onde o sinal representa a operao lgica exclusive-or:
Bit 0 1 2 3 4 5 6 7 Literal 0 0 1 1 0 0 1 1 F

0 1 0 1 0 1 0 1

= = = = = = = =

0 1 1 1 0 1 1 0

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 65/103

EXEMPLO: - Realizar a lgica EXCLUSIVE-OR (ou-exclusivo) entre o literal SOMA_REF e o registro W e colocar o resultado no registro W * Relacionar o literal (ou constante) a um nome e declarar o valor na rea de diretivas:
SOMA_REF EQU .125 ; VALOR DE REFERENCIA DA SOMA

* Valores contidos nos registros W e SOMA_REF antes da execuo da instruo:


0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 1 W SOMA_REF

* Instruo
XORLW SOMA_REF,W ; LGICA EXCLUSIVE-OR ENTRE O LITERAL SOMA_REF ; E O O REG. W - COLOCAR O RESULTADO DA OPERAO ; NO REG W 1 1 1 0 0 0 1 W


0 1 1 1 1 1 0 1

SOMA_REF

Ateno: o sinal representa a operao lgica ou-exclusivo. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 1 W SOMA_REF

Observao: notar que o valor contido no registro W sofreu modificao (apresenta o resultado da operao aps a execuo da instruo), enquanto o registro SOMA_REF permanece inalterado (o valor do literal no sofre alterao).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 66/103

ADDWF
MNEMNICO INSTRUO SINTAXE DESCRIO ADDWF Add W to F ADDWF [ registro origem ], [ registro destino ] Soma o valor contido no registro W com o valor contido no registro F identificado em [registro origem], e coloca o resultado da operao no registro identificado em [ registro destino ] C, Z

CICLO MQUINA 1 STATUS

Esta instruo realiza a operao aritmtica da adio, bit a bit, entre o valor contido no registro W e o valor contido no registro F de acordo com a expresso algbrica: - registro de destino W - registro de destino F W =W + F F =W + F

O processo aritmtico de soma com nmeros binrios segue o procedimento:


0 1 0 1

+
0 0 0 1

+
1 1

+
1

10

A operao aritmtica de adio deve atender aos limites impostos pelo tamanho do registro (8 bits), isto , o resultado final da operao deve ser necessriamente menor ou igual a 255. Com operaes onde o valor do resultado maior que 255, a sinalizao feita atravs do bit (flag) C no registro STATUS, que muda de 0 (zero) para 1 (um) indicando a ocorrencia de resultado da operao com valor maior que 255 (overflow):
> flag sinalizao resultado operao >255 IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

Observao: 1. o valor x representa valor irrelevante (no influencia o resultado). 2. o retorno a 0 (zero) do flag feito automaticamente pela Unidade Lgica. 3. uma vez indicada a ocorrencia de overflow (excesso) da operao, o flag C pode permanecer com valor 1 (um) por vrios ciclos de mquina - a Unidade Lgica retorna o flag a 0 (zero) no ciclo imediatamente anterior a uma nova operao aritmtica. O programador deve estabelecer procedimentos para determinar a ocorrencia de overflow (excesso) nas operaes de adio previstas no cdigo_fonte.

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 67/103

EXEMPLO: - Registro de destino W W =W + F

- Somar o valor contido no registro W com o valor contido no registro CONT e colocar o resultado no registro W a) Resultado da operao menor ou igual a 255 * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 113 104 W CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

* Instruo
ADDWF CONT,W ; SOMAR O VALOR DO REG. W COM O VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. W 1 1 1 0 0 0 1 113 W (SOMA) + CONT

+
0

+
1

+
1

+
0

+
1

+
0

+
0

+
0

+
104

217

Ateno: o sinal + representa a operao aritmtica da adio. * Valores contidos nos registros W e CONT depois da execuo da instruo:
1 0 1 1 0 1 1 0 1 1 0 0 0 0 1 0 217 104 W CONT

Observao: notar que o valor contido no registro W apresenta o resultado da operao aps a execuo da instruo, enquanto o registro CONT permanece inalterado (o valor contido originalmente preservado).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 68/103

* Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao foi um nmero menor que 255 logo, o flag de sinalizao permanece igual a 0 (zero).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

b) Resultado da operao maior que 255 (uso do flag CARRY do registro STATUS) * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 113 145 W CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

* Instruo
ADDWF CONT,W ; SOMAR O VALOR DO REG. W COM O VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. W 1 1 1 0 0 0 1 113 W (SOMA) + CONT

+
1

+
0

+
0

+
1

+
0

+
0

+
0

+
1

+
145

Ateno: o sinal + representa a operao aritmtica da adio. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1 2 145 W CONT

Observao: notar que o valor contido no registro W apresenta o resultado da operao aps a execuo da instruo, enquanto o registro CONT permanece inalterado (o valor contido originalmente preservado).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 69/103

* Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao de adio foi um nmero maior que 255 logo, o flag de sinalizao muda de estado, passando a 1 (um).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 1 STATUS
MSB LSB

Vamos olhar o resultado desta operao. Fizemos uma operao de adio entre dois valores (113 e 145) que deve apresentar o resultado esperado de 258 (maior que 255):
113

+
145 258

A resposta do flag C no registro STATUS aconteceu da forma esperada, isto , mudou do valor 0 (zero) para o valor 1 (um), indicando que o resultado final da operao tem valor maior que 255:
IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 1
MSB LSB

STATUS

Porm, o resultado apresentado no registro W no corresponde ao valor esperado (258), mas apresentou o valor 2:
0 0 0 0 0 0 1 0 2 W

O valor 258 no cabe em 8 bits. Para represent-lo so necessrios pelo menos 9 bits e, como pode ser observado, os 8 bits menos significativos representam o valor 2.
> nono bit - inexistente - peso 29 = 256 1 0 0 0 0 0 0 1 0 258 W

Como toda a estrutura do microcontrolador baseada em 8 bits, o flag C do registro STATUS representa o nono bit necessrio para a composio de valores maiores do que 255.
> flag C do registro STATUS - representa o nono bit com peso 29 = 256 1 0 0 0 0 0 0 1 0 258 CONT

> 2 + > 256


258

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 70/103

- Registro de destino F

F =W + F

- Somar o valor contido no registro W com o valor contido no registro CONT e colocar o resultado no registro CONT a) Resultado da operao menor ou igual a 255 * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 113 104 W CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

* Instruo
ADDWF CONT,F ; SOMAR O VALOR DO REG. W COM O VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. CONT 0 1 1 1 0 0 0 1 113 W (SOMA) + CONT

+
0

+
1

+
1

+
0

+
1

+
0

+
0

+
0

+
104

217

CONT

Ateno: o sinal + representa a operao aritmtica da adio. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 1 1 1 1 0 1 1 0 1 0 0 0 0 1 1 113 217 W CONT

Observao: notar que o valor contido no registro CONT apresenta o resultado da operao aps a execuo da instruo, enquanto o registro W permanece inalterado (o valor contido originalmente preservado).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 71/103

* Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao foi um nmero menor que 255 logo, o flag de sinalizao permanece igual a 0 (zero).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

b) Resultado da operao maior que 255 (uso do flag CARRY do registro STATUS) * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 113 145 W CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

* Instruo
ADDWF CONT,F ; SOMAR O VALOR DO REG. W COM O VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. CONT 0 1 1 1 0 0 0 1 113 W (SOMA) + CONT

+
1

+
0

+
0

+
1

+
0

+
0

+
0

+
1

+
145

CONT

Ateno: o sinal + representa a operao aritmtica da adio. * Valores contidos nos registros W e CONT depois da execuo da instruo:
0 0 1 0 1 0 1 0 0 0 0 0 0 1 1 0 113 2 W CONT

Observao: notar que o valor contido no registro CONT apresenta o resultado da operao aps a execuo da instruo, enquanto o registro W permanece inalterado (o valor contido originalmente preservado).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 72/103

* Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao de adio foi um nmero maior que 255 logo, o flag de sinalizao muda de estado, passando a 1 (um).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 1 STATUS
MSB LSB

Vamos olhar o resultado desta operao. Fizemos uma operao de adio entre dois valores (113 e 145) que deve apresentar o resultado esperado de 258 (maior que 255):
113

+
145 258

A resposta do flag C no registro STATUS aconteceu da forma esperada, isto , mudou do valor 0 (zero) para o valor 1 (um), indicando que o resultado final da operao tem valor maior que 255:
IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 1
MSB LSB

STATUS

Porm, o resultado apresentado no registro CONT no corresponde ao valor esperado (258), mas apresentou o valor 2:
0 0 0 0 0 0 1 0 2 CONT

O valor 258 no cabe em 8 bits. Para represent-lo so necessrios pelo menos 9 bits e, como pode ser observado, os 8 bits menos significativos representam o valor 2.
> nono bit - inexistente - peso 29 = 256 1 0 0 0 0 0 0 1 0 258 CONT

> 2 - 8 bits menos significativos Como toda a estrutura do microcontrolador baseada em 8 bits, o flag C do registro STATUS representa o nono bit necessrio para a composio de valores maiores do que 255.
> flag C do registro STATUS - representa o nono bit com peso 29 = 256 1 0 0 0 0 0 0 1 0 258 CONT

> 2 + > 256


258
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 73/103

O programador deve prever tcnicas de avaliao dos resultados da operao dentro do cdigo_fonte para interpretar os resultados obtidos nas operaes aritmticas realizadas e, se necessrio, acrescentar um novo registro para representar valores com mais de 8 bits.

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 74/103

ADDLW
MNEMNICO INSTRUO SINTAXE DESCRIO ADDLW Add Literal to F ADDLW [ nome literal ] Soma o valor contido no registro W com o valor do literal identificado em [ nome literal] - o resultado da operao sempre colocado no registro W. C, DC, Z

CICLO MQUINA 1 STATUS

Esta instruo realiza a operao aritmtica da adio, bit a bit, entre e o valor de um nmero ou constante (literal) e o valor contido no registro W de acordo com a expresso algbrica:
W = Literal + W

O processo aritmtico de soma com nmeros binrios segue o procedimento:


0 1 0 1

+
0 0 0 1

+
1 1

+
1

10

A operao aritmtica de adio deve atender aos limites impostos pelo tamanho do registro (8 bits), isto , o resultado final da operao deve ser necessriamente menor ou igual a 255. Com operaes onde o valor do resultado maior que 255, a sinalizao feita atravs do bit (flag) C no registro STATUS, que muda de 0 (zero) para 1 (um) indicando a ocorrencia de resultado da operao com valor maior que 255 (overflow):
> flag sinalizao resultado operao >255 IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

Observao: 1. o valor x representa valor irrelevante (no influencia o resultado). 2. o retorno a 0 (zero) do flag feito automaticamente pela Unidade Lgica. 3. uma vez indicada a ocorrencia de overflow (excesso) da operao, o flag C pode permanecer com valor 1 (um) por vrios ciclos de mquina - a Unidade Lgica retorna o flag a 0 (zero) no ciclo imediatamente anterior a uma nova operao aritmtica. O programador deve estabelecer procedimentos para determinar a ocorrencia de overflow (excesso) nas operaes de adio previstas no cdigo_fonte.

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 75/103

EXEMPLO: - Somar o valor contido no registro W com o valor do literal CTE_CONT - o resultado ser sempre colocado no registro W a) Resultado da operao menor ou igual a 255 * Relacionar o literal (ou constante) a um nome e declarar o valor na rea de diretivas:
CTE_CONT EQU .104 ; VALOR DA CONSTANTE DE INCIO DO REG CONTADOR

Ateno: valores numricos declarados na rea de diretivas so armazenados dentro da memria de programa - no possvel fazer alteraes de valor atravs do cdigo_fonte. * Valores contidos nos registros W e CTE_CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 113 104 W CTE_CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

* Instruo
ADDLW CTE_CONT ; SOMAR O VALOR DO REG. W COM O VALOR DO LITERAL ; CTE_CONT - O RESULTADO DA OPERAO SER ; COLOCADO NO REG. W 1 1 1 0 0 0 1 113 W (SOMA) + CTE_CONT

+
0

+
1

+
1

+
0

+
1

+
0

+
0

+
0

+
104

217

Ateno: o sinal + representa a operao aritmtica da adio. * Valores contidos nos registros W e CTE_CONT depois da execuo da instruo:
1 0 1 1 0 1 1 0 1 1 0 0 0 0 1 0 217 104 W CTE_CONT

Observao: notar que o valor contido no registro W apresenta o resultado da operao aps a execuo da instruo. O registro CTE_CONT permanece inalterado.
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 76/103

* Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao foi um nmero menor que 255 logo, o flag de sinalizao permanece igual a 0 (zero).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x X x x 0 STATUS
MSB LSB

b) Resultado da operao maior que 255 (uso do flag CARRY do registro STATUS) * Relacionar o literal (ou constante) a um nome e declarar o valor na rea de diretivas:
CTE_CONT EQU .104 ; VALOR DA CONSTANTE DE INCIO DO REG CONTADOR

Ateno: valores numricos declarados na rea de diretivas so armazenados dentro da memria de programa - no possvel fazer alteraes de valor atravs do cdigo_fonte. * Valores contidos nos registros W e CTE_CONT antes da execuo da instruo:
1 0 0 1 0 1 1 0 1 1 0 0 1 0 0 0 154 104 W CTE_CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x X x x 0 STATUS
MSB LSB

* Instruo
ADDLW CTE_CONT ; SOMAR O VALOR DO REG. W COM O VALOR DO LITERAL ; CTE_CONT - O RESULTADO DA OPERAO SER ; COLOCADO NO REG. W 0 0 1 1 0 1 0 154 W (SOMA) + CTE_CONT

+
0

+
1

+
1

+
0

+
1

+
0

+
0

+
0

+
104

Ateno: o sinal + representa a operao aritmtica da adio.

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 77/103

* Valores contidos nos registros W e CTE_CONT depois da execuo da instruo:


0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 2 104 W CTE_CONT

Observao: notar que o valor contido no registro W apresenta o resultado da operao aps a execuo da instruo. O registro CTE_CONT permanece inalterado. * Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao de adio foi um nmero maior que 255 logo, o flag de sinalizao muda de estado, passando a 1 (um).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 1 STATUS
MSB LSB

Vamos olhar o resultado desta operao. Fizemos uma operao de adio entre dois valores (154 e 104) que deve apresentar o resultado esperado de 258 (maior que 255):
154

+
104 258

A resposta do flag C no registro STATUS aconteceu da forma esperada, isto , mudou do valor 0 (zero) para o valor 1 (um), indicando que o resultado final da operao tem valor maior que 255:
IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 1
MSB LSB

STATUS

Porm, o resultado apresentado no registro W no corresponde ao valor esperado (258), mas apresentou o valor 2:
0 0 0 0 0 0 1 0 2 W

O valor 258 no cabe em 8 bits. Para represent-lo so necessrios pelo menos 9 bits e, como pode ser observado, os 8 bits menos significativos representam o valor 2.
> nono bit - inexistente - peso 29 = 256 1 0 0 0 0 0 0 1 0 258 W

Como a estrutura do microcontrolador baseada em 8 bits, o flag C do registro STATUS representa o nono bit necessrio para a composio de valores maiores do que 255.

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 78/103

> flag C do registro STATUS - representa o nono bit com peso 29 = 256 1 0 0 0 0 0 0 1 0 258 W

> 2 + > 256


258

O programador deve prever tcnicas de avaliao dos resultados da operao dentro do cdigo_fonte para interpretar os resultados obtidos nas operaes aritmticas realizadas e, se necessrio, acrescentar um novo registro para representar valores com mais de 8 bits.

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 79/103

SUBWF
MNEMNICO INSTRUO SINTAXE DESCRIO SUBWF Subtract W from F SUBWF [ registro origem ], [ registro destino ] Subtrai o valor contido no registro W do valor contido no registro F identificado em [registro origem], e coloca o resultado da operao no registro identificado em [ registro destino ] C, DC, Z

CICLO MQUINA 1 STATUS

Esta instruo realiza a operao aritmtica da subtrao entre o valor contido no registro W (mtodo do complemento de 2 - twos complement), e o valor contido no registro F de acordo com a expresso algbrica: - registro de destino W - registro de destino F W = F W F = F W

O mecanismo utilizado pela Unidade Lgica e Aritmtica para a execuo da subtrao realiza a adio do primeiro operador (F) ao complemento de 2 do segundo operador (W). O uso do complemento de 2 do segundo operador considera o fato do valor ser negativo, o que coloca a expresso algbrica efetivamente empregada no formato: - registro de destino W - registro de destino F W = F + (W ) F = F + (W )

Os resultados obtidos com a operao de subtrao so sinalizados pelos flags C e Z do registro STATUS:
> flag sinalizao resultado operao nulo > flag sinalizao resultado operao positivo/negativo IRP RP1 RP0 /TO /PD Z DC C x x x x x 0 x 0 STATUS
MSB LSB

Observao: 1. o valor x representa valor irrelevante (no influencia o resultado). 2. o retorno a 0 (zero) do flag feito automaticamente pela Unidade Lgica. 3. uma vez indicada a ocorrencia de overflow (excesso) da operao, os flags C e Z podem permanecer com valor 1 (um) por vrios ciclos de mquina - a Unidade Lgica retorna os flags a 0 (zero) no ciclo imediatamente anterior a uma nova operao aritmtica. Considerando que os valores de F e W so sempre positivos (F>0 e W>0), o resultado da operao de subtrao depende da ordem de grandeza dos valores envolvidos nos registros F e W, de acordo com as possibilidades: - F > W o resultado da operao um nmero positivo - o valor representado pelo registro que contm o resultado est na forma direta e o flag C do registro STATUS colocado no valor 1 (um).

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 80/103

- F < W o resultado da operao um nmero negativo - o valor representado pelo registro que contm o resultado est na forma do complemento de 2 e o flag C do registro STATUS mantido no valor 0 (zero). - F = W o resultado da operao nulo - o valor representado pelo registro que contm o resultado nulo (todos os bits do registro tem valor 0 - zero), o flag C do registro STATUS mantido no valor 0 (zero) e o flag Z do registro STATUS colocado no valor 1 (um), indicando que o resultado da operao foi nulo (o flag Z sinaliza resultado nulo da ltima operao). O programador deve prever tcnicas de avaliao da operao dentro do cdigo_fonte para interpretar os resultados obtidos. EXEMPLO: - Registro de destino W W = F W

- Subtrair o valor contido no registro W do valor contido no registro CONT e colocar o resultado no registro W a) F > W o resultado da operao um nmero positivo - o valor representado pelo registro que contm o resultado (W) est na forma direta e o flag C do registro STATUS colocado no valor 1 (um). * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 0 1 1 0 0 0 0 0 0 1 104 113 W CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

* Instruo
SUBWF CONT,W ; SUBTRAIR O VALOR DO REG. W DO VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. W 1 1 1 0 0 0 1 113 CONT (SUBTRAI) W

104

Ateno: o sinal - representa a operao aritmtica da subtrao.


Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 81/103

* Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao de subtrao foi um nmero positivo (CONT > W) logo, o flag de sinalizao muda de estado, passando a 1 (um).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x X x 1 STATUS
MSB LSB

* Valores contidos nos registros W e CONT depois da execuo da instruo:


0 0 0 1 0 1 0 1 1 0 0 0 0 0 1 1 9 113 W CONT

Observao: notar que o valor contido no registro W apresenta o resultado da operao aps a execuo da instruo, enquanto o registro CONT permanece inalterado (o valor contido originalmente preservado). Se na operao aritmtica de subtrao o flag C do registro STATUS muda seu estado de 0 (zero) para 1 (um), o programador deve estabelecer o procedimento adequado no cdigo_fonte para interpretar o resultado como: - o valor contido no registro CONT maior que o valor contido no registro W (CONT > W) antes da execuo da operao de subtrao. - o valor contido no registro W aps a execuo da operao de subtrao um nmero positivo e representa o resultado final da operao. _______________________________________________________________________________________ Vamos observar como a Unidade Lgica e Aritmtica realizou a operao de subtrao quando F > W: A operao efetivamente realizada foi: W = CONT + (W ) Isto , a ULA realizou uma operao de adio de um valor positivo (CONT) com um valor negativo (W). Para representar um valor negativo na forma binria utiliza-se o complemento de 2 (twos complement) deste valor, calculado da seguinte forma: a) determina-se o complemento de 1 (ones complement) invertendo os valores de todos os bits contidos no registro: * Valor contido no registro W antes da execuo do complemento de 1:
0 1 1 0 1 0 0 0 104 W

* Valor contido no registro W aps a execuo do complemento de 1:


1 0 0 1 0 1 1 1 151 (COMP 1) W

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 82/103

b) somar 1 (um) ao valor do complemento de 1 (ones complement) para se obter o complemento de 2 (twos complement):
1 0 0 1 0 1 1 1 151 (COMP 1) W (SOMA) + UNIDADE

+
0

+ + + + + +
0 0 0 0 0 0

+
1

+
1

152

(COMP 2) W

Com o valor do complemento de 2 do registro W ((COMP 2) W), a ULA realiza a operao de adio dos valores de CONT e (COMP 2) W:
0 1 1 1 0 0 0 1 113 CONT (SOMA) +
(COMP 2)

+
1

+ + + + + +
0 0 1 1 0 0

+
0

+
152

* Valor contido no registro W depois da execuo da adio:


0 0 0 0 1 0 0 1 9 W

O resultado da operao de adio foi um nmero maior que 255 logo, o flag C do registro STATUS muda de estado, passando a 1 (um).
IRP RP1 RP0 /TO /PD Z x x x x x x
MSB

> flag sinalizao aps a execuo da instruo DC C x 1 STATUS


LSB

Vamos olhar o resultado desta operao. A ULA fez uma operao de adio entre dois valores (113 e 152) que deve apresentar o resultado maior que 255 (no caso, 265):
113

+
152 265

A resposta do flag C no registro STATUS mudou do valor 0 (zero) para o valor 1 (um), indicando que o resultado final da operao tem valor maior que 255.
IRP RP1 RP0 /TO /PD Z x x x x x x
MSB

DC C x 1
LSB

STATUS

Porm, o resultado apresentado no registro W no corresponde ao valor esperado da adio (265), mas apresentou o valor 9:
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 83/103

O valor 265 no cabe em 8 bits. Para represent-lo so necessrios pelo menos 9 bits e, como pode ser observado, os 8 bits menos significativos representam o valor 9.
> nono bit - inexistente - peso 29 = 256 1 0 0 0 0 1 0 0 1 265 W

Na estrutura de 8 bits, o flag C do registro STATUS representa o nono bit necessrio para a composio de valores maiores do que 255. Consequentemente, o resultado apresentado pela ULA fica:
> flag C do registro STATUS - indica resultado da subtrao positivo (CONT > W) 1 0 0 0 0 1 0 0 1 9 W

> registro apresenta o valor real da subtrao _______________________________________________________________________________________

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 84/103

b) F < W o resultado da operao um nmero negativo - o valor representado pelo registro que contm o resultado (W) est na forma complemento de 2 e o flag C do registro STATUS mantm o valor 0 (zero). * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 113 104 W CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

* Instruo
SUBWF CONT,W ; SUBTRAIR O VALOR DO REG. W DO VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. W 1 1 0 1 0 0 0 104 CONT (SUBTRAI)) W

113

247

Ateno: o sinal - representa a operao aritmtica da subtrao. * Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao de subtrao foi um nmero positivo (CONT > W) logo, o flag de sinalizao muda de estado, passando a 1 (um).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

* Valores contidos nos registros W e CONT depois da execuo da instruo:


1 0 1 1 1 1 1 0 0 1 1 0 1 0 1 0 247 104 W CONT

Observao: notar que o valor contido no registro W apresenta o resultado da operao aps a execuo da instruo, enquanto o registro CONT permanece inalterado (o valor contido originalmente preservado).
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 85/103

Se na operao aritmtica de subtrao o flag C do registro STATUS no muda seu estado de 0 (zero) para 1 (um), o programador deve estabelecer o procedimento adequado no cdigo_fonte para interpretar o resultado como: - o valor contido no registro CONT menor que o valor contido no registro W (CONT < W) antes da execuo da operao de subtrao. - o valor contido no registro W aps a execuo da operao de subtrao um nmero negativo e representa o complemento de 2 do resultado final da operao. _______________________________________________________________________________________ Vamos observar como a Unidade Lgica e Aritmtica realizou a operao de subtrao quando F < W: A operao efetivamente realizada foi: W = CONT + (W ) Isto , a ULA realizou uma operao de adio de um valor positivo (CONT) com um valor negativo (W). Para representar um valor negativo na forma binria utiliza-se o complemento de 2 (twos complement) deste valor, calculado da seguinte forma: a) determina-se o complemento de 1 (ones complement) invertendo os valores de todos os bits contidos no registro: * Valor contido no registro W antes da execuo do complemento de 1:
0 1 1 1 0 0 0 1 113 W

* Valor contido no registro W aps a execuo do complemento de 1:


1 0 0 0 1 1 1 0 142
(COMP 1)

b) somar 1 (um) ao valor do complemento de 1 (ones complement) para se obter o complemento de 2 (twos complement):
1 0 0 0 1 1 1 0 142
(COMP 1)

+
0

+ + + + + +
0 0 0 0 0 0

+
1

+
1

(SOMA) + UNIDADE

143

(COMP 2)

Com o valor do complemento de 2 do registro W ((COMP 2) W), a ULA realiza a operao de adio dos valores de CONT e (COMP 2) W:
0 1 1 0 1 0 0 0 104 CONT (SOMA) +
(COMP 2)

+
1

+ + + + + +
0 0 0 1 1 1

+
1

+
143

247

W
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 86/103

* Valor contido no registro W depois da execuo da adio:


1 1 1 1 0 1 1 1 247 W

O resultado da operao de adio foi um nmero menor que 255 logo, o flag C do registro STATUS no muda de estado, mantendo o valor 0 (zero).
> flag sinalizao aps a execuo da instruo DC C x 0 STATUS
LSB

IRP RP1 RP0 /TO /PD Z x x x x x x


MSB

Vamos olhar o resultado desta operao. A ULA fez uma operao de adio entre dois valores (104 e 143) que deve apresentar o resultado menor que 255 (no caso, 247):
104

+
143 247

A resposta do flag C no registro STATUS no mudou de valor, mantendo 0 (zero), indicando que o resultado final da operao tem valor menor que 255.
IRP RP1 RP0 /TO /PD Z x x x x x x
MSB

DC C x 0
LSB

STATUS

O resultado apresentado no registro W no corresponde ao valor esperado da adio (247):


1 1 1 1 0 1 1 1 247 W

No entanto, a operao solicitada pela instruo uma subtrao, cujo resultado deveria ser -9 (menos 9), isto , o resultado da operao real um nmero negativo:
104

113 9

A estrutura de registro do microcontrolador no consegue representar um nmero negativo incluindo o sinal, consequentemente, a forma de represent-lo atravs do seu complemento de 2 (twos complement). O programador deve providenciar o clculo do valor real do resultado da operao usando a seguinte sequencia: a) transferir o valor contido no registro W para um registro na memria RAM, por exemplo, W_TEMP, para usar a instruo COMF:

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 87/103

* Valores contidos nos registros W e W_TEMP antes da execuo da instruo MOVWF:


1 1 1 1 0 1 1 1 247 W

W_TEMP

MOVWF

W_TEMP

; TRANSFERE O VALOR DO REG. W PARA O ; REG. W_TEMP

* Valores contidos nos registros W e W_TEMP aps a execuo da instruo MOVWF:


1 1 1 1 0 1 1 1 247 W

247

W_TEMP

b) determina-se o complemento de 1 (ones complement) executando a instruo COMF no registro W_TEMP, que inverte os valores de todos os bits contidos no registro: * Valor contido no registro W_TEMP antes da execuo da instruo COMF (complemento de 1):
1 COMF W_TEMP 1 1 1 0 1 1 1 247 W_TEMP

; CALCULA complemento 1DO REG. W_TEMP

* Valor contido no registro W_TEMP aps a execuo da instruo COMF (complemento de 1):
0 0 0 0 1 0 0 0 8 (COMP 1) W_TEMP

c) somar 1 (um) ao valor do complemento de 1 (ones complement) para se obter o complemento de 2 (twos complement):
0 0 0 0 1 0 0 0 8 (COMP 1) W_TEMP

+
0

+ + + + + +
0 0 0 0 0 0

+
1

+
1

(SOMA) + UNIDADE

9 (COMP 2) W_TEMP

d) retornar o valor contido no registro W_TEMP para o registro W: * Valores contidos nos registros W e W_TEMP antes da execuo da instruo MOVF:
1 1 1 1 0 1 1 1 247 W

(COMP 2)

W_TEMP

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 88/103

MOVF

W_TEMP,W

; TRANSFERE O VALOR DO REG. W_TEMP ; PARA O REG. W

* Valores contidos nos registros W e W_TEMP aps a execuo da instruo MOVF:


0 0 0 0 1 0 0 1 9 W

(COMP 2)

W_TEMP

Agora o registro W contm o valor real da operao de subtrao porm, sem indicao do sinal negativo. A interpretao do sinal negativo deve ser feita pelo programador. _______________________________________________________________________________________

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 89/103

c) F = W o resultado da operao nulo - o valor representado pelo registro que contm o resultado (W) est na forma direta e os flags Z e C do registro STATUS so colocados no valor 1 (um). * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 113 113 W CONT

* Valor dos flags Z e C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo > flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x 0 x 0 STATUS
MSB LSB

* Instruo
SUBWF CONT,W ; SUBTRAIR O VALOR DO REG. W DO VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. W 1 1 1 0 0 0 1 113 CONT (SUBTRAI)) W

113

Ateno: o sinal - representa a operao aritmtica da subtrao. * Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao de subtrao foi nulo (CONT = W) logo, o flag Z muda de estado, passando a 1 (um) e o flag C muda de estado tambm passando a 1 (um)
> flag sinalizao depois da execuo da instruo > flag sinalizao depois da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x 1 x 1 STATUS
MSB LSB

* Valores contidos nos registros W e CONT depois da execuo da instruo:


0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 113 W CONT

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 90/103

Observao: notar que o valor contido no registro W apresenta o resultado da operao aps a execuo da instruo, enquanto o registro CONT permanece inalterado (o valor contido originalmente preservado). Se na operao aritmtica de subtrao os flags Z e C do registro STATUS mudam seus estados de 0 (zero) para 1 (um), o programador deve estabelecer o procedimento adequado no cdigo_fonte para interpretar o resultado como: - o valor contido no registro CONT igual ao valor contido no registro W (CONT = W) antes da execuo da operao de subtrao. - o valor contido no registro W aps a execuo da operao de subtrao nulo e representa o resultado final da operao. _______________________________________________________________________________________ Vamos observar como a Unidade Lgica e Aritmtica realizou a operao de subtrao quando F = W: A operao efetivamente realizada foi: W = CONT + (W ) Isto , a ULA realizou uma operao de adio de um valor positivo (CONT) com um valor negativo (W). Para representar um valor negativo na forma binria utiliza-se o complemento de 2 (twos complement) deste valor, calculado da seguinte forma: a) determina-se o complemento de 1 (ones complement) invertendo os valores de todos os bits contidos no registro: * Valor contido no registro W antes da execuo do complemento de 1:
0 1 1 1 0 0 0 1 113 W

* Valor contido no registro W aps a execuo do complemento de 1:


1 0 0 0 1 1 1 0 142
(COMP 1)

b) somar 1 (um) ao valor do complemento de 1 (ones complement) para se obter o complemento de 2 (twos complement):
1 0 0 0 1 1 1 0 142
(COMP 1)

+
0

+ + + + + +
0 0 0 0 0 0

+
1

+
1

(SOMA) + UNIDADE

143

(COMP 2)

Com o valor do complemento de 2 do registro W ((COMP 2) W), a ULA realiza a operao de adio dos valores de CONT e (COMP 2) W:

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 91/103

113

CONT (SOMA) +
(COMP 2)

+
1

+ + + + + +
0 0 0 1 1 1

+
1

+
143

* Valor contido no registro W depois da execuo da adio:


0 0 0 0 0 0 0 0 0 W

O resultado da operao de adio foi um nmero maior que 255 logo, o flag C do registro STATUS muda de estado, passando a 1 (um).
IRP RP1 RP0 /TO /PD Z x x x x x x
MSB

> flag sinalizao aps a execuo da instruo DC C x 1 STATUS


LSB

Vamos olhar o resultado desta operao. A ULA fez uma operao de adio entre dois valores (113 e 143) que deve apresentar o resultado maior que 255 (no caso, 256):
113

+
143 256

A resposta do flag C no registro STATUS mudou do valor 0 (zero) para o valor 1 (um), indicando que o resultado final da operao tem valor maior que 255, e o flag Z no registro STATUS mudou do valor 0 (zero) para o valor 1 (um), indicando que o resultado final da operao tem valor nulo.
IRP RP1 RP0 /TO /PD Z x x x x x 1
MSB

DC C x 1
LSB

STATUS

O resultado apresentado no registro W corresponde ao valor esperado da adio (256):


0 0 0 0 0 0 0 0 0 W

_______________________________________________________________________________________

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 92/103

- Registro de destino F

W = F W

- Subtrair o valor contido no registro W do valor contido no registro CONT e colocar o resultado no registro CONT a) F > W o resultado da operao um nmero positivo - o valor representado pelo registro que contm o resultado (CONT) est na forma direta e o flag C do registro STATUS colocado no valor 1 (um). * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 0 1 1 0 0 0 0 0 0 1 104 113 W CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x X x x x 0 STATUS
MSB LSB

* Instruo
SUBWF CONT,F ; SUBTRAIR O VALOR DO REG. W DO VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. CONT 0 1 1 1 0 0 0 1 113 CONT (SUBTRAI) W

104

CONT

Ateno: o sinal - representa a operao aritmtica da subtrao. * Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao de subtrao foi um nmero positivo (CONT > W) logo, o flag de sinalizao muda de estado, passando a 1 (um).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x X X x X x 1 STATUS
MSB LSB

* Valores contidos nos registros W e CONT depois da execuo da instruo:


0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 1 104 9 W CONT
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 93/103

Observao: notar que o valor contido no registro CONT apresenta o resultado da operao aps a execuo da instruo, enquanto o registro W permanece inalterado (o valor contido originalmente preservado). Se na operao aritmtica de subtrao o flag C do registro STATUS muda seu estado de 0 (zero) para 1 (um), o programador deve estabelecer o procedimento adequado no cdigo_fonte para interpretar o resultado como: - o valor contido no registro CONT maior que o valor contido no registro W (CONT > W) antes da execuo da operao de subtrao. - o valor contido no registro CONT aps a execuo da operao de subtrao um nmero positivo e representa o resultado final da operao. _______________________________________________________________________________________ Vamos observar como a Unidade Lgica e Aritmtica realizou a operao de subtrao quando F > W: A operao efetivamente realizada foi: W = CONT + (W ) Isto , a ULA realizou uma operao de adio de um valor positivo (CONT) com um valor negativo (W). Para representar um valor negativo na forma binria utiliza-se o complemento de 2 (twos complement) deste valor, calculado da seguinte forma: a) determina-se o complemento de 1 (ones complement) invertendo os valores de todos os bits contidos no registro: * Valor contido no registro W antes da execuo do complemento de 1:
0 1 1 0 1 0 0 0 104 W

* Valor contido no registro W aps a execuo do complemento de 1:


1 0 0 1 0 1 1 1 151
(COMP 1)

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 94/103

b) somar 1 (um) ao valor do complemento de 1 (ones complement) para se obter o complemento de 2 (twos complement):
1 0 0 1 0 1 1 1 151
(COMP 1)

+
0

+ + + + + +
0 0 0 0 0 0

+
1

+
1

(SOMA) + UNIDADE

152

(COMP 2)

Com o valor do complemento de 2 do registro W ((COMP 2) W), a ULA realiza a operao de adio dos valores de CONT e (COMP 2) W:
0 1 1 1 0 0 0 1 113 CONT (SOMA) +
(COMP 2)

+
1

+ + + + + +
0 0 1 1 0 0

+
0

+
152

CONT

* Valor contido no registro CONT depois da execuo da adio:


0 0 0 0 1 0 0 1 9 CONT

O resultado da operao de adio foi um nmero maior que 255 logo, o flag C do registro STATUS muda de estado, passando a 1 (um).
IRP RP1 RP0 /TO /PD Z x x x X x x
MSB

> flag sinalizao aps a execuo da instruo DC C x 1 STATUS


LSB

Vamos olhar o resultado desta operao. A ULA fez uma operao de adio entre dois valores (113 e 152) que deve apresentar o resultado maior que 255 (no caso, 265):
113

+
152 265

A resposta do flag C no registro STATUS mudou do valor 0 (zero) para o valor 1 (um), indicando que o resultado final da operao tem valor maior que 255.
IRP RP1 RP0 /TO /PD Z x x x X x x
MSB

DC C x 1
LSB

STATUS

Porm, o resultado apresentado no registro CONT no corresponde ao valor esperado da adio (265), mas apresentou o valor 9:
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 95/103

CONT

O valor 265 no cabe em 8 bits. Para represent-lo so necessrios pelo menos 9 bits e, como pode ser observado, os 8 bits menos significativos representam o valor 9.
> nono bit - inexistente - peso 29 = 256 1 0 0 0 0 1 0 0 1 265 CONT

Na estrutura de 8 bits, o flag C do registro STATUS representa o nono bit necessrio para a composio de valores maiores do que 255. Consequentemente, o resultado apresentado pela ULA fica:
> flag C do registro STATUS - indica resultado da subtrao positivo (CONT > W) 1 0 0 0 0 1 0 0 1 9 CONT

> registro apresenta o valor real da subtrao _______________________________________________________________________________________

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 96/103

b) F < W o resultado da operao um nmero negativo - o valor representado pelo registro que contm o resultado (CONT) est na forma complemento de 2 e o flag C do registro STATUS mantm o valor 0 (zero). * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 113 104 W CONT

* Valor do flag C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x X x x x 0 STATUS
MSB LSB

* Instruo
SUBWF CONT,F ; SUBTRAIR O VALOR DO REG. W DO VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. CONT 0 1 1 0 1 0 0 0 104 CONT (SUBTRAI) W

113

247

CONT

Ateno: o sinal - representa a operao aritmtica da subtrao. * Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao de subtrao foi um nmero positivo (CONT > W) logo, o flag de sinalizao muda de estado, passando a 1 (um).
> flag sinalizao aps a execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x x x 0 STATUS
MSB LSB

* Valores contidos nos registros W e CONT depois da execuo da instruo:


0 1 1 1 1 1 1 1 0 0 0 1 0 1 1 1 113 247 W CONT

Observao: notar que o valor contido no registro CONT apresenta o resultado da operao aps a execuo da instruo, enquanto o registro W permanece inalterado (o valor contido originalmente preservado).
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 97/103

Se na operao aritmtica de subtrao o flag C do registro STATUS no muda seu estado de 0 (zero) para 1 (um), o programador deve estabelecer o procedimento adequado no cdigo_fonte para interpretar o resultado como: - o valor contido no registro CONT menor que o valor contido no registro W (CONT < W) antes da execuo da operao de subtrao. - o valor contido no registro CONT aps a execuo da operao de subtrao um nmero negativo e representa o complemento de 2 do resultado final da operao. _______________________________________________________________________________________ Vamos observar como a Unidade Lgica e Aritmtica realizou a operao de subtrao quando F < W: A operao efetivamente realizada foi: W = CONT + (W ) Isto , a ULA realizou uma operao de adio de um valor positivo (CONT) com um valor negativo (W). Para representar um valor negativo na forma binria utiliza-se o complemento de 2 (twos complement) deste valor, calculado da seguinte forma: a) determina-se o complemento de 1 (ones complement) invertendo os valores de todos os bits contidos no registro: * Valor contido no registro W antes da execuo do complemento de 1:
0 1 1 1 0 0 0 1 113 W

* Valor contido no registro W aps a execuo do complemento de 1:


1 0 0 0 1 1 1 0 142
(COMP 1)

b) somar 1 (um) ao valor do complemento de 1 (ones complement) para se obter o complemento de 2 (twos complement):
1 0 0 0 1 1 1 0 142
(COMP 1)

+
0

+ + + + + +
0 0 0 0 0 0

+
1

+
1

(SOMA) + UNIDADE

143

(COMP 2)

Com o valor do complemento de 2 do registro W ((COMP 2) W), a ULA realiza a operao de adio dos valores de CONT e (COMP 2) W:
0 1 1 0 1 0 0 0 104 CONT (SOMA) +
(COMP 2)

+
1

+ + + + + +
0 0 0 1 1 1

+
1

+
143

247

CONT
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 98/103

* Valor contido no registro CONT depois da execuo da adio:


1 1 1 1 0 1 1 1 247 CONT

O resultado da operao de adio foi um nmero menor que 255 logo, o flag C do registro STATUS no muda de estado, mantendo o valor 0 (zero).
> flag sinalizao aps a execuo da instruo DC C x 0 STATUS
LSB

IRP RP1 RP0 /TO /PD Z x x x x x x


MSB

Vamos olhar o resultado desta operao. A ULA fez uma operao de adio entre dois valores (104 e 143) que deve apresentar o resultado menor que 255 (no caso, 247):
104

+
143 247

A resposta do flag C no registro STATUS no mudou de valor, mantendo 0 (zero), indicando que o resultado final da operao tem valor menor que 255.
IRP RP1 RP0 /TO /PD Z x x x x x x
MSB

DC C x 0
LSB

STATUS

O resultado apresentado no registro CONT no corresponde ao valor esperado da adio (247):


1 1 1 1 0 1 1 1 247 CONT

No entanto, a operao solicitada pela instruo uma subtrao, cujo resultado deveria ser -9 (menos 9), isto , o resultado da operao real um nmero negativo:
104

113 9

A estrutura de registro do microcontrolador no consegue representar um nmero negativo incluindo o sinal, consequentemente, a forma de represent-lo atravs do seu complemento de 2 (twos complement). O programador deve providenciar o clculo do valor real do resultado da operao usando a seguinte sequencia: a) determina-se o complemento de 1 (ones complement) utilizando a instruo COMF, que inverte os valores de todos os bits contidos no registro:

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 99/103

* Valor contido no registro CONT antes da execuo da instruo COMF (complemento de 1):
1 1 1 1 0 1 1 1 247 CONT

* Valor contido no registro CONT aps a execuo da instruo COMF (complemento de 1):
0 0 0 0 1 0 0 0 8
(COMP 1)

CONT

b) somar 1 (um) ao valor do complemento de 1 (ones complement) para se obter o complemento de 2 (twos complement):
0 0 0 0 1 0 0 0 8
(COMP 1)

CONT

+
0

+ + + + + +
0 0 0 0 0 0

+
1

+
1

(SOMA) + UNIDADE

(COMP 2)

CONT

Agora o registro W contm o valor real da operao de subtrao porm, sem indicao do sinal negativo. A interpretao do sinal negativo deve ser feita pelo programador. _______________________________________________________________________________________

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 100/103

c) F = W o resultado da operao nulo - o valor representado pelo registro que contm o resultado (W) est na forma direta e os flags Z e C do registro STATUS so colocados no valor 1 (um). * Valores contidos nos registros W e CONT antes da execuo da instruo:
0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 113 113 W CONT

* Valor dos flags Z e C no registro STATUS antes da execuo da instruo (a Unidade Lgica sempre posiciona o valor do bit C no valor 0 (zero) antes de executar a instruo):
> flag sinalizao antes da execuo da instruo > flag sinalizao antes da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x 0 x 0 STATUS
MSB LSB

* Instruo
SUBWF CONT,F ; SUBTRAIR O VALOR DO REG. W DO VALOR DO REG. ; CONT E COLOCAR O RESULTADO DA OPERAO ; NO REG. CONT 0 1 1 1 0 0 0 1 113 CONT (SUBTRAI)) W

113

CONT

Ateno: o sinal - representa a operao aritmtica da subtrao. * Valor do flag C no registro STATUS aps a execuo da instruo: O resultado da operao de subtrao foi nulo (CONT = W) logo, o flag Z muda de estado, passando a 1 (um) e o flag C muda de estado tambm passando a 1 (um)
> flag sinalizao depois da execuo da instruo > flag sinalizao depois da execuo da instruo IRP RP1 RP0 /TO /PD Z DC C x x x x x 1 x 1 STATUS
MSB LSB

* Valores contidos nos registros W e CONT depois da execuo da instruo:


0 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 113 0 W CONT
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 101/103

Observao: notar que o valor contido no registro CONT apresenta o resultado da operao aps a execuo da instruo, enquanto o registro W permanece inalterado (o valor contido originalmente preservado). Se na operao aritmtica de subtrao os flags Z e C do registro STATUS mudam seus estados de 0 (zero) para 1 (um), o programador deve estabelecer o procedimento adequado no cdigo_fonte para interpretar o resultado como: - o valor contido no registro CONT igual ao valor contido no registro W (CONT = W) antes da execuo da operao de subtrao. - o valor contido no registro CONT aps a execuo da operao de subtrao nulo e representa o resultado final da operao. _______________________________________________________________________________________ Vamos observar como a Unidade Lgica e Aritmtica realizou a operao de subtrao quando F = W: A operao efetivamente realizada foi: W = CONT + (W ) Isto , a ULA realizou uma operao de adio de um valor positivo (CONT) com um valor negativo (W). Para representar um valor negativo na forma binria utiliza-se o complemento de 2 (twos complement) deste valor, calculado da seguinte forma: a) determina-se o complemento de 1 (ones complement) invertendo os valores de todos os bits contidos no registro: * Valor contido no registro W antes da execuo do complemento de 1:
0 1 1 1 0 0 0 1 113 W

* Valor contido no registro W aps a execuo do complemento de 1:


1 0 0 0 1 1 1 0 142
(COMP 1)

b) somar 1 (um) ao valor do complemento de 1 (ones complement) para se obter o complemento de 2 (twos complement):
1 0 0 0 1 1 1 0 142
(COMP 1)

+
0

+ + + + + +
0 0 0 0 0 0

+
1

+
1

(SOMA) + UNIDADE

143

(COMP 2)

Com o valor do complemento de 2 do registro W ((COMP 2) W), a ULA realiza a operao de adio dos valores de CONT e (COMP 2) W:

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 102/103

113

CONT (SOMA) +
(COMP 2)

+
1

+ + + + + +
0 0 0 1 1 1

+
1

+
143

CONT

* Valor contido no registro CONT depois da execuo da adio:


0 0 0 0 0 0 0 0 0 CONT

O resultado da operao de adio foi um nmero maior que 255 logo, o flag C do registro STATUS muda de estado, passando a 1 (um).
IRP RP1 RP0 /TO /PD Z x x x x x x
MSB

> flag sinalizao aps a execuo da instruo DC C x 1 STATUS


LSB

Vamos olhar o resultado desta operao. A ULA fez uma operao de adio entre dois valores (113 e 143) que deve apresentar o resultado maior que 255 (no caso, 256):
113

+
143 256

A resposta do flag C no registro STATUS mudou do valor 0 (zero) para o valor 1 (um), indicando que o resultado final da operao tem valor maior que 255, e o flag Z no registro STATUS mudou do valor 0 (zero) para o valor 1 (um), indicando que o resultado final da operao tem valor nulo.
IRP RP1 RP0 /TO /PD Z x x x x x 1
MSB

DC C x 1
LSB

STATUS

O resultado apresentado no registro CONT corresponde ao valor esperado da adio (256):


0 0 0 0 0 0 0 0 0 CONT

_______________________________________________________________________________________

Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 103/103

Você também pode gostar