Você está na página 1de 48

PIC Software Bsico

PIC Software Bsico


Eng.: Roberto Bairros dos Santos. Um empreendimento Bairros Projetos Didticos www.bairrospd.kit.net
Esta apostila descreve de forma simples e rpida as instrues em linguagem assembler (cdigo de mquina) do microcontrolador da famla PIC.

PIC Software Bsico

Contedo
01 02 03 04 05 06 07 08 09 Introduo: .............................................................................................................. 3 Conjunto de Instrues da Famlia PIC16Cxx de Microcontroladores:..................... 4 Instrues de transferncia de dados: ..................................................................... 5 Lgicas e aritmticas: .............................................................................................. 6 Operaes sobre bits................................................................................................ 7 Direo de execuo de um programa: .................................................................... 8 Perodo de execuo da instruo .......................................................................... 11 Listagem das palavras (dado do tipo word): ........................................................... 12 Lista de instrues................................................................................................. 14

PIC Software Bsico

01 Introduo:
Um microcontrolador no como qualquer outro circuito integrado que quando saem da cadeia da fbrica esto prontos para serem usados. Para que um microcontrolador cumpra a sua tarefa, voc tem que dizer para ele exatamente o que ele deve fazer, ou, em outras palavras, voc tem que escrever o programa que o microcontrolador vai executar. Nesta apostila voc ver as instrues que constituem a linguagem assembler ou linguagem de mquina, ou seja, a linguagem de baixo nvel para os microcontroladores da famlia PIC.

PIC Software Bsico

02 Conjunto de Instrues da Famlia PIC16Cxx de Microcontroladores:


O conjunto completo compreende 35 instrues e mostrado na tabela abaixo. Uma razo para este pequeno nmero de instrues resulta principalmente do fato de estarmos falando de um microcontrolador RISC cujas instrues foram otimizadas tendo em vista a rapidez de funcionamento, simplicidade de arquitetura e compacidade de cdigo. O nico inconveniente, que o programador tem que dominar a tcnica desconfortvel de fazer o programa com apenas 35instrues. Se voc quiser escapar da programao em linguagem de mquina voc poder usar um software que programe o PIC em linguagem C, neste caso este software ir transformar (compilar) a linguagem C para a linguagem de mquina, facilitando o seu trabalho, uma vez que a linguagem C bem mais simples de trabalhar!

PIC Software Bsico

03 Instrues de transferncia de dados:


A instruo de transferncia de dados transfere dados numricos entre os endereos de memria do microcontrolador que podem ser registradores, endereo de memria, portas de entradas e sadas. Dos registradores internos existe um especial chamado registro W que o mais importante, pois todas as operaes de clculo passam por este registro! A transferncia de dados num microcontrolador ocorre entre o registro de trabalho (W) e um registro f que representa qualquer um registro de uso genrico. As primeiras trs instrues (observe a tabela seguinte) referem-se escrita de uma constante no registro W (MOVLW uma abreviatura para MOV um valor Literal para W), cpia de um dado do registro W na RAM e cpia de um dado de um registro da RAM no registro W (ou nele prprio, caso em que apenas a flag zero afetado).

Um valor literal um valor numrico (literalmente), como por exemplo, 25! A instruo CLRF escreve a constante 0 no registro geral f e CLRW escreve a constante 0 no registro W. CLR significa clear, limpara em ingls!

A instruo SWAPF troca o nibble (conjunto de 4 bits) mais significativo com o nibble menos significativo de um registro, passando o primeiro a ser o menos significativo e o outro o mais significativo do registro.

Swap em ingls trocar de posio! A descrio f(7:4) indica que a instruo refere-se aos bits de 4 at 7 do registro geral f, se voc quiser isolar somente um bit do registro f escreva f(2), onde 2 o bit isolado!

PIC Software Bsico

04 Lgicas e aritmticas:
De todas as operaes aritmticas possveis, os microcontroladores PIC, tal como a grande maioria dos outros microcontroladores, apenas suportam a subtrao e a adio. Os bits ou flags C, DC e Z, so afetados conforme o resultado da adio ou da subtrao, com uma nica exceo: uma vez que a subtrao executada como uma adio com um nmero negativo, a flag C (Carry), comporta-se inversamente no que diz respeito subtrao. Por outras palavras, posto 1 no carry se a operao possvel e posto0 se um nmero maior tiver que ser subtrado de outro menor.

A lgica dentro do PIC tem a capacidade de executar as operaes lgicas AND, OR, EX-OR, complemento (COMF) e rotaes (RLF e RRF).

Estas ltimas instrues so muito teis e mquinas digitais e rodam o contedo do registro atravs desse registro e da flag C de uma casa para a esquerda (na direo do bit 7), ou para a direita (na direo do bit 0). O bit que sai do registro escrito na flag C e o contedo anterior deste flag, escrito no bit situado do lado oposto no registro. Em eletrnica digital esta funo chamada de registrador de deslocamento ou shift register em ingls.

PIC Software Bsico

05 Operaes sobre bits


As instrues BCF e BSF pem a 0 ou a 1 qualquer bit de qualquer stio da memria. Apesar de parecer uma operao simples, ela executada do seguinte modo, o CPU primeiro l o byte completo, altera o valor de um bit e, a seguir, escreve o byte completo no endereo original.

Como o pic utilizado em mquinas digitais as instrues de bit, que ligam e desligam as sadas digitais so de fundamental importncia, voc usar estas instrues para ligar e desligar os componentes de interface da sua mquina, como por exemplo, lmpadas, rels, transistores, buzina etc..

PIC Software Bsico

06 Direo de execuo de um programa:

As instrues GOTO, CALL e RETURN so executadas do mesmo modo que em todos os outros microcontroladores, a diferena que a pilha independente da RAM interna e limitada a oito nveis.

A instruo RETLW k idntica instruo RETURN, exceto que, ao regressar de um subprograma, escrita no registro W uma constante definida pelo operando da instruo. Esta instruo permite a voc programar facilmente listagens (tambm chamadas tabelas de lookup). A maior parte das vezes, voc vai usar esta instruo determinando a posio do dado na sua tabela adicionando-o ao endereo em que a tabela comea e, ento, o dado poder ser nesse local (que est situado normalmente na memria de programa).

A tabela pode apresentar-se como um subprograma que consiste numa srie de instrues RETLW k onde as constantes k, so membros da tabela, como mostrado no exemplo abaixo.

Voc primeiro escreve a posio de um membro da sua tabela no registro W e, usando a instruo CALL, voc chama o subprograma que contm a tabela. A primeira linha do subprograma ADDWF PCL, f, adiciona a posio na tabela e que est escrita em W, ao endereo do incio da tabela e que est no registro PCL, assim, ns obtemos o endereo real do dado da tabela na memria de programa. Quando o programa regressa do subprograma, ns vamos ter no registro W o contedo do membro da tabela endereado. No exemplo anterior, a constante k2 estar no registro W, aps o retorno do subprograma. RETFIE (RETurn From Interrupt Interrupt Enable ou regresso da rotina de interrupo com as interrupes habilitadas) um regresso da rotina de interrupo e difere de RETURN apenas em que, automaticamente, pe a 1 o bit GIE (habilitao global das interrupes). Quando a interrupo comea, este bit automaticamente reposto a 0. Tambm quando a interrupo tem incio, somente o valor do contador de programa posto no topo da pilha. No fornecida uma capacidade automtica de armazenamento do registro de estado.

PIC Software Bsico

PIC Software Bsico

Os saltos condicionais esto sintetizados em duas instrues: BTFSC e BTFSS. Dependendo do estado lgico do bit do registro f que est a ser testado, a instruo seguinte no programa ou no executada. Este tipo de instruo fundamental na programao, pois, com ele voc poder desviar a seqncia de execuo do programa em funo de uma pergunta que s poder ter duas respostas (SIM ou NO) ou (FALSO ou VERDADEIRO), se a resposta for falso o programa executa a linha seguinte que normalmente um salto para outro local do programa, se a resposta for verdadeiro ento o programa salta a linha seguinte e continua executando o programa normalmente.

10

PIC Software Bsico

07 Perodo de execuo da instruo


Todas as instrues so executadas num nico ciclo, exceto as instrues de ramificao condicional se a condio for verdadeira, ou se o contedo do contador de programa for alterado pela prpria instruo. Nestes casos, a execuo requer dois ciclos de instruo e o segundo ciclo executado como sendo um NOP (Nenhuma Operao). Quatro pulsos de clock perfazem um ciclo de instruo. Se voc estiver usando um oscilador com 4MHz de freqncia, o tempo normal de execuo de uma instruo ser de 1us e, no caso de uma ramificao condicional de 2us.

11

PIC Software Bsico

08 Listagem das palavras (dado do tipo word):


f qualquer local de memria num microcontrolador W registro de trabalho principal b posio de bit no registro f d registro de destino label grupo de oito caracteres que marca o incio de uma parte do programa (rtulo) TOS topo da pilha [] opcional <> grupo de bits num registro Tabela com a lista completa de instrues do PIC;

12

PIC Software Bsico

* 1 Se a porta de entrada/sada for o operando origem, lido o estado dos pinos do microcontrolador. * 2 Se esta instruo for executada no registro TMR0 e se d=1, o prescaler atribudo a esse temporizador automaticamente limpo. * 3 Se o PC for modificado ou se resultado do teste for verdadeiro, a instruo executada em dois ciclos.

13

PIC Software Bsico

09 Lista de instrues
A.1 MOVLW Escrever constante no registo W Sintaxe: [rtulo] MOVLW k Descrio: A constante de 8-bits k vai para o registo W. Operao: k -> ( W ) Operando: 0 a 255 Flag: Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: MOVLW 0x5A (0x indica valor escrito em hexadecimal) Depois da instruo: W= 0x5A

Exemplo 2: MOVLW REGISTAR Antes da instruo: W = 0x10 e REGISTAR = 0x40 Depois da instruo: W = 0x40

14

PIC Software Bsico

A.2 MOVWF Copiar W para f Sintaxe: [rtulo] MOVWF f Descrio: O contedo do registo W copiado para o registo f Operao: W -> ( f ) Operando: f de 0 a 127 Flag: Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: MOVWF OPTION_REG Antes da instruo: OPTION_REG = 0x20 W = 0x40 Depois da instruo: OPTION_REG = 0x40 W = 0x40

Exemplo 2: MOVWF INDF Antes da instruo: W = 0x17 FSR = 0xC2 Contedo do endereo 0xC2 = 0x00 Depois da instruo: W = 0x17 FSR = 0xC2 C ontedo do endereo 0xC2 = 0x17

15

PIC Software Bsico

A.3 MOVF Copiar f para d Sintaxe: [rtulo] MOVF f, d Descrio: O contedo do registo f guardado no local determinado pelo operando d Se d = 0, o destino o registo W Se d = 1, o destino o prprio registo f A opo d = 1, usada para testar o contedo do registo f, porque a execuo desta instruo afecta a flag Z do registo STATUS. Operao: f -> ( d ) Operando: f de 0 a127, d [0, 1] Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: MOVF FSR, 0 Antes da instruo: FSR = 0xC2 W = 0x00 Depois da instruo: W = 0xC2 Z=0

Exemplo 2: MOVF INDF, 0 Antes da instruo: W = 0x17 FSR = 0xC2 contedo do endereo 0xC2 = 0x00 Depois da instruo: W = 0x00 FSR = 0xC2 contedo do endereo 0xC2 = 0x00 Z=1

16

PIC Software Bsico

A.4 CLRW Escrever 0 em W Sintaxe: [rtulo] CLRW Descrio: O contedo do registo W passa para 0 e a flag Z do registo STATUS toma o valor 1. Operao: 0 ->( W ) Operando: Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo: CLRW Antes da instruo: W = 0x55 Depois da instruo: W = 0x00 Z=1

17

PIC Software Bsico

A.5 CLRF Escrever 0 em f Sintaxe: [rtulo] CLRF f Descrio: O contedo do registo f passa para 0 e a flag Z do registo STATUS toma o valor 1. Operao: 0 -> f Operando: f de 0 a 127 Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: CLRF STATUS Antes da instruo: STATUS = 0xC2 Depois da instruo: STATUS = 0x00 Z=1

Exemplo 2: CLRF INDF Antes da instruo: FSR = 0xC2 contedo do endereo 0xC2 = 0x33 Depois da instruo: FSR = 0xC2 contedo do endereo 0xC2 = 0x00 Z=1

18

PIC Software Bsico

A.6 SWAPF Copiar o contedo de f para d, trocando a posio dos 4 primeiros bits com a dos 4 ltimos Sintaxe: [rtulo] SWAPF f, d Descrio: Os 4 bits + significativos e os 4 bits significativos de f, trocam de posies. Se d = 0, o resultado guardado no registo W Se d = 1, o resultado guardado no registo f Operao: f <0:3> d <4:7>, f <4:7> d <0:3>, Operando: f de 0 a 127, d [0, 1] Flag: Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: SWAPF REG, 0 Antes da instruo: REG = 0xF3 Depois da instruo: REG = 0xF3 W = 0x3F

Exemplo 2: SWAPF REG, 1 Antes da instruo: REG = 0xF3 Depois da instruo: REG = 0x3F

19

PIC Software Bsico

A.7 ADDLW Adicionar W a uma constante Sintaxe: [rtulo] ADDLW k Descrio: O contedo do registo W, adicionado constante de 8-bits k e o resultado guardado no registo W. Operao: ( W ) + k -> W Operando: k de 0 a 255 Flag: C, DC, Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: ADDLW 0x15 Antes da instruo: W= 0x10 Depois da instruo: W= 0x25 Exemplo 2: ADDLW REG Antes da instruo: W = 0x10 REG = 0x37 Depois da instruo:

W = 0x47

20

PIC Software Bsico

A.8 ADDWF

Adicionar W a f

Sintaxe: [rtulo] ADDWF f, d Descrio: Adicionar os contedos dos registos W e f Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: (W) + ( f ) d, d [0, 1] Operando: F de 0 a 127 Flag: C, DC, Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: ADDWF FSR, 0 Antes da instruo: W = 0x17 FSR = 0xC2 Depois da instruo: W = 0xD9 FSR = 0xC2

Exemplo 2: ADDWF INDF,0 Antes da instruo: W = 0x17 FSR = 0xC2 contedo do endereo 0xC2 = 0x20 Depois da instruo: W = 0x37 FSR = 0xC2 Contedo do endereo 0xC2 = 0x20

21

PIC Software Bsico

A.9 SUBLW Subtrair W a uma constante Sintaxe: [rtulo] SUBLW k Descrio: O contedo do registo W, subtrado constante k e, o resultado, guardado no registo W. Operao: k - ( W ) ->W Operando: de 0 a 255 Flag: C, DC, Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: SUBLW 0x03 Antes da instruo: W= 0x01, C = x, Z = x Depois da instruo: W= 0x02, C = 1, Z = 0 Resultado > 0 Antes da instruo: W= 0x03, C = x, Z = x Depois da instruo: W= 0x00, C = 1, Z = 1 Resultado = 0 Antes da instruo: W= 0x04, C = x, Z = x Depois da instruo: W= 0xFF, C = 0, Z = 0

Resultado < 0

Exemplo 2: SUBLW REG Antes da instruo: W = 0x10 REG = 0x37 Depois da instruo: W = 0x27 C=1 Resultado > 0

22

PIC Software Bsico

A.10 SUBWF Subtrair W a f Sintaxe: [rtulo] SUBWF f, d Descrio: O contedo do registo W subtrado ao contedo do registo f Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: ( f ) - (W) -> d Operando: f de 0 a 127, d [0, 1] Flag: C, DC, Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo: SUBWF REG, 1 Antes da instruo: REG= 3, W= 2, C = x, Z = x Depois da instruo: REG= 1, W= 2, C = 1, Z = 0 Resultado > 0 Antes da instruo: REG= 2, W= 2, C = x, Z = x Depois da instruo: R EG=0, W= 2, C = 1, Z = 1 Resultado = 0 Depois da instruo: REG= 0xFF, W=2, C = 0, Z = 0 Resultado < 0

23

PIC Software Bsico

A.11 ANDLW Fazer o E lgico de W com uma constante

Sintaxe: [rtulo] ANDLW k Descrio: executado o E lgico do contedo do registo W, com a constante k O resultado guardado no registo W. Operao: ( W ) .AND. k -> W Operando: k de 0 a 255 Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1 Exemplo 1: ANDLW 0x5F Antes da instruo: W= 0xA3 ; 0101 1111 (0x5F); 1010 0011 (0xA3) Depois da instruo: W= 0x03; 0000 0011 (0x03)

Exemplo 2: ANDLW REG Antes da instruo: W = 0xA3 ; REG = 0x37 ; Depois da instruo: W = 0x23 ;

1010 0011 0011 0111 0010 0011

(0xA3) (0x37) (0x23)

24

PIC Software Bsico

A.12 ANDWF Fazer o E lgico de W com f Sintaxe: [rtulo] ANDWF f, d Descrio: Faz o E lgico dos contedos dos registos W e f Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: (W) .AND. ( f ) d Operando: F de 0 a 127, d [0, 1] Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: ANDWF FSR, 1 Antes da instruo: W= 0x17, FSR= 0xC2; 0010 (0xC2) Depois da instruo: W= 0x17, FSR= 0x02 ;

0001 1111 0000 0010

(0x17); (0x02)

1100

Exemplo 2: ANDWF FSR, 0 Antes da instruo: W= 0x17, FSR= 0xC2; Depois da instruo: W= 0x02, FSR= 0xC2;

0001 1111 0000 0010

(0x17); (0x02)

1100 0010

(0xC2)

25

PIC Software Bsico

A.13 IORLW Fazer o OU lgico de W com uma constante Sintaxe: [rtulo] IORLW k Descrio: executado o OU lgico do contedo do registo W, com a constante de 8 bits k, o resultado guardado no registo W. Operao: ( W ) .OR. k -> W Operando: k de 0 a 255 Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: IORLW 0x35 Antes da instruo: W= 0x9A Depois da instruo: W= 0xBF Z= 0

Exemplo 2: IORLW REG Antes da instruo: W = 0x9A contedo de REG = 0x37 Depois da instruo: W = 0x9F Z=0

26

PIC Software Bsico

A.14 IORWF Fazer o OU lgico de W com f Sintaxe: [rtulo] IORWF f, d Descrio: Faz o OU lgico dos contedos dos registos W e f Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: (W) .OR. ( f ) -> d Operando: f de 0 a 127, d [0, 1] Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: IORWF REG, 0 Antes da instruo: REG= 0x13, W= 0x91 Depois da instruo: REG= 0x13, W= 0x93 Z= 0

Exemplo 2: IORWF REG, 1 Antes da instruo: REG= 0x13, W= 0x91 Depois da instruo: REG= 0x93, W= 0x91 Z= 0

27

PIC Software Bsico

A.15 XORLW OU- EXCLUSIVO de W com uma constante Sintaxe: [rtulo] XORLW k Descrio: executada a operao OU-Exclusivo do contedo do registo W, com a constante k. O resultado guardado no registo W. Operao: ( W ) .XOR. k -> W Operando: k de 0 a 255 Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: XORLW 0xAF Antes da instruo: W= 0xB5 ; 1010 1111 Depois da instruo: W= 0x1A;

(0xAF); 0001 1010

1011 0101 (0x1A)

(0xB5)

Exemplo 2: XORLW REG Antes da instruo: W = 0xAF ; (REG = 0x37 ; Depois da instruo: W = 0x98 ; Z=0

1010 1111 0011 0111

(0x37)

1001 1000

(0x98)

28

PIC Software Bsico

A.16 XORWF OU-EXCLUSIVO de W com f Sintaxe: [rtulo] XORWF f, d Descrio: Faz o OU-EXCLUSIVO dos contedos dos registos W e f Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: (W) .XOR. ( f ) -> d Operando: f de 0 a 127, d [0, 1] Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: Antes da instruo: REG= 0xAF, W= 0xB5 ; Depois da instruo: REG= 0x1A, W= 0xB5 ;

XORWF REG, 1 1010 1111 001 1010 (0xAF) ; 1011 0101 (0x1A) (0xB5)

Exemplo 2: XORWF REG, 0 Antes da instruo: REG= 0xAF, W= 0xB5; Depois da instruo: REG= 0xAF, W= 0x1A ;

1010 1111 0001 1010

(0xAF); (0x1A)

1011 0101

(0xB5)

29

PIC Software Bsico

A.17 INCF Incrementar f Sintaxe: [rtulo] INCF f, d Descrio: Incrementar de uma unidade, o contedo do registo f. Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: ( f ) + 1 -> d Operando: f de 0 a 127, d [0, 1] Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: INCF REG, 1 Antes da instruo: Z=0 Depois da instruo: Z=1

REG = 0xFF REG = 0x00

Exemplo 2: INCF REG, 0 Antes da instruo: W=x Z=0 Depois da instruo: W = 0x11 Z=0

REG = 0x10

REG = 0x10

30

PIC Software Bsico

A.18 DECF Decrementar f Sintaxe: [rtulo] DECF f, d Descrio: Decrementar de uma unidade, o contedo do registo f. Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: ( f ) - 1 -> d Operando: F de 0 a 127, d [0, 1] Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: DECF REG, 1 Antes da instruo: Z=0 Depois da instruo: Z=1

REG = 0x01 REG = 0x00

Exemplo 2: DECF REG, 0 Antes da instruo: W=x Z=0 Depois da instruo: W = 0x12 Z=0

REG = 0x13

REG = 0x13

31

PIC Software Bsico

A.19 RLF Rodar f para a esquerda atravs do Carry

Sintaxe: [rtulo] RLF f, d Descrio: O contedo do registo f rodado um espao para a esquerda, atravs de C (flag do Carry). Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: ( f <n>) -> d<n+1>, f<7> -> C, C -> d<0>; Operando: f de 0 a 127, d [0, 1] Flag: C Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: RLF REG, 0 Antes da instruo: C=0 Depois da instruo: W = 1100 1100 C=1

REG = 1110 0110 REG = 1110 0110

Exemplo 2: RLF REG, 1 Antes da instruo: C=0 Depois da instruo: C=1

REG = 1110 0110 REG = 1100 1100

32

PIC Software Bsico

A.20 RRF Rodar f para a direita atravs do Carry

Sintaxe: [rtulo] RRF f, d Descrio: O contedo do registo f rodado um espao para a direita, atravs de C (flag do Carry). Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: ( f <n>) -> d<n-1>, f<0> -> C, C -> d<7>; Operando: f de 0 a 127, d [0, 1] Flag: C Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: RRF REG, 0 Antes da instruo: W=x C=0 Depois da instruo: W = 0111 0011 C=0

REG = 1110 0110

REG = 1110 0110

Exemplo 2: RRF REG, 1 Antes da instruo: C=0 Depois da instruo: C=0

REG = 1110 0110 REG = 0111 0011

33

PIC Software Bsico

A.21 COMF Complementar f Sintaxe: [rtulo] COMF f, d Descrio: O contedo do registo f complementado. Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: () -> d Operando: f de 0 a 127, d [0, 1] Flag: Z Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: COMF REG, 0 Antes da instruo: Depois da instruo: W = 0xEC

REG= 0x13 REG= 0x13

; 0001 0011 (0x13) ; complementar ; 1110 1100 (0xEC)

Exemplo 2: COMF INDF, 1 Antes da instruo: FSR= 0xC2 contedo de FSR = (FSR) = 0xAA Depois da instruo: FSR= 0xC2 contedo de FSR = (FSR) = 0x55

34

PIC Software Bsico

A.22 BCF Pr 0 no bit b de f Sintaxe: [rtulo] BCF f, b Descrio: Limpar (pr a 0), o bit b do registo f Operao: 0 -> f<b> Operando: f de 0 a 127, b de 0 a 7 Flag: Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: BCF REG, 7 Antes da instruo: Depois da instruo:

REG = 0xC7 REG = 0x47

; 1100 0111 ; 0100 0111

(0xC7) (0x47)

Exemplo 2: BCF INDF, 3 Antes da instruo: W = 0x17 FSR = 0xC2 contedo do endereo em FSR (FSR) = 0x2F Depois da instruo: W = 0x17 FSR = 0xC2 contedo do endereo em FSR (FSR) = 0x27

35

PIC Software Bsico

A.23 BSF Pr 1 no bit b de f Sintaxe: [rtulo] BSF f, b Descrio: Pr a 1, o bit b do registo f Operao: 1-> f<b> Operando: f de 0 a 127, b de 0 a 7 Flag: Nmero de palavras: 1 Nmero de ciclos: 1

Exemplo 1: BSF REG, 7 Antes da instruo: Depois da instruo:

REG = 0x07 REG = 0x17

; 0000 0111 ; 1000 0111

(0x07) (0x87)

Exemplo 2: BSF INDF, 3 Antes da instruo: W = 0x17 FSR = 0xC2 contedo do endereo em FSR (FSR) = 0x2F Depois da instruo: W = 0x17 FSR = 0xC2 contedo do endereo em FSR (FSR) = 0x28

36

PIC Software Bsico

A.24 BTFSC Testar o bit b de f, saltar prxima linha se for = 0 Sintaxe: [rtulo] BTFSC f, b Descrio: Se o bit b do registo f for igual a zero, ignorar instruo seguinte. Se este bit b for zero, ento, durante a execuo da instruo actual, a execuo da instruo seguinte no se concretiza e executada, em vez desta, uma instruo NOP, fazendo com que a instruo actual, demore dois ciclos de instruo a ser executada. Operao: Ignorar a instruo seguinte se (f<b>) = 0 Operando: f de 0 a 127, b de 0 a 7 Flag: Nmero de palavras: 1 Nmero de ciclos: 1 ou 2 dependendo do valor lgico do bit b Exemplo: LAB_01 LAB_02 LAB_03

BTFSC REG, 1; Testar o bit 1 do registo REG ........... ; Ignorar esta linha se for 0 ........... ; Executar esta linha depois da anterior, se for 1

Antes da instruo, o contador de programa contm o endereo LAB_01. Depois desta instruo, se o bit 1 do registo REG for zero, o contador de programa contm o endereo LAB_03. Se o bit 1 do registo REG for um, o contador de programa contm o endereo LAB_02.

37

PIC Software Bsico

A.25 BTFSS Testar o bit b de f, saltar porprxima linha se for = 1 Sintaxe: [rtulo] BTFSS f, b Descrio: Se o bit b do registo f for igual a um, ignorar instruo seguinte. Se durante a execuo desta instruo este bit b for um, ento, a execuo da instruo seguinte no se concretiza e executada, em vez desta, uma instruo NOP, assim, a instruo actual demora dois ciclos de instruo a ser executada. Operao: Ignorar a instruo seguinte se (f<b>) = 1 Operando: f de 0 a 127, b de 0 a 7 Flag: Nmero de palavras: 1 Nmero de ciclos: 1 ou 2 dependendo do valor lgico do bit b Exemplo: LAB_01 LAB_02 LAB_03

BTFSS REG, 1; Testar o bit 1 do registo REG ........... ; Ignorar esta linha se for 1 ........... ; Executar esta linha depois da anterior, se for 0

Antes da instruo, o contador de programa contm o endereo LAB_01. Depois desta instruo, se o bit 1 do registo REG for um, o contador de programa contm o endereo LAB_03. Se o bit 1 do registo REG for zero, o contador de programa contm o endereo LAB_02.

38

PIC Software Bsico

A.26 INCFSZ

Incrementar f, saltar por cima se der = 0

Sintaxe: [rtulo] INCFSZ f, d Descrio: Descrio: O contedo do registo f incrementado de uma unidade. Se d = 0, o resultado guardado no registo W. Se d = 1, o resultado guardado no registo f. Se o resultado do incremento for = 0, a instruo seguinte substituda por uma instruo NOP, fazendo com que a instruo actual, demore dois ciclos de instruo a ser executada. Operao: (f) + 1 -> d Operando: f de 0 a 127, d [0, 1] Flag: Nmero de palavras: 1 Nmero de ciclos: 1 ou 2 dependendo do resultado Exemplo: LAB_01 LAB_02 LAB_03 INCFSZ REG, 1; Incrementar o contedo de REG de uma unidade ........... ; Ignorar esta linha se resultado = 0 ........... ; Executar esta linha depois da anterior, se der 0

Contedo do contador de programa antes da instruo, PC = endereo LAB_01. Se o contedo do registo REG depois de a operao REG = REG + 1 ter sido executada, for REG = 0, o contador de programa aponta para o rtulo de endereo LAB_03. Caso contrrio, o contador de programa contm o endereo da instruo seguinte, ou seja, LAB_02.

39

PIC Software Bsico

A.27 DECFSZ Decrementar f, saltar por cima se der = 0 Sintaxe: [rtulo] DECFSZ f, d Descrio: O contedo do registo f decrementado uma unidade. Se d = 0, o resultado guardado no registo W. Se d = 1, o resultado guardado no registo f. Se o resultado do decremento for = 0, a instruo seguinte substituda por uma instruo NOP, fazendo assim com que a instruo actual, demore dois ciclos de instruo a ser executada. Operao: (f) - 1 -> d Operando: f de 0 a 127, d [0, 1] Flag: Nmero de palavras: 1 Nmero de ciclos: 1 ou 2 dependendo do resultado Exemplo: LAB_01 DECFSZ REG, 1; Decrementar o contedo de REG de uma unidade LAB_02 ........... ; Ignorar esta linha se resultado = 0 LAB_03 ........... ; Executar esta linha depois da anterior, se der 0 Contedo do contador de programa antes da instruo, PC = endereo LAB_01. Se o contedo do registo REG depois de a operao REG = REG 1 ter sido executada, for REG = 0, o contador de programa aponta para o rtulo de endereo LAB_03. Caso contrrio, o contador de programa contm o endereo da instruo seguinte, ou seja, LAB_02.

40

PIC Software Bsico

A.28 GOTO Saltar para o endereo Sintaxe: [rtulo] GOTO k Descrio: Salto incondicional para o endereo k. Operao: k -> PC<10:0>, (PCLATH<4:3>) -> PC<12:11> Operando: K de 0 a 2048 Flag: Nmero de palavras: 1 Nmero de ciclos: 2 Exemplo: LAB_00 GOTO LAB_01; Saltar para LAB_01 :

LAB_01 ............ Antes da instruo: PC = endereo LAB_00 Depois da instruo: PC = endereo LAB_01

41

PIC Software Bsico

A.29 CALL Chamar uma sub-rotina Sintaxe: [rtulo] CALL k Descrio: Esta instruo, chama um subprograma. Primeiro, o endereo de retorno (PC+1) guardado na pilha, a seguir, o operando k de 11 bits, correspondente ao endereo de incio do subprograma, vai para o contador de programa (PC). Operao: PC+1 -> Topo da pilha (TOS Top Of Stack) Operando: k de 0 a 2048 Flag: Nmero de palavras: 1 Nmero de ciclos: 2 Exemplo: LAB_00 CALL LAB_02 ; Chamar a subrotina LAB_02 LAB_01 : : LAB_02 ............ Antes da instruo: PC = endereo LAB_00 TOS = x Depois da instruo: PC = endereo LAB_02 TOS = LAB_01

42

PIC Software Bsico

A.30 RETURN Retorno de um subprograma Sintaxe: [rtulo] RETURN Descrio: O contedo do topo da pilha guardado no contador de programa. Operao: TOS -> Contador de programa PC Operando: Flag: Nmero de palavras: 1 Nmero de ciclos: 2 Exemplo: RETURN Antes da instruo: PC = x TOS = x Depois da instruo: PC = TOS TOS = TOS - 1

43

PIC Software Bsico

A.31 RETLW Retorno de um subprograma com uma constante em W Sintaxe: [rtulo] RETLW k Descrio: A constante k de 8 bits, guardada no registo W. Operao: (k) -> W; TOS-> PC Operando: 0 -> k ->255 Flag: Nmero de palavras: 1 Nmero de ciclos: 2 Exemplo: RETLW 0x43 Antes da instruo: W=x PC = x TOS = x Depois da instruo: W = 0x43 PC = TOS TOS = TOS 1

44

PIC Software Bsico

A.32 RETFIE Retorno de uma rotina de interrupo Sintaxe: [rtulo] RETLW k Descrio: Retorno de uma subrotina de atendimento de interrupo. O contedo do topo de pilha (TOS), transferido para o contador de programa (PC). Ao mesmo tempo, as interrupesso habilitadas, pois o bit GIE de habilitao global das interrupes, posto a 1. Operao: TOS -> PC ; 1-> GIE Operando: Flag: Nmero de palavras: 1 Nmero de ciclos: 2 Exemplo: RETFIE Antes da instruo: PC = x GIE = 0 Depois da instruo: PC = TOS GIE = 1

45

PIC Software Bsico

A.33 NOP

Nenhuma operao [rtulo] NOP Nenhuma operao executada, nem qualquer flag 1 1 NOP

Sintaxe: Descrio: afectada. Operao: Operando: Flag: Nmero de palavras: Nmero de ciclos: Exemplo:

46

PIC Software Bsico

A.34 CLRWDT Sintaxe: Descrio:

Iniciar o temporizador do watchdog [rtulo] CLRWDT O temporizador do watchdog reposto a zero. O prescaler do temporizador de Watchdog tambm reposto a 0 e, tambm, os bits do registo de estado e so postos a um. 0 ->WDT 0 ->prescaler de WDT

Operao:

Operando: Flag: Nmero de palavras: 1 Nmero de ciclos: 1 Exemplo: CLRWDT Antes da instruo: Contador de WDT = x Prescaler de WDT = 1:128 Depois da instruo: Contador do WDT = 0x00 Prescale do WDT = 0

47

PIC Software Bsico

A.35 SLEEP

Modo de repouso

Sintaxe: [rtulo] SLEEP Descrio: O processador entra no modo de baixo consumo. O oscilador pra. O bit (Power Down) do registo Status reposto a 0. O bit (Timer Out) posto a 1. O temporizador de WDT (Watchdog) e o respectivo prescaler so repostos a 0. Operao: 0 -> WDT 0->prescaler do WDT Operando: Flag: Nmero de palavras: Nmero de ciclos: Exemplo 1: SLEEP Antes da instruo: Prescaler do WDT = x Depois da instruo: Prescaler do WDT = 0 1 1

Contador do WDT = x Contador do WDT = 0x00

48

Você também pode gostar