Desde 1989

SET DE INSTRUÇÕES DO PIC 16F628A EXPLICADO

SISTEMAS MICROPROCESSADOS – SOFTWARE

 

Instruções de Movimentação:

 

O PIC possui apenas um registrador conhecido por “W” (Work). Todas as instruções podem ser executadas através de valores de W juntamente com o conteúdo de uma posição de memória RAM, que aqui é chamado de “f” (file).

Quando se quer se referir a uma constante em uma instrução, este é representado por “L” (Literal).

Quando se quer indicar que um número é hexadecimal, coloca-se “0x” a frente do numero. Exemplo o número 7A em hexa é representado por 0x7A.

————————————————————

Abaixo será apresentado as instruções básicas do PIC:

MOVLW K – Mover literal K para registrador W

onde: K= é um número de 0 a FF

EXEMPLO: Se desejarmos carregar o numero 4F no registrador W:

MOVLW K

———————————————————————-

MOVF f,d – Mover (copiar) valor de uma posição de memória “f” para um

destino , conforme valor de “d”:

• Caso “d” = 0, move “f” para W.

• Caso “d” = 1, move “f” para si mesmo “f”.(???????)

onde: “f”= Endereço de memória de 00 a 7Fh

EXEMPLO: Se copiar o valor guardado no endereço 2C para o W, utilizaríamos a seguinte instrução:

MOVF f,d

———————————————————————-

MOVWF f – Mover (copiar) valor guardado em “W” para a posição de memória “f

EXEMPLO: Se copiar o valor guardado no endereço W para o endereço 18, utilizaríamos a seguinte instrução:

MOVWF f

———————————————————————-

CLRW : Move valor zero para registrador “W”,

EXEMPLO: Caso se queira zerar o registrador W, utilizaríamos a seguinte instrução:

CLRW

———————————————————————-

CLRF f : Move valor zero para registrador “f”,

EXEMPLO: Caso se queira zerar o endereço 32, utilizaríamos a seguinte instrução:

CLRF f

———————————————————————-

INSTRUÇÕES DE BITS

 

PLACA

Supondo que tenhamos a situação acima onde temos ligado em um PIC com 3 botões na porta A, um motor no bit 1 da porta B e 1 led no bit 2 da porta B, que utilizaremos para exemplificar a aplicação das instruções abaixo.

BSF f,b – “Setar” (Forçar 1) no bit “b” do endereço “f”, onde:

f= Endereço de memória de 00 a 7Fh

b= Bit de 0 a 7

Exemplo: Supondo queira ligar o motor conectado ao bit 1 da porta B do esquema acima, sabendo-se que o endereço de memória da porta B é 06, utilizaria no programa a seguinte instrução.

BSF

———————————————————————-

BCF f,b – “Clear” (limpa) o bit “b” do endereço “f”, onde:

f= Endereço de memória de 00 a 7Fh

b= Bit de 0 a 7

Exemplo: Supondo queira desligar o motor conectado ao bit 1 da porta B do esquema acima, sabendo-se que o endereço de memória da porta B é 06, utilizaria no programa a seguinte instrução:

BCF

———————————————————————-

COMF “f”,”d” – Faz o complemento (inverte os bits) do conteúdo de um endereço “f” colocando resultado em:

• Caso “d” = 0, resultado vai para W.

• Caso “d” = 1, resultado decrementado volta para “f”.

onde:

“f”= Endereço de memória de 00 a 7Fh

“d”= 0 ou 1: onde será armazenado o resultado.

EXEMPLO: Supondo que queiramos inverter os bits do valor guardado no endereço 31, guardando o resultado em W utilizaríamos a seguinte instrução:

COMF

———————————————————————-

SWAPF “f”,”d” – Inverte os nibles do conteúdo de um endereço “f” colocando resultado em:

• Caso “d” = 0, resultado vai para W.

• Caso “d” = 1, resultado decrementado volta para “f”.

onde:

“f”= Endereço de memória de 00 a 7Fh

“d”= 0 ou 1: onde será armazenado o resultado.

EXEMPLO: Supondo que queiramos inverter os nibles do valor guardado no endereço 41, guardando o resultado em W utilizaríamos a seguinte instrução:

SWAPF

———————————————————————-

INSTRUÇÕES DE DESVIOS E DECISÕES

 

BTFSC f,b – Testa bit “b” do endereço “f” e salta a próxima instrução se o bit “b” estiver em ”ZERO”. onde:

f= Endereço de memória de 00 a 7Fh

b= Bit de 0 a 7

Exemplo: Usando o circuito-exemplo acima, imagine que se queira saber sobre o botão ligado ao bit 2 da porta A e, caso esteja ligado, o programa deverá ligar o motor ligado ao bit 1 da porta B, sabendo-se que o endereço de memória da porta A é 05 e da porta B é 06, utilizaria no programa a seguinte instrução.

FLOXO1

———————————————————————-

BTFSS f,b – Testa bit “b” do endereço “f” e salta a próxima instrução se o bit “b” estiver em ”UM”. onde:

f= Endereço de memória de 00 a 7Fh

b= Bit de 0 a 7

Exemplo: Usando o circuito-exemplo acima, imagine que queira-se saber o estado do botão ligado ao bit 2 da porta A e, caso esteja desligado, o programa deverá desligar um motor ligado ao bit 1 da porta B, sabendo-se que o endereço de memória da porta A é 05 e da porta B é 06, utilizaria no programa a seguinte instrução:

FLOXO2

———————————————————————-

DECFSZ “f”,”d” – Subtrai 1 do registro “f” saltando se o resultado for zero, colocando valor decrementado em:

• Caso “d” = 0, resultado vai para W.

• Caso “d” = 1, resultado decrementado volta para “f”.

onde:

“f”= Endereço de memória de 00 a 7Fh

“d”= 0 ou 1: onde será armazenado o resultado.

Exemplo: Caso tenha um valor no endereço 0x30 de memória e este será decrementado até que chegue em zero. Caso seja zero, acenderá o led ligado ao bit 2 da porta B, sabendo-se que o endereço da porta B é 06, o programa ficaria:

FLUXO3

———————————————————————-

INCFSZ “f”,”d” – Soma 1 ao registro “f” e salta se resultado for zero, colocando valor incrementado em:

• Caso “d” = 0, resultado vai para W.

• Caso “d” = 1, resultado decrementado volta para “f”.

onde:

“f”= Endereço de memória de 00 a 7Fh

“d”= 0 ou 1: onde será armazenado o resultado.

Exemplo: Caso tenha um valor no endereço 0x30 de memória e este será incrementado (somado 1) até que este passe de FF e volte a zero. Caso seja zero, acenderá o led ligado ao bit 2 da porta B, sabendo-se que o endereço da porta B é 06, o programa ficaria:

FLOXO4

———————————————————————-

GOTO K – Desvia o programa para um endereço até de 0 a 2047 (dentro da memória de programa):

onde: “K”= Endereço de memória de 00 a 2047

Exemplo: Caso queira-se desviar o programa para um endereço diferente de onde esteja, usa-se GOTO e o endereço de destino neste caso, o programa ficaria:

FLOXO5

———————————————————————-

CALL K – Chama subrotina do programa em endereço até de 0 a 2047 (dentro da memória de programa):

onde: “K”= Endereço de memória de 00 a 2047

Exemplo: Caso queira-se desviar o programa para um endereço diferente de onde esteja, usa-se CALL e o endereço de destino neste caso, o programa ficaria:

FLUXO6

———————————————————————-

INSTRUÇÕES DE RETORNO

RETURN Retorna de uma subrotina chamada por uma instrução CALL

RETLW K Retorna de uma subrotina chamada por uma instrução CALL com um valor “k” no registrador W

onde: “K”= Valor de 00 a FFh

RETFIE Retorna de uma subrotina chamada por uma INTERRUPÇÃO

———————————————————————-

INSTRUÇÕES DE CONTROLE

NOP (No Operation) Instrução nula, não executa nada.

SLEEP Coloca processador no modo de baixo consumo, até que receba um reset ou uma interrupção.

CLRWDT Zera contador de Watch Dog.


 Com sede própria em São Bernardo do Campo, desde 1989 a ELMAR atende a clientes das mais diversas áreas da Automação, desenvolvendo soluções criativas, eficientes e eficazes contando com corpo técnico em constante aperfeiçoamento para que possamos manter a liderança de mercado na área de consultoria, treinamento, projetos e assistência técnica. Aguardamos seu contato.