Fundamentos e Operação de Microcontroladores PIC: Perguntas e Respostas
Classificado em Computação
Escrito em em
português com um tamanho de 18,41 KB
O que é PIC (Peripheral Interface Controller)?
É uma interface controladora de periféricos.
O que é um Microcontrolador?
É um microprocessador que possui internamente vários circuitos eletrônicos que, em um microprocessador comum, precisariam ser externos para sua funcionalidade. Exemplos incluem: memória de dados e memória de programa, portas de entrada e saída de dados, circuito de reset, circuitos de comunicação serial e paralela, entre outros.
Arquiteturas Harvard vs. Von Neumann
A arquitetura Harvard possui dois barramentos distintos: um para dados e outro para instruções. Já o modelo Von Neumann utiliza um único barramento para instruções e dados. A arquitetura Harvard permite que, enquanto uma instrução é executada, outra seja buscada na memória, o que resulta em um processamento mais rápido.
O que Caracteriza a Arquitetura RISC?
- Poucas instruções
- Instruções com formato fixo
- Complexidade no compilador
Contador de Programa (Program Counter)
É um registrador da Unidade Central de Processamento (CPU) que indica a posição atual na sequência de execução de um processo.
Qual a Função do Registrador Stack (Pilha)?
É uma região de memória utilizada para armazenamento temporário de dados, como endereços de retorno de função e variáveis locais.
Para que Serve o Oscilador Ligado ao Microcontrolador?
Serve para produzir um sinal eletrônico repetitivo, essencial para a correta precisão e sincronização do sistema.
Do Ponto de Vista de Precisão, Qual é o Melhor Oscilador: RC, Ressonador ou Cristal?
O circuito a cristal é o mais preciso, pois os cristais são os osciladores mais estáveis e exatos que podemos utilizar.
O Microcontrolador PIC Possui Oscilador Interno e Pode Trabalhar Independentemente de um Circuito Externo. Esta Afirmação é Verdadeira? Se Sim, Qual a Vantagem e a Desvantagem Desta Configuração?
Sim, a afirmação é verdadeira.
Vantagens:
- Menos suscetível a ruídos externos.
- Permite enviar o sinal de clock para comunicação síncrona ou processos síncronos com outros microcontroladores ou periféricos.
Desvantagens:
- Menor velocidade de processamento comparado a um oscilador externo.
O que é um Pipeline?
É uma técnica de segmentação de instruções que permite à CPU buscar uma ou mais instruções adicionais enquanto a instrução atual está sendo executada, otimizando o processamento.
Na Arquitetura do PIC16F, Quais São as Duas Memórias Internas e Para que Serve Cada Uma?
- Memória Flash de Programa: Utilizada para armazenar o software (código) do microcontrolador.
- Memória RAM (File Registers): Utilizada para armazenar dados temporários e variáveis durante a execução das instruções do microcontrolador.
No Mapa da Memória de Programa do PIC16F628A, Onde Estão Localizados o Vetor de Reset e o Vetor de Interrupção?
- Vetor de Reset: Endereço
000h - Vetor de Interrupção: Endereço
0004h
Quando a Memória é Dividida em Várias Páginas, Como Chamamos Este Conceito?
Chamamos de Paginação de Memória.
O PIC16F877A Utiliza Paginação de Memória de Programa (4 Páginas). Como Chamar Estas Páginas Manualmente?
Para gerenciar e chamar estas páginas manualmente, utilizam-se as instruções CALL e GOTO, direcionando para os endereços desejados dentro de cada página.
Qual é o Primeiro Endereço da Memória de Uso Geral Disponível para o Usuário nos PICs 16F628A e 16F877A?
O primeiro endereço da memória de uso geral (GPR - General Purpose Registers) disponível para o usuário é 0x20 (ou 32 em decimal).
Em Qual Registrador Estão Localizados os Bits Z, C e DC?
Estão localizados no Registrador STATUS.
Quais São as Funções dos Bits Z, C e DC do Registrador STATUS?
- Z (Zero Flag): Indica se o resultado da última operação aritmética ou lógica foi zero.
0: O resultado não foi zero.1: O resultado foi zero.
- DC (Digit Carry/Borrow Flag): Indica um "carry" (transporte) ou "borrow" (empréstimo) entre o bit 3 e o bit 4 de uma operação. É útil em operações BCD (Binary-Coded Decimal).
0: Não houve carry/borrow entre o bit 3 e 4.1: Houve carry/borrow entre o bit 3 e 4.
- C (Carry/Borrow Flag): Indica um "carry" (transporte) ou "borrow" (empréstimo) do bit mais significativo (MSB) de uma operação.
0: Não houve carry/borrow.1: Houve carry/borrow (o resultado ultrapassou os 8 bits disponíveis).
Considerando que o Bit RP1 do Registrador STATUS é Zero, Para que Servem os Comandos BCF STATUS,RP0 e BSF STATUS,RP0?
BCF STATUS,RP0: Limpa o bitRP0do registradorSTATUS(seta para0), selecionando o Banco 0 da memória de dados.BSF STATUS,RP0: Seta o bitRP0do registradorSTATUS(seta para1), selecionando o Banco 1 da memória de dados.
Para que Servem os Registradores TRISA e TRISB?
Esses registradores são utilizados para configurar a direção dos pinos das portas A e B, respectivamente, como entrada ou saída:
- Um bit configurado com
1no registradorTRISxdefine o pino correspondente como entrada. - Um bit configurado com
0no registradorTRISxdefine o pino correspondente como saída.
Em Qual Banco da Memória de Dados Encontramos o Registrador TRISA?
O registrador TRISA é encontrado no Banco 1 da memória de dados (endereço 85h).
O que Foi Configurado no PIC Pela Sequência de Comandos Abaixo?
MOVLW B'00001110'MOVWF TRISAEsta sequência configura os pinos RA1, RA2 e RA3 da Porta A como entrada, e os demais pinos (RA0, RA4, RA5, RA6, RA7) como saída.
Para que Servem as Definições do MPLAB a Seguir?
EQU: É uma diretiva do compilador que associa um nome simbólico a um valor numérico constante.#DEFINE: É uma diretiva do pré-processador que associa um nome a uma expressão (realiza substituição de texto).ORG: É uma diretiva que define o endereço de origem (offset) para a próxima instrução ou dado na memória de programa.#INCLUDE: É uma diretiva que insere o conteúdo de outro arquivo (definições, texto ou código-fonte) no ponto onde a diretiva é encontrada.
O que Está Sendo Realizado na Sequência Abaixo?
MIN EQU .10MAX EQU .240MIN EQU .10: Atribui o valor decimal10à constante simbólicaMIN.MAX EQU .240: Atribui o valor decimal240à constante simbólicaMAX.
O que Foi Configurado no PIC Pelo Comando __CONFIG Abaixo?
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSCEste comando configura os bits de configuração do PIC no ambiente MPLAB, definindo o estado (ativo/desativado) de diversas funcionalidades:
_BODEN_ON: Brown-Out Detect (BOD) ativado._CP_OFF: Code Protection (Proteção de Código) desativada._PWRTE_ON: Power-Up Timer Enable (PWRT) ativado._WDT_OFF: Watchdog Timer (WDT) desativado._LVP_OFF: Low Voltage Programming (LVP) desativada._MCLRE_ON: Master Clear Enable (MCLR) ativado (pino RA5/MCLR como reset externo)._XT_OSC: Oscilador tipo XT (Cristal) selecionado.
Qual a Diferença Entre as Instruções GOTO e CALL?
GOTO: É uma instrução de salto incondicional. Ela desvia o fluxo de execução do programa para um novo endereço, sem guardar o endereço de retorno. Pode ser usada para criar loops infinitos ou pular seções de código.CALL: É uma instrução de chamada de sub-rotina. Ela desvia o fluxo de execução para um novo endereço (o início da sub-rotina), mas antes disso, salva o endereço da próxima instrução na pilha (Stack). Isso permite que, ao final da sub-rotina (com a instruçãoRETURN), o programa retorne ao ponto de onde foi chamado.
Análise de Trechos de Código Assembly
Exemplo 1: Controle de LED com Botão
#DEFINE BOTAO PORTA,0
#DEFINE LED PORTB,0
MAIN
BTFSC BOTAO
GOTO BL
GOTO BP
BL
BCF LED
GOTO MAIN
BP
BSF LED
GOTO MAIN#DEFINE BOTAO PORTA,0: Define o símboloBOTAOcomo o bit 0 da Porta A (RA0).#DEFINE LED PORTB,0: Define o símboloLEDcomo o bit 0 da Porta B (RB0).MAIN: Rótulo que marca o início do programa principal.BTFSC BOTAO: Testa o bitBOTAO(RA0). Se o bit for0(botão pressionado, assumindo pull-up), a próxima instrução é pulada.GOTO BL: SeBOTAOfor0(pressionado), pula para o rótuloBL.GOTO BP: SeBOTAOfor1(não pressionado), a instruçãoGOTO BLé pulada, e o programa salta para o rótuloBP.BL: Rótulo para a rotina de "LED desligado".BCF LED: Limpa o bitLED(RB0), desligando o LED.GOTO MAIN: Retorna ao início do programa principal para testar o botão novamente.BP: Rótulo para a rotina de "LED ligado".BSF LED: Seta o bitLED(RB0), ligando o LED.GOTO MAIN: Retorna ao início do programa principal para testar o botão novamente.
Exemplo 2: Rotina de Contagem (Incremento)
MOVLW .236
MOVWF X
VOLTA
CALL BIP
INCFSZ X,F
GOTO VOLTA
GOTO PRINCIPALMOVLW .236: Move o valor decimal236para o registrador de trabalhoW.MOVWF X: Move o conteúdo deWpara o registradorX.VOLTA: Rótulo para o início do loop.CALL BIP: Chama a sub-rotinaBIP.INCFSZ X,F: Incrementa o registradorX. Se o resultado for zero, a próxima instrução é pulada. O resultado é armazenado de volta emX(Findica o próprio registrador).GOTO VOLTA: SeXainda não for zero após o incremento, salta de volta paraVOLTApara continuar o loop.GOTO PRINCIPAL: SeXse tornou zero, a instruçãoGOTO VOLTAé pulada, e o programa salta para o rótuloPRINCIPAL.
Exemplo 3: Rotina de Contagem (Decremento)
MOVLW .15
MOVWF X
VOLTA
CALL BIP
DECFSZ X,F
GOTO VOLTA
GOTO PRINCIPALMOVLW .15: Move o valor decimal15para o registrador de trabalhoW.MOVWF X: Move o conteúdo deWpara o registradorX.VOLTA: Rótulo para o início do loop.CALL BIP: Chama a sub-rotinaBIP.DECFSZ X,F: Decrementa o registradorX. Se o resultado for zero, a próxima instrução é pulada. O resultado é armazenado de volta emX(Findica o próprio registrador).GOTO VOLTA: SeXainda não for zero após o decremento, salta de volta paraVOLTApara continuar o loop.GOTO PRINCIPAL: SeXse tornou zero, a instruçãoGOTO VOLTAé pulada, e o programa salta para o rótuloPRINCIPAL.
Na Rotina Anterior (Exemplo 3), o que Acontece se Mudarmos DECFSZ X,F para INCFSZ X,F?
Se a instrução DECFSZ X,F for substituída por INCFSZ X,F, o registrador X será incrementado em 1 a cada passagem pelo loop. O loop continuará até que X atinja o valor 0 (após um estouro de FFh para 00h), momento em que a próxima instrução (GOTO VOLTA) será pulada.
Como a Instrução DECFSZ Afeta os Flags Z e C do Registrador STATUS?
A instrução DECFSZ (Decrement File Register, Skip if Zero) não afeta os flags Z (Zero) e C (Carry) do registrador STATUS. Ela apenas decrementa o registrador especificado e, se o resultado for zero, pula a próxima instrução. Os flags Z e C são afetados por operações aritméticas e lógicas que explicitamente os modificam, como SUBWF ou ADDWF.
Exemplo 4: Comparação de Valores (X vs. W)
MOVLW .50
SUBWF X,W
BTFSS STATUS,C
GOTO MENOR
GOTO MAIORMOVLW .50: Move o valor decimal50para o registrador de trabalhoW.SUBWF X,W: SubtraiWdeX(X - W) e armazena o resultado emW. Esta operação afeta o flagC(Carry).BTFSS STATUS,C: Testa o bitC(Carry) do registradorSTATUS. SeCfor0(indicando queX < W, ou seja, houve "borrow"), a próxima instrução é pulada.GOTO MENOR: SeCfor0(X < W), salta para o rótuloMENOR.GOTO MAIOR: SeCfor1(X >= W), a instruçãoGOTO MENORé pulada, e o programa salta para o rótuloMAIOR.
Exemplo 5: Comparação de Valores (X vs. Y)
MOVF Y,W
SUBWF X,W
BTFSS STATUS,C
GOTO MENOR
BTFSS STATUS,Z
GOTO MAIOR
GOTO IGUALMOVF Y,W: Move o conteúdo do registradorYpara o registrador de trabalhoW.SUBWF X,W: SubtraiWdeX(X - W) e armazena o resultado emW. Esta operação afeta os flagsCeZ.BTFSS STATUS,C: Testa o bitC(Carry) do registradorSTATUS. SeCfor0(indicando queX < Y), a próxima instrução é pulada.GOTO MENOR: SeCfor0(X < Y), salta para o rótuloMENOR.BTFSS STATUS,Z: SeCfor1(X >= Y), a instruçãoGOTO MENORé pulada. Então, testa o bitZ(Zero) do registradorSTATUS. SeZfor0(indicando queX != Y), a próxima instrução é pulada.GOTO MAIOR: SeZfor0(X > Y), salta para o rótuloMAIOR.GOTO IGUAL: SeZfor1(X == Y), a instruçãoGOTO MAIORé pulada, e o programa salta para o rótuloIGUAL.