410 likes | 554 Views
Sistemas Embarcados Microcontroladores PIC. Prof. Wanderley. Instruções. FORMAS DE CONSTRUÇÃO DAS INSTRUÇÕES Instrução do tipo MNEMÔNICO K Possui um operando K, o qual está armazenado ou no registrador W, ou como parte do endereço de destino em instruções de desvio.
E N D
Sistemas Embarcados Microcontroladores PIC Prof. Wanderley
Instruções FORMAS DE CONSTRUÇÃO DAS INSTRUÇÕES • Instrução do tipo MNEMÔNICO K Possui um operando K, o qual está armazenado ou no registrador W, ou como parte do endereço de destino em instruções de desvio. • Instrução do tipo MNEMÔNICO REG Possui um operando REG que representa um dos registradores disponíveis (SFR ou GPR).
Instruções • Instrução do tipo MNEMÔNICO REG, DES O operando REG representa um dos registradores disponíveis (SFR ou GPR), enquanto que DES consiste em um bit indicador de destino da instrução, de modo que: • Se DES for igual a w ou 0, o destino da instrução é o registrador w; • Se DES for igual a f ou 1, o destino da instrução é o próprio registrador REG.
Instruções • Instrução do tipo MNEMÔNICO REG, BIT O operando REG representa um dos registradores disponíveis (SFR ou GPR), enquanto que BIT indica qual dos oito bits do registrador REG é o alvo da instrução. EXEMPLO: Numa instrução “MNEMÔNICO PORTB, 1”, temos que o bit 1 de PORTB será o alvo da instrução.
Instruções ASPECTOS E CONVENÇÕES IMPORTANTES Existem instruções que alteram indiretamente os flags no registrador STATUS; f é uma abreviação de file register e é utilizado para especificar um dos registradores internos do PIC (SFR ou GPR), exceto o W; d é utilizado para especificar o destino da instrução, se w ou f; b é utilizado para especificar um dos 8 bits (0 a 7) do registrador especificado pelo primeiro operando; Cada exemplo de instrução traz consigo uma tabela contendo o estado dos flags C, DC e Z antes e depois da execução da instrução, sendo destacados quando alterados;
Instruções ASPECTOS E CONVENÇÕES IMPORTANTES O tempo de execução de cada instrução é exibido em termos de ciclo de máquina (1 ciclo de máquina equivale a 4 ciclos de clock0; A base numérica utilizada nos exemplos é a hexadecimal, sendo que o valor XX em hexadecimal é representado como 0xXX.
Instruções MANIPULAÇÃO DE REGISTRADORES • Instruções de manipulação de registradores são utilizadas para: • Armazenar dados; • Movimentar dados; ou • Modificar dados. MOVLW k Flags afetados: nenhum Tempo exec.: 1 ciclo Copia o valor da constante k para o registrador w. 0≤k≤255 Os flags C, DC e Z não são afetados
Instruções MANIPULAÇÃO DE REGISTRADORES MOVWF f Flags afetados: nenhum Tempo exec.: 1 ciclo Copia o conteúdo de w para o registrador f. O conteúdo de w não será afetado. Os flags C, DC e Z não são afetados
Instruções MANIPULAÇÃO DE REGISTRADORES MOVF f,d Flags afetados: z Tempo exec.: 1 ciclo Copia o conteúdo do registrador especificado pelo operando f para o destino especificado pelo operando d. d=W ou d=0 faz com que o conteúdo de f seja armazenado em w. d=F ou d=1 faz com que o conteúdo de f seja armazenado em f. Se o valor armazenado for nulo, então Z=1, senão Z=0.
Instruções MANIPULAÇÃO DE REGISTRADORES CLRF f Flags afetados: z Tempo exec.: 1 ciclo Apaga o conteúdo do registrador indicado pelo operando f (armazena 0 em f). Esta instrução faz com que o flag Z=1. CLRW Flags afetados: z Tempo exec.: 1 ciclo Apaga o conteúdo do registrador w (armazena 0 em w). Esta instrução faz com que o flag Z=1.
Instruções MANIPULAÇÃO DE REGISTRADORES INCF f,d Flags afetados: z Tempo exec.: 1 ciclo Incrementa de 1 o conteúdo do registrador indicado pelo operando f, armazenando o resultado no destino indicado pelo operando d. Esta instrução faz com que o flag Z=1. d=W ou d=0 faz com que o destino seja o registrador w. d=F ou d=1 faz com que o destino seja o próprio registrador especificado pelo operando f. Esta instrução afeta o flag z.
Instruções MANIPULAÇÃO DE REGISTRADORES DECF f,d Flags afetados: z Tempo exec.: 1 ciclo Decrementa de 1 o conteúdo do registrador indicado pelo operando f, armazenando o resultado no destino indicado pelo operando d. Esta instrução faz com que o flag Z=1. d=W ou d=0 faz com que o destino seja o registrador w. d=F ou d=1 faz com que o destino seja o próprio registrador especificado pelo operando f.
Instruções MANIPULAÇÃO DE REGISTRADORES BCF f,b Flags afetados: nenhum Tempo exec.: 1 ciclo Apaga (coloca em nível lógico 0) o bit representado pelo operando b do registrador representado pelo operando f. BSF f,b Flags afetados: nenhum Tempo exec.: 1 ciclo Seta (coloca em nível lógico 1) o bit representado pelo operando b do registrador representado pelo operando f.
Instruções MANIPULAÇÃO DE REGISTRADORES SWAPF f,d Flags afetados: nenhum Tempo exec.: 1 ciclo Troca os nibbles do registrador representado pelo operando f (0xXY=>0xYX), armazenando o resultado no destino indicado pelo operando d. d=W ou d=0 faz com que o destino seja o registrador w. d=F ou d=1 faz com que o destino seja o próprio registrador especificado pelo operando f.
Instruções OPERAÇÕES ARITMÉTICAS Flags afetados: Z, DC e C Tempo exec.: 1 ciclo ADDLW k Adição aritmética do valor representado pela constante k ao conteúdo armazenado no registrador w, sendo o resultado armazenado no próprio registrador w. C=1 se o resultado ultrapassar 255 e c=0 caso contrário; DC=1 se houver transbordo do terceiro para o quarto bit do registrador e DC=0 caso contrário; Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções OPERAÇÕES ARITMÉTICAS Flags afetados: Z, DC e C Tempo exec.: 1 ciclo ADDWF f,d Adição aritmética do conteúdo armazenado no registrador w ao conteúdo armazenado no registrador especificado pelo operando f, sendo o resultado armazenado no destino indicado por d. d=W ou d=0 faz com que o destino seja o registrador w. d=F ou d=1 faz com que o destino seja o próprio registrador especificado pelo operando f. C=1 se o resultado ultrapassar 255 e c=0 caso contrário; DC=1 se houver transbordo do terceiro para o quarto bit do registrador e DC=0 caso contrário; Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções OPERAÇÕES ARITMÉTICAS Flags afetados: Z, DC e C Tempo exec.: 1 ciclo SUBLW k Subtração aritmética do conteúdo armazenado no registrador w do valor representado pela constante k, sendo o resultado armazenado no próprio registrador w (w=k-w). C=1 se o resultado ultrapassar 255 e c=0 caso contrário; DC=1 se houver transbordo do terceiro para o quarto bit do registrador e DC=0 caso contrário; Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções OPERAÇÕES ARITMÉTICAS Flags afetados: Z, DC e C Tempo exec.: 1 ciclo SUBWF f,d Subtração aritmética do conteúdo armazenado no registrador w do conteúdo armazenado no registrador especificado pelo operando f, sendo o resultado armazenado no destino indicado por d. d=W ou d=0 faz com que o destino seja o registrador w (w=f-w). d=F ou d=1 faz com que o destino seja o próprio registrador especificado pelo operando f (f=f-w). C=1 se o resultado ultrapassar 255 e c=0 caso contrário; DC=1 se houver transbordo do terceiro para o quarto bit do registrador e DC=0 caso contrário; Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções OPERAÇÕES LÓGICAS Flags afetados: Z Tempo exec.: 1 ciclo ANDLW k AND lógico bit a bit do conteúdo da constante representada pelo operando k com o conteúdo do registrador w, sendo o resultado armazenado no registrador w (w = w AND k). Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções OPERAÇÕES LÓGICAS Flags afetados: Z Tempo exec.: 1 ciclo ANDWF f,d AND lógico do conteúdo armazenado no registrador w com o conteúdo armazenado no registrador especificado pelo operando f, sendo o resultado armazenado no destino indicado por d. d=W ou d=0 faz com que o destino seja o registrador w (w = f AND w). d=F ou d=1 faz com que o destino seja o próprio registrador especificado pelo operando f (f = f AND w). Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário.
Instruções OPERAÇÕES LÓGICAS Flags afetados: Z Tempo exec.: 1 ciclo IORLW k OR lógico bit a bit do conteúdo da constante representada pelo operando k com o conteúdo do registrador w, sendo o resultado armazenado no registrador w (w = w OR k). Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções OPERAÇÕES LÓGICAS Flags afetados: Z Tempo exec.: 1 ciclo IORWF f,d OR lógico do conteúdo armazenado no registrador w com o conteúdo armazenado no registrador especificado pelo operando f, sendo o resultado armazenado no destino indicado por d. d=W ou d=0 faz com que o destino seja o registrador w (w = f OR w). d=F ou d=1 faz com que o destino seja o próprio registrador especificado pelo operando f (f = f OR w). Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário.
Instruções OPERAÇÕES LÓGICAS Flags afetados: Z Tempo exec.: 1 ciclo XORLW k XOR lógico bit a bit do conteúdo da constante representada pelo operando k com o conteúdo do registrador w, sendo o resultado armazenado no registrador w (w = w XOR k). Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções OPERAÇÕES LÓGICAS Flags afetados: Z Tempo exec.: 1 ciclo XORWF f,d OR lógico do conteúdo armazenado no registrador w com o conteúdo armazenado no registrador especificado pelo operando f, sendo o resultado armazenado no destino indicado por d. d=W ou d=0 faz com que o destino seja o registrador w (w = f XOR w). d=F ou d=1 faz com que o destino seja o próprio registrador especificado pelo operando f (f = f XOR w). Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário.
Instruções OPERAÇÕES LÓGICAS Flags afetados: Z Tempo exec.: 1 ciclo COMF f,d Complementa (inverte) o nível lógico dos bits do registrador especificado pelo operando f, sendo o resultado armazenado no destino indicado por d. d=W ou d=0 faz com que o destino seja o registrador w (w = f’). d=F ou d=1 faz com que o destino seja o próprio registrador especificado pelo operando f (f = f’). Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário.
Instruções C Registrador f OPERAÇÕES LÓGICAS Flags afetados: C Tempo exec.: 1 ciclo RLF f,d O conteúdo do registrador especificado pelo operando f é deslocado 1 bit à esquerda; O valor do flag C é armazenado no bit 0 do registrador f; O bit excedente do registrador f é armazenado no flag C; O resultado é armazenado no destino indicado pelo operando d.
Instruções C Registrador f OPERAÇÕES LÓGICAS Flags afetados: C Tempo exec.: 1 ciclo RRF f,d O conteúdo do registrador especificado pelo operando f é deslocado 1 bit à direita; O valor do flag C é armazenado no bit 7 do registrador f; O bit excedente do registrador f é armazenado no flag C; O resultado é armazenado no destino indicado pelo operando d.
Instruções OPERAÇÕES DE DESVIO • O objetivo é desviar o fluxo do programa para outro local. • Podem ser classificados como: • desvios com retorno; • desvios sem retorno. • Desvios com retorno são também conhecidos como chamada de sub-rotina. • O fluxo do programa é desviado, retornando ao ponto de desvio. • As chamadas de sub-rotina fazem uso da pilha.
Instruções OPERAÇÕES DE DESVIO • Nos desvios sem retorno o fluxo do programa é desviado para outro ponto, seguindo então a partir de lá. • Os desvios em retornos podem ser classificados ainda como: • condicionais; • incondicionais. • Os desvios condicionais ocorrem se uma determinada condição for verdadeira. • Os desvios incondicionais ocorrem independente de qualquer condição.
Instruções OPERAÇÕES DE DESVIO Flags afetados: nenhum Tempo exec.: 2 ciclos GOTO k Desvia o programa para o ponto especificado por k. Trata-se de um desvio incondicional (sem retorno). É importante lembrar que nos dispositivos com mais de 2k de memória se faz necessário modificar o conteúdo de PCLATH de acordo com o endereço especificado por k, de modo a acessar a página de memória adequada.
Instruções OPERAÇÕES DE DESVIO Flags afetados: nenhum Tempo exec.: 2 ciclos CALL k Chamada de sub-rotina especificada por k. A CPU se encarrega de guarda o valor atual de PC adicionado de 1 na pilha, desviando a seguir para a sub-rotina. É importante lembrar que nos dispositivos com mais de 2k de memória se faz necessário modificar o conteúdo de PCLATH de acordo com o endereço especificado por k, de modo a acessar a página de memória adequada.
Instruções OPERAÇÕES DE DESVIO Flags afetados: nenhum Tempo exec.: 2 ciclos RETURN Ao término da sub-rotina, faz-se necessário uma instrução RETURN, responsável por restaurar o valor de PC armazenado na pilha. Flags afetados: nenhum Tempo exec.: 2 ciclos RETLW k Ao término da sub-rotina, a instrução RETLW restaurará o valor de PC armazenado na pilha e, além disso, copiará o valor do operando k para o registrador w.
Instruções OPERAÇÕES DE DESVIO Flags afetados: nenhum Tempo exec.: 2 ciclos RETFIE Retorna de uma interrupção. Liga o bit GIE (GIE=1) do registrador INTCON.
Instruções OPERAÇÕES DE DESVIO Flags afetados: nenhum Tempo exec.: 1 ou 2 ciclos BTFSC f,b Instrução de desvio condicional. Testa o bit especificado pelo operando b do registrador especificado pelo operando f, saltando a próxima instrução caso tal bit tenha nível lógico 0. A instrução levará 1 ciclo de máquina caso não ocorra desvio (o bit testado tem nível lógico 1) e 2 ciclos de máquina caso contrário.
Instruções OPERAÇÕES DE DESVIO Flags afetados: nenhum Tempo exec.: 1 ou 2 ciclos BTFSS f,b Instrução de desvio condicional. Testa o bit especificado pelo operando b do registrador especificado pelo operando f, saltando a próxima instrução caso tal bit tenha nível lógico 1. A instrução levará 1 ciclo de máquina caso não ocorra desvio (o bit testado tem nível lógico 0) e 2 ciclos de máquina caso contrário.
Instruções OPERAÇÕES DE DESVIO Flags afetados: nenhum Tempo exec.: 1 ou 2 ciclos DECFSZ f,d Instrução de desvio condicional. Decrementa o conteúdo do registrador especificado pelo operando f (subtrai de 1), saltando a próxima instrução caso o resultado após o decremento seja nulo. O resultado é armazenado no destino indicado pelo operando d. A instrução levará 1 ciclo de máquina caso não ocorra desvio (o resultado do decremento é não nulo) e 2 ciclos de máquina caso contrário.
Instruções OPERAÇÕES DE DESVIO Flags afetados: nenhum Tempo exec.: 1 ou 2 ciclos INCFSZ f,d Instrução de desvio condicional. Incrementa o conteúdo do registrador especificado pelo operando f (adiciona 1), saltando a próxima instrução caso o resultado após o decremento seja nulo. O resultado é armazenado no destino indicado pelo operando d. A instrução levará 1 ciclo de máquina caso não ocorra desvio (o resultado do incremento é não nulo) e 2 ciclos de máquina caso contrário.
Instruções OPERAÇÕES DE CONTROLE Para funções internas e controle de CPU. NOP Flags afetados: nenhum Tempo exec.: 1 ciclo Não executa nenhuma operação.
Instruções OPERAÇÕES DE CONTROLE Flags afetados: Tempo exec.: 1 ciclo CLRWDT Limpa o contador do watchdog. A instrução é utilizada periodicamente para impedir que a CPU venha a resetar. Os flags são setados (colocados em nível lógico 1).
Instruções OPERAÇÕES DE CONTROLE Flags afetados: Tempo exec.: 1 ciclo SLEEP Aciona o modo de baixa potência (power-down mode) da CPU. O processamento é parado. O conteúdo da memória é preservado. O flag é setado (colocado em nível lógico 1). O flag é zerado (colocado em nível lógico 0).