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:
———————————————————————-
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:
———————————————————————-
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:
———————————————————————-
CLRW : Move valor zero para registrador “W”,
EXEMPLO: Caso se queira zerar o registrador W, utilizaríamos a seguinte instrução:
———————————————————————-
CLRF f : Move valor zero para registrador “f”,
EXEMPLO: Caso se queira zerar o endereço 32, utilizaríamos a seguinte instrução:
———————————————————————-
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.
———————————————————————-
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:
———————————————————————-
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:
———————————————————————-
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:
———————————————————————-
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.
———————————————————————-
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:
———————————————————————-
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:
———————————————————————-
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:
———————————————————————-
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:
———————————————————————-
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:
———————————————————————-
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
———————————————————————-
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.