programação_pic16f877a

19
Coleção TUTPRO Tutoriais sobre programação de microcontroladores Solbet Ltda Expandindo a percepção humana Neste volume: O conjunto de instruções do PIC16F877 versão 1.0 Campinas 11/11/2007 http://www.solbet.com.br O conjunto de instruções do PIC16F877A 1

Upload: marcelo-souza

Post on 30-Jun-2015

84 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: programação_PIC16F877A

Coleção TUTPRO

Tutoriais sobre programação de microcontroladores

Solbet LtdaExpandindo a percepção humana

Neste volume: O conjunto de instruções do PIC16F877

versão 1.0 Campinas 11/11/2007

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 1

Page 2: programação_PIC16F877A

SumárioRecursos necessários para execução deste tutorial...............................................................................3Descrição das instruções do PIC16F877 em ordem alfabética...........................................................3

ADDLW...........................................................................................................................................3ADDWF...........................................................................................................................................3ANDLW...........................................................................................................................................4ANDWF...........................................................................................................................................4BCF..................................................................................................................................................4BSF..................................................................................................................................................5BTFSC.............................................................................................................................................5BTFSS..............................................................................................................................................6CALL...............................................................................................................................................6CLRF...............................................................................................................................................6CLRW..............................................................................................................................................7CLRWDT.........................................................................................................................................7COMF..............................................................................................................................................8DECF...............................................................................................................................................8DECFSZ...........................................................................................................................................9GOTO..............................................................................................................................................9INCF................................................................................................................................................9INCFSZ..........................................................................................................................................11IORLW...........................................................................................................................................11IORWF...........................................................................................................................................11MOVLW........................................................................................................................................12MOVF............................................................................................................................................12MOVWF........................................................................................................................................13NOP...............................................................................................................................................13RETFIE..........................................................................................................................................13RETLW..........................................................................................................................................14RETURN.......................................................................................................................................14RLF................................................................................................................................................15RRF................................................................................................................................................15SLEEP............................................................................................................................................16SUBLW..........................................................................................................................................16SUBWF..........................................................................................................................................17SWAPF...........................................................................................................................................17XORLW.........................................................................................................................................18XORWF.........................................................................................................................................19

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 2

Page 3: programação_PIC16F877A

Recursos necessários para execução deste tutorial

Este tutorial cobre somente partes teóricas. Você só precisará de um computador com leitor PDF.

Você pode copiar este material a vontade, desde que mantida a informação da fonte.

Descrição das instruções do PIC16F877 em ordem alfabéticaAs trinta e cinco instruções do PIC16F877A são todas de um mesmo comprimento, 14 bits.

Se a instrução não provocar um desvio do fluxo normal do programa, ela é executada em um ciclo. Aquelas que provocam a alteração do contador de programas diferente do simples incremento de uma unidade são executadas em dois ciclos.

A compreensão da funcionalidade de cada instrução é indispensável para o programador assembler.

ADDLWSoma um literal no registrador W

Sintaxe [label] ADDLW k

Operação (W) + k -> (W)

Status C, DC, Z

Codificação 0011 111x kkkk kkkk

Descrição O conteúdo do registrador W é somado com o literal k e o resultado colocado no registrador W

Ciclos 1

ADDWFSoma o registrador W ao registro f

Sintaxe [label] ADDWF f,d

Operação (W) + (f) -> (dest)

Status C, DC, Z

Codificação 0011 0111 dfff ffff

Descrição Soma o conteúdo do registro W ao registro f. Se <d> é igual a zero o resultado é colocado no registro W. Se <d> é igual a 1 o resultado é armazenado no registro f

Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 3

Page 4: programação_PIC16F877A

ANDLWOperação lógica <E> entre o literal k e o registro W

Sintaxe [label] ANDLW k

Operação (W) .AND. (k) -> (W)

Status Z

Codificação 0011 1001 kkkk kkkk

Descrição Realiza a operação lógica E (AND) entre o conteúdo do registrador W com o literal k. O resultado e colocado no registrador W.

Ciclos 1

ANDWFSoma o registrador W ao registro f

Sintaxe [label] ANDWF f,d

Operação (W) .AND. (f) -> (dest)

Status Z

Codificação 0000 0101 dfff ffff

Descrição Realiza a operação lógica <E> entre o conteúdo do registrador W e do registrador f. . Se <d> é igual a zero o resultado é colocado no registro W. Se <d> é igual a 1 o resultado é armazenado no registro f

Ciclos 1

.

BCFLimpa um bit do registro f

Sintaxe [label] BCF f,b

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 4

Page 5: programação_PIC16F877A

Operação 0 -> (f<b>)

Status nenhum

Codificação 0001 00bb bfff ffff

Descrição Faz o bit <b> do registro f igual a zero

Ciclos 1

BSFset bit f

Sintaxe [label] BSF f,b

Operação 1 -> (f<b>)

Status nenhum

Codificação 0001 01bb bfff ffff

Descrição Faz o bit <b> do registro f um

Ciclos 1

BTFSCTeste bit f, pula se zero

Sintaxe [label] BTFSC f,b

Operação desvia se f<b> for igual a zero

Status nenhum

Codificação 0001 10bb bfff ffff

Descrição Se o bit <b> no registro <f> for igual a zero, pula a próxima instrução.

Ciclos 1 se não tiver o desvio, 2 se ocorrer o desvio

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 5

Page 6: programação_PIC16F877A

BTFSSTeste bit f, pula se um

Sintaxe [label] BTFSS f,b

Operação desvia se f<b> for igual a um

Status nenhum

Codificação 0001 11bb bfff ffff

Descrição Se o bit <b> no registro <f> for igual a um, pula a próxima instrução.

Ciclos 1 se não tiver o desvio, 2 se ocorrer o desvio

CALLchama subrotina

Sintaxe [label] call k

Operação (PC) +1 ->TOS

k -> (PC <10Ç0>),

(PCLATH <4-3>) -> (PC<12 -11>)

Status nenhum

Codificação 0010 0kkk kkkk kkkk

Descrição Chama uma subrotina. Primeiro, o endereço de retorno (PC + 1) é colocado no stack. O endereço de 11 bits é armazenado nos bits <10 0> do PC. Os bits superiores do PC são carregados do registro PCLATH.

Ciclos 2

CLRFLimpa o registro f

Sintaxe [label] CLRF f

Operação 0 -> (f)

1 -> Z

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 6

Page 7: programação_PIC16F877A

Status Z

Codificação 0000 0001 1fff ffff

Descrição O conteúdo do registro <f> é feito igual a zero e o bit Z é feito igual a um.

Ciclos 1

CLRWLimpa o registro W

Sintaxe [label] CLRW

Operação 0 -> (W)

1 -> Z

Status Z

Codificação 0000 0001 0000 0011

Descrição O conteúdo do registro <W> é feito igual a zero e o bit Z é feito igual a um.

Ciclos 1

CLRWDTLimpa o registro do watch dog

Sintaxe [label] CLRWDT

Operação 0 -> (WDT)

0 -> WDT preescalador

1 -> TO (invertido)

1 -> PD (invertido)

Status TO, PD

Codificação 0000 0000 0110 0100

Descrição Faz o temporizador watch dog timer

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 7

Page 8: programação_PIC16F877A

igual a zero. Também zera o preescalador do watch dog. Os bits de estado TO e PD são feitos igual a 1.

Ciclos 1

COMFComplementa a registro f

Sintaxe [label] COMF f,d

Operação (naof) ->destino

Status Z

Codificação 0000 1001 dfff ffff

Descrição O conteúdo do registrador <f> é complementado. Se <d> for igual a zero o resultado é colocado no registro W. Se <d> for igual a 1 o resultado é colocado no registro <f>.

Ciclos 1

DECFDecrementa f

Sintaxe [label] DECF f,d

Operação (f) - 1 -> (dest)

Status Z

Codificação 0000 0011 dfff ffff

Descrição Decrementa o registro <f>. Se <d> for igual a zero o resultado será colocado no registro W. Se <d. for igual a 1 o resultado será colocado no registro <f>.

Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 8

Page 9: programação_PIC16F877A

DECFSZDecrementa f , pula se zero

Sintaxe [label] DECFSZ f,d

Operação (f) - 1 -> (dest), desvia se resultado igual a zero

Status nenhum

Codificação 0000 1011 dfff ffff

Descrição Decrementa o registro <f>. Se <d> for igual a 0 o resultado será colocado no registro W. Se <d> for igual a 1 o resultado será colocado no registro <f>. Se o resultado for zero a próxima instrução é descartada.

Ciclos 1 se não ocorrer o desvio.

2 se ocorrer o desvio.

GOTOdesvia para o endereço especificado

Sintaxe [label] GOTO k

Operação k -> (PC <10 0>

PCLATH <4 3> -> (PC <12 11> )

Status nenhum

Codificação 0010 1kkk kkkk kkkk

Descrição Desvia o programa para o endereço K. O onze bits k são carregados para o registro do PC <10 0>. Os bits superiores do PC são carregados a partir do registro PCLATH.

Ciclos 2

INCFincrementa f

Sintaxe [label] INCF f,d

Operação (f) +1 -> (dest)

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 9

Page 10: programação_PIC16F877A

Status Z

Codificação 0000 1010 dfff ffff

Descrição Incrementa o conteúdo do registro f. Se <d> for igual a zero o resultado é colocado no registro W. Se <d> for igual a 1 o resultado é colocado no registro f.

Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 10

Page 11: programação_PIC16F877A

INCFSZincrementa f, desvia se zero

Sintaxe [label] INCFSZ f, d

Operação (f) +1 -> (dest). Desvia se resultado for zero.

Status nenhum

Codificação 0000 1111 dfff ffff

Descrição Incrementa o conteúdo do registrador f. Se <d> for igual a zero, o resultado e colocado em W, se <d> for igual a um o resultado e colocado em f. Se o resultado for zero, a próxima instrução é descartada.

Ciclos 1 se não ocorrer o desvio

2 se ocorrer o desvio

IORLWOu inclusivo entre k e o registro W

Sintaxe [label] IORLW k

Operação (W) .OR. (k) -> (W).

Status Z

Codificação 0011 1000 kkkk kkkk

Descrição Realiza a operação lógica OU entre o registrador k e o registro W. O resultado e colocado no registro W.

Ciclos 1

IORWFOu inclusivo entre W e f

Sintaxe [label] IORWF f,d

Operação (W) .OR. (f) -> (destino).

Status Z

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 11

Page 12: programação_PIC16F877A

Codificação 0011 0100 dfff ffff

Descrição Realiza a operação lógica OU entre o registro f e o registro W. Se ,d. for igual a 0 o resultado e colocado no registro W. Se <d> for igual a 1 o resultado é colocado no registro f.

Ciclos 1

MOVLWMove literal para o registro W

Sintaxe [label] MOVLW k

Operação k ->(w)

Status nenhum

Codificação 0011 00xx kkkk kkkk

Descrição carrega o valor do literal K para o registro W.

Ciclos 1

MOVFMove f

Sintaxe [label] MOVF f,d

Operação (f) -> destino

Status Z

Codificação 0000 1000 dfff ffff

Descrição O conteúdo do registro f e colocado no destino. Se d for igual a 0 o destino será o registrador W, se d for igual a 1 o destino será o próprio registrador. Esta instrução pode ser utilizada para

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 12

Page 13: programação_PIC16F877A

verificarmos se o conteúdo de um registrador e zero, pois o flag Z é alterado.

Ciclos 1

MOVWFMove o registro W para f

Sintaxe [label] MOVWF f

Operação (W) -> (f)

Status nenhum

Codificação 0000 0000 1fff ffff

Descrição Move dados do registrador W para o registro f

Ciclos 1

NOPnenhuma operação

Sintaxe [label] NOP

Operação nada

Status nenhum

Codificação 0000 0000 0000 0000

Descrição não executa nenhuma instrução. Útil como ajuste fino de laços de temporização.

Ciclos 1

RETFIEretorno de interrupção

Sintaxe [label] RETFIE

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 13

Page 14: programação_PIC16F877A

Operação TOS -> (PC)

1 -> GIE

Status nenhum

Codificação 0000 0000 0000 1001

Descrição O topo do stack (TOS) e carregado no PC. Os interrupts são habilitados de uma forma global pelo flag GIOE. O apontador do stack e diminuído de um (pop).

Ciclos 2

RETLWretorna com um literal em W

Sintaxe [label] RETLW k

Operação k -> (W)

TOS -> (PC)

Status nenhum

Codificação 11 01xx kkkk kkkk

Descrição O registrador W e carregado com o valor k. O contador de programa assume o valor do topo do stack. Eqüivale a uma instrução de retorno de subrotina sendo que o registro W retorna com o valor desejado.

Ciclos 2

RETURNretorna da subrotina

Sintaxe [label] RETURN

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 14

Page 15: programação_PIC16F877A

Operação TOS -> (PC)

Status nenhum

Codificação 0000 0000 0000 1000

Descrição O contador de programa assume o valor do topo do stack. O apontador do stack e atualizado (pop).

Ciclos 2

RLFdesloca f para esquerda usando carry

Sintaxe [label] RLF f,d

Operação veja a descrição

Status C

Codificação 0000 1101 dfff ffff

Descrição O conteúdo do registro <f> é deslocado de um bit para a esquerda, sendo que o oitavo bit e enviado para o carry. O conteúdo do carry e enviado para o bit 0. Se <d> for igual a zero o resultado e colocado no registrador W, se for igual a 1 o resultado e colocado no registro <f>

Ciclos 1

RRFdesloca f para direita usando carry

Sintaxe [label] RRF f,d

Operação veja a descrição

Status C

Codificação 0000 1100 dfff ffff

Descrição O conteúdo do registro <f> é deslocado de um bit para a direita, sendo que o bit zero e enviado para o carry. O conteúdo do carry e enviado para o bit 7. Se <d>

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 15

Page 16: programação_PIC16F877A

for igual a zero o resultado e colocado no registrador W, se for igual a 1 o resultado e colocado no registro <f>

Ciclos 1

SLEEPVai para o modo de repouso (stand by)

Sintaxe [label] SLEEP

Operação 00 -> WDT

0 -> pré-escalador do WDT

1 -> TO barra

0 -> PD barra

Status TO, PD barra

Codificação 0000 0000 0110 0011

Descrição O bit de power down, (PD) é feito igual a zero. O bit de estouro de tempo (time -out) e feito igual a 1. Os temporizadores do watch dog timer e seu pré-escalador são zerados. O processador assume o modo SLEEP , com o oscilador parado. Para sair deste modo somente com reset ou interrupt.

Ciclos 1

SUBLWSubtrai de um literal o valor do registrador W

Sintaxe [label] SUBLW k

Operação k - (W) -> (W)

Status C, DC, Z

Codificação 0011 110x kkkk kkkk

Descrição Subtrai do valor do literal <k> o conteúdo do registrador W. O resultado e colocado em W

Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 16

Page 17: programação_PIC16F877A

SUBWFSubtrai o registro <f> do conteúdo do registro W.

Sintaxe [label] SUBWF f,d

Operação (f) - (W) -> (dest)

Status C, DC, Z

Codificação 0000 0010 dfff ffff

Descrição Subtrai do registrador f o conteúdo do registrador W. Se <d> é igual a zero o resultado é colocado no registro W. Se <d> é igual a 1 o resultado é armazenado no registro f

Ciclos 1

SWAPFInverte bits em f

Sintaxe [label] SWAPF f,d

Operação (f<3^0) -> (dest(<7.4>)

(f<7,4>) -> (dest(<3,0>)

Status nenhum

Codificação 0000 1110 dfff ffff

Descrição Troca de posição os nibles do registrador f. Se <d> é igual a zero o resultado é colocado no registro W. Se <d> é igual a 1 o resultado é armazenado no registro f

Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 17

Page 18: programação_PIC16F877A

XORLWOu exclusivo entre k e o registro W

Sintaxe [label] XORLW k

Operação (W) .XOR. (k) -> (W).

Status Z

Codificação 0011 1010 kkkk kkkk

Descrição Realiza a operação lógica OU EXCLUSIVO entre o registrador k e o registro W. O resultado e colocado no registro W.

Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 18

Page 19: programação_PIC16F877A

XORWFOu exclusivo entre W e f

Sintaxe [label] XORWF f,d

Operação (W) .XOR. (f) -> (destino).

Status Z

Codificação 0011 0100 dfff ffff

Descrição Realiza a operação lógica OU EXCLUSICO entre o registro f e o registro W. Se ,d. for igual a 0 o resultado e colocado no registro W. Se <d> for igual a 1 o resultado ~e colocado no registro f.

Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 19