Prévia do material em texto
UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 1 SISTEMAS MICROPROCESSADOS - SOFTWARE NOTA DE AULA 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: w 13 MOVLW 0x4F MOVF 0x2C,0 End. Valor 2A 2B 2C 13 2D End. Valor w 4F 4F UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 2 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: MOVWF 0x18 End. Valor 16 17 18 85 19 End. Valor w 85 CLRW Valor 00 End. Valor w 00 CLRF 0x32 Valor 00 End. Valor 30 nn 31 nn 32 00 33 nn UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 3 Instruções de Bits 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 BSF 0x06 , 1 UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 4 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: BCF 0x06 , 1 SWAPF 0x41,0 End. Valor 41 17 End. Valor W 71 COMF 0x31,0 End. Valor 31 55 End. Valor W AA UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 5 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. COMO É REPRESENTADO NO FLUXOGRAMA BIT=1 COMO É REPRESENTADO NO PROGRAMA: . BTSFC 0x5,2 BSF 0x06 , 1 CONTINUA: (Aqui o programa continua...) MOVLW 0x15 etc. BIT=0 BTFSC 0x05,2 LIGAR MOTOR BSF 0x06 , 1 CONTINUA O PROGRAMA NORMALMENTE CONTINUA UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 6 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: COMO É REPRESENTADO NO FLUXOGRAMA COMO É REPRESENTADO NO PROGRAMA: . BTSFC 0x5,2 BCF 0x06 , 1 CONTINUA:MOVLW 0x15 etc. BIT=1 BTFSS 0x05,2 DESLIGA O MOTOR BCF 0x06 , 1 CONTINUA O PROGRAMA NORMALMENTE BIT=0 CONTINUA UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 7 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: ZERO DECFSZ 0x30 , 1 NÃO ZERO CONTINUA CONTINUA O PROGRAMA NORMALMENTE GOTO REPETE REPETE LIGA O LED BCF 0x06 , 2 COMO É REPRESENTADO NO PROGRAMA: . REPETE: DECFSZ 0X30 , 1 GOTO REPETE BSF 0x6 , 2 etc. UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 8 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: ZERO INCFSZ 0x30 , 1 NÃO ZERO CONTINUA CONTINUA O PROGRAMA NORMALMENTE GOTO REPETE REPETE LIGA O LED BCF 0x06 , 2 COMO É REPRESENTADO NO PROGRAMA: . REPETE: INCFSZ 0X30 , 1 GOTO REPETE BSF 0x6 , 2 etc. UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 9 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: COMO É REPRESENTADO NO PROGRAMA: . GOTO 230 BSF 0x6 , 2 .END 230: ADDLW 0x18 S A L T A E S T A P A R T E SALTA GOTO 0x230 END 230 CONTINUA O PROGRAMA NORMALMENTE O PROGRAMA PARA AQUI END ATUAL: 120 S A L T A E S T A P A R T E UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 10 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: COMO É REPRESENTADO NO PROGRAMA: . CALL 350 BSF 0x6 , 2 .END 350: ADDLW 0x18 RETURN SALTA CALL 0x350 END 350 EXECUTA A SUBROTINA O PROGRAMA CONTINUA AQUI APÓS EXECUTAR SUBROTINA END ATUAL: 120 S A L T A E S T A P A R T E RETURN UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 11 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çãp. CLRWDT Zera contador de Watch Dog. Instruções de Lógica ANDLW k Faz operação AND entre “W” e um valor constante “K” guardando resultado em “W” onde: “k”= Valor de 00 a FFh EXEMPLO: Supondo que W tenha 3F e deseja-se fazer operação AND com o valor 0x64, utilizaríamos a seguinte instrução: ANDWL 0x64 End. Valor w 3F Valor k 64 End. Valor w 24 AND UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 12 ANDWF “f”,”d” Faz operação AND entre “W” e o 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 W tenha 3F e deseja-se fazer operação AND com o valor guardado no endereço 2F, guardando o resultado em W utilizaríamos a seguinte instrução: IORLW K Faz operação OR entre “W” e um valor K colocando resultado em W: onde: “K”= É um valor de 00 a FF EXEMPLO: Supondo que W tenha 3D e deseja-se fazer operação OR com o valor 44, guardando o resultado em W utilizaríamos a seguinte instrução: ANDWF 0x2F,0 End. Valor W 3F End. Valor 2F D3 End. Valor W 13 AND IORLW 0x44 End. Valor W 3D lor 44 End. Valor W 7D OR UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 13 IORWF “f”,”d” Faz operação OR entre “W” e o 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 W tenha 2E e deseja-se fazer operação OR com o valor guardado no endereço 42, guardando o resultado em W utilizaríamos a seguinte instrução: XORLW K Faz operação XOR (ou exclusivo) entre “W” e um valor K colocando resultado em W: onde: “K”= É um valor de 00 a FF EXEMPLO: Supondo que W tenha 3D e deseja-se fazer operação XOR com o valor 44, guardando o resultado em W utilizaríamos a seguinte instrução: IORWF 0x42,0 End. Valor W 2E End. Valor 42 55 End. Valor W 7F OR XORLW 0x44 End. Valor W 3D lor 44 End. Valor W 79 XOR UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 14 XORWF “f”,”d” Faz operação XOR entre “W” e o 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 W tenha 2E e deseja-se fazer operação XOR com o valor guardado no endereço 42, guardando o resultado em W utilizaríamos a seguinte instrução: Instruções de Rotação RLF “f”,”d” Rotaciona os bits para esquerda através do carry o 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 rotacionar o valor guardado no endereço 2A, guardando o resultado em W, supondo que carry tenha “1”, utilizaríamos a seguinte instrução: XORWF 0x42,0 End. Valor W 2E End. Valor 42 55 End. Valor W 7B XOR End. Valor 2A 26 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 1 RLF 0x2A,0 End. Valor W 4D CY 1 0 UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 15 RRF “f”,”d” Rotaciona os bits para direita através do carry o 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 rotacionar o valor guardado no endereço 0C, guardando o resultado em W, supondo que carry tenha “0”, utilizaríamos a seguinte instrução: INSTRUÇÕES DE ARITMÉTICA ADDLW k Faz a soma entre “W” e um valor constante “K” guardando resultado em “W” onde: “k”= Valor de 00 a FFh EXEMPLO: Supondoque W tenha 3F e deseja-se fazer operação de SOMA com o valor 0x64, utilizaríamos a seguinte instrução: ADDWF “f”,”d” Faz a soma entre “W” e o 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 End. Valor 0C 4B 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1 RRF 0x0C,0 End. Valor W 25 CY 0 1 ADDLW 0x64 End. Valor w 3F Valor k 64 End. Valor w A3 + UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 16 “d”= 0 ou 1: onde será armazenado o resultado. EXEMPLO: Supondo que W tenha 3F e deseja-se fazer operação AND com o valor guardado no endereço 2F, guardando o resultado em W utilizaríamos a seguinte instrução: SUBLW k Faz a subtração entre “W” e um valor constante “K” guardando resultado em “W” onde: “k”= Valor de 00 a FFh EXEMPLO: Supondo que W tenha 6F e deseja-se fazer operação de SUBTRAÇÃO com o valor 0x3A, utilizaríamos a seguinte instrução: SUBWF “f”,”d” Faz a soma entre “W” e o 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 W tenha 3F e deseja-se fazer operação SUBTRAÇÃO com o valor guardado no endereço 2F, guardando o resultado em W utilizaríamos a seguinte instrução: INCF “f”,”d” Incrementa (soma 1) o conteúdo de um endereço “f” colocando resultado em: ADDWF 0x2F,0 End. Valor W 3F End. Valor 2F 1A End. Valor W 59 + SUBLW 0x3A End. Valor w 6F Valor k 3A End. Valor w 35 - SUBWF 0x2F,0 End. Valor W 3F End. Valor 2F 1A End. Valor W 25 - UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 17 • 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 incrementar o valor guardado no endereço 4D, guardando o resultado em W utilizaríamos a seguinte instrução: DECF “f”,”d” Decrementa (subtrai 1) o 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 decrementar o valor guardado no endereço 2A, guardando o resultado em W utilizaríamos a seguinte instrução: INCF 0x4D,0 End. Valor 4D 39 End. Valor W 3A DECF 0x2A,0 End. Valor 2A 60 End. Valor W 5F UNIVERSIDADE PAULISTA – UNIP NOTA DE AULA MICROPROCESSADOS – II Prof. Ms. Marco Antonio Baptista. Pg. 18