















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Microcontrolador
Tipologia: Notas de estudo
1 / 23
Esta página não é visível na pré-visualização
Não perca as partes importantes!
















Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
As circunstâncias que se apresentam hoje no campo dos microcontroladores têm os seus primórdios no desenvolvimento da tecnologia dos circuitos integrados. Este desenvolvimento tornou possível colocar centenas de milhares de transistores num único chip. Isso constituiu um pré-requisito para a produção de microprocessadores, e os primeiros computadores foram construídos adicionando periféricos externos tais como memória, linhas de entrada e saída, temporizadores e outros. Um crescente aumento do nível de integração permitiu o aparecimento de circuitos integrados contendo simultaneamente processador e periféricos. Foi assim que apareceu o primeiro chip contendo um microcomputador e que mais tarde haveria de ser designado por microcontrolador.
O primeiro microprocessador foi desenvolvido por uma então pequena empresa chamada Intel (acrônimo de Integrated Electronics) nos primórdios dos anos 1970. O cliente era uma companhia japonesa de nome Busicon, que não comprou a idéia. Como a Intel teve que arcar com os custos do desenvolvimento e não tinha um cliente que comprasse o produto, resolveu colocá-lo no mercado como um sistema microprocessador de “uso geral” (ou, como chamam em ingles, “general purpose”) para aplicações onde componentes discretos de lógica digital eram empregados. O componente foi um sucesso e logo a Intel desenvolveu um novo microprocessador de 4 bits chamado 4004. Em 1974, um microprocessador mais poderoso de segunda geração (denominado 8008) foi anunciado e fornecido como um componente simples, que foi rapidamente seguido pelo Intel 8080. Ambos, o 8008 e o 8080 eram alimentados a partir de uma fonte de 5 VCC, usando tecnologia N-MOS. No mesmo período, a Motorola lançou o seu primeiro microprocessador, denominado 6800, que possuia um processador de 8 bits com a mesma capacidade de processamento do Intel 8080. Nesta ocasião, a arquitetura interna usada no Intel 8080 e no Motorola 6800 eram muito diferentes. O Intel 8080 utilizava uma arquitetura de registros AX, BX, CX, DX e HL, todos de 16 bits porém, capazes de serem utilizados como pares de registros de 8 bits, isto é, o registro AX poderia ser usado como dois registros separados – AH e AL – onde AH era a parte alta (H = high) do byte do registro AX, e AL era a parte baixa (L = low) do byte do registroAX. Desta forma, os registros de 16 bits AX, BX, CX, DX e HL poderiam ser utilizados como AH, AL, BH, BL, CH, CL, DH, DL, H e L, todos de 8 bits. O Intel 8080 possuia o mapa de I/O (Input/Output – Entrada/Saída) separado da memória de dados. Isto significa que, para comandar entrada/saída do dispositivo, instruções especiais deveriam ser implementadas tais como IN para instrução de entrada e OUT para instrução de saída. O acesso à memória de dados (que possuia um mapa diferente), utilizava a instrução MOV. O Motorola 6800 utilizava o que se chamava de “Memory Mapped I/O” (memória mapeada como I/O), o que significa que tanto a memória de dados quanto de Entrada/Saída dividiam o mesmo mapa. O conjunto de registros era muito menor, consistindo em dois acumuladores de 8 bits (A e B) e um registro indexador de 16 bits chamado X. Estes registros podem suportar uma gama de modos de enderaçamento totalmente voltados para um número pequeno de registros (o que torna a programação também mais simples). Para se ter acesso a dados da memória ou das Entradas/Saídas é necessário utilizar uma instrução do tipo LDAA; para escrever dados na memória ou nas Entradas/Saídas é necessário utilizar uma instrução do tipo STAA. O acesso ao registro X deverá ser via suas próprias instruções, isto é, LDX e STX. Intel e Motorola mantiveram as diferenças fundamentais na arquitetura de seus processadores mesmo nos modelos mais modernos. Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
Um microcontrolador difere de um microprocessador em vários aspectos e o mais importante, é a sua funcionalidade. Para que um microprocessador possa ser usado, outros componentes devem ser adicionados, tais como memória e componentes para receber e enviar dados (Entradas/Saídas). Em resumo, isso significa que o microprocessador é o verdadeiro coração do computador. Fig. 3.1 - Estrutura básica do microprocessador A fig.3.1 mostra a interconexão entre o microprocessador e a unidade externa de memória. Se houver a inclusão de unidades de Entrada/Saída (I/O), novos componentes e interconexões deverão ser acrescentadas. Por outro lado, o microcontrolador foi projectado para ter tudo num só. Nenhum outro componente externo é necessário nas aplicações, uma vez que todos os periféricos necessários já estão contidos nele. Fig.3 2 - Estrutura básica do microcontrolador A fig.3 2 mostra a estrutura interna de um microcontrolador (não expandido) contendo todas as interfaces e memórias necessárias dentro de um único encapsulamento, reduzindo drásticamente o número de componentes externos na aplicação. Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
Um microcontrolador é um computador em um único chip otimizado para controlar dispositivos externos enfatizando a auto-suficiencia e baixo custo. Inclui um núcleo contendo a Unidade Central de Proceessamento (CPU – Central Processing Unit), memória de programa normalmente do tipo Flash, memória para dados dos tipos RAM e EEPROM, um ou mais temporizadores, entrada/saídas para ligação com elementos periféricos externos, tudo isto dentro de um único circuito integrado. A fig. 4.1 mostra esquematicamente os dispositivos normais no interior de um microntrolador comercial: Fig. 4.1 – Microcontrolador – Arquitetura Interna Na sequencia, vamos descrever os diversos elementos do microcontrolador: 4.1. Memória Memória é a parte do microcontrolador que tem a função de guardar dados. Pode-se imaginar que uma memória é como um armário com diversas gavetas onde, em cada gaveta sãoguardadas diversas informações. Se identificarmos cada gaveta do armário com um nome específico e único para cada uma, então o conteúdo de cada gaveta será conhecido através do nome daquela gaveta. As memórias são componentes semelhantes ao armário - para um determinado endereço, é possível obter o conteúdo deste endereço portanto, uma memória nada mais é do que o conjunto de todos os locais de memória (gavetas) e endereçamento nada mais é que seleccionar um deles. Isto significa que precisamos seleccionar o endereço desejado (gaveta) e esperar que o conteúdo desse endereço seja apresentado (abrir a gaveta). Além de ler um local de memória (ler o conteúdo da gaveta), também é possível escrever num endereço de memória (introduzir um conteúdo na gaveta). Isto é feito utilizando uma linha adicional chamada linha de controle. Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
Fig. 4.3 – Exemplo de CPU Os registros são locais de memória cujo papel é ajudar a executar as várias operações matemáticas ou quaisquer outras operações com dados, quaisquer que sejam os locais em que estes se encontrem. 4.3. Barramento de Comunicação (Bus) Com dois blocos independentes (Memória e CPU), existe a necessidade de interligação entre eles para que, por exemplo, uma operação que some os conteúdos de dois locais da memória e guarde o resultado em outro local da memória seja realizada, isto é, precisa de um caminho através do qual os dados possam passar de um bloco para outro. Esta interligação é designada Barramento (Bus) que corresponde a um grupo de 8, 16 ou mais condutores que interliga elétricamente um bloco a outro. Existem dois tipos de barramento: Barramento de dados : interliga todos os blocos dentro do microcontrolador, o número de linhas depende do comprimento da palavra de dados (. Barramento de endereços : interliga a CPU com a Memória, o número de linhas depende da quantidade de memórias que devem ser endereçadas. A fig.4.4 mostra a conexão entre a Memória e a CPU utilizando barramentos para ganhar funcionalidade. Fig.4.4 – Barramento interligando CPU com Memória Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
4.4. Entrada/Saída (I/O – Input/Output) A Entrada/Saída (I/O) é a porta de comunicação do microcontrolador com o mundo exterior. São designadas como PORT e podem reunir, de acordo com o modelo do controlador, diversas funções:
Fig.4.8 – Diagrama Simplificado do Módulo de Comunicação Serial 4.6. Temporizador ou Contador Livre Os microcontroladores possuem um registro cujo valor numérico incrementa automáticamente uma unidade em intervalos de tempo definidos. Portanto, este registro pode ser utilizado como uma base de tempo precisa e independente de um programa específico para que seja realizado, podendo ser considerada a mais poderosa ferramenta existente em um controlador. O entendimento do correto funcionamento deste temporizador ou contador livre permite controle sobre variáveis cíclicas tais como sinais de tensão senoidal da rede de energia que devem ser sincronizados com elementos de controle (Triac) para acionmentos externos. A fig.4.9 mostra o diagrama simplificado do temporizador onde se pode visualizar um sinal de saída de controle. Fig.4.9 – Diagrama Simplificado do Temporizador ou Contador Livre 4.7. Conversor Analógico-Digital (ADC) Nem sempre os sinais que o microcontrolador deve ler são sinais simples do tipo liga/desliga (um/zero), que são os únicos sinais que são processados na CPU. Sinais continuamente variáveis (analógicos) devem ser convertidos em um padrão (digital) que a CPU pode compreender e processar. Esta conversão é realizada por um ADC (Analogo to Digital Converter – Conversor Analógico – Digital) e a maioria dos microcontroladores possuem ao menos 4 canais de utilização em um ADC interno. A fig.4.10 mostra o diagrama simplificado do ADC de um controlador: Fig.4.10 – Diagrama Simplificado do Conversor Analógico – Digital (ADC) Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
5.1. Máquina von Neumann No começo dos anos 1950, John von Neumann propos o conceito de computador com programa armazenado, que veio a ser o fundamento dos processadores mais modernos atualmente. Na Máquina von Neumann o programa e os dados ocupam a mesma memória e utilizam o mesmo barramento de comunicação. O tamanho da palavra utiliada para a instrução é o mesmo tamanho do dado, isto é, 8 bits. Para a realização de uma operação, o processador lê uma instrução para, na sequencia, movimentar o dado na memória até a posição solicitada pela instrução. Enquanto o dado não ocupar a posição da memória, o processador não pode ler a instrução seguinte, uma vez que a atualização dos endereços ocorre passo a passo. Consequentemente, a sequencia lógica de processamento consiste em:
Internamente na CPU existe um registro cuja função é contar as linhas de programa. Este registro é chamado de PC (Program Counter) e é incrementado de uma unidade sempre em Q1. Uma instrução é chamada da memória sempre no ciclo Q1 e escrita em um registro no ciclo Q4. A decodificação (ou interpretação) e execução desta instrução serão feitas entre os próximos ciclos Q1 e Q4. A fig.5.3 mostra a relação entre o Ciclo de Instrução e o clock (OSC1) bem como os ciclos internos de Q a Q4. O Contador de Programa (PC) guarda o endereço da próxima instrução: Fig.5.3 – Clock – Ciclo de Instrução 5.5. Fluxo de Instruções/Pipelining Como foi visto anteriormente, um Ciclo de Instrução consiste de 4 ciclos Q (Q1, Q2, Q3 e Q4). A busca de uma instrução ocupa um ciclo enquanto decodificar e executar a instrução ocupa outro ciclo. Entretanto, devido ao “pipelining”, cada instrução é efetivamente executada em um ciclo. Se uma instrução provoca um desvio (por exemplo, GOTO), um ciclo extra é necessário para completar a instrução (devido a alteração no PC - Program Counter). A instrução busca (fetch) começa quando o PC é incrementado em Q1. No ciclo de execução (execute), a instrução buscada é colocada dentro do Registro de Instrução (Instruction Register - IR) no ciclo Q1. Esta instrução é decodificada e executada durante os ciclos Q2, Q3, e Q4. A memória de dado é lida durante Q2 (ler operando) e escrito durante Q4 (escreve destino) A fig.5.4 mostra a operação do pipeline de dois estágios para a sequencia de instruções indicada: Fig.5.4 – Fluxo de Instrução - Pipelinig Tcy0: a primeira instrução (MOVLW 55h) é buscada na memória de programa (Fetch 1). Tcy1: a primeira instrução é executada (Execute 1) enquanto a segunda instrução (MOVWF PORTB) é buscada (Fetch 2). Tcy2: a segunda instrução é executada (Execute 2) enquanto a terceira instrução (CALL SUB_1) é buscada (Fetch 3). Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
Tcy3: a terceira instrução (CALL SUB_1) é executada (Execute 3) enquanto a quarta instrução (BSF PORTA, BIT3) é buscada (Fetch 4). Quando a terceira instrução é completada, a CPU força o endereço da quarta instrução a ser colocado no Stack (registros que armazenam os endereços de retorno dos desvios) e modifica o valor do PC para o endereço SUB_1. Isto significa que a instrução que foi buscada na memória durante o Tcy3 (no caso Fetch 4) teve que ser “descarregada” do pipeline. Tcy4: a quarta instrução é “descarregada” (uma NOP – No Operation – é realizada) e a instrução existente no endereço SUB_1 (Instruction @ address SUB_1) é buscada (Fetch SUB_1). Tcy5: a quinta instrução é executada (Execute SUB_1) e a instrução do endereço SUB_1 + 1 (Fetch SUB_1 + 1) é buscada Um método útil de demonstração é a analogia com uma lavanderia. Vamos considerar que existem quatro cargas de roupa suja que precisamos lavar, secar, passar e dobrar. Nós podemos colocar a primeira carga na lavadora por 30 minutos, secar por 40 minutos e levar 20 minutos para passar e dobrar as roupas. Então colocamos a segunda carga para lavar, secar, passar e dobrar, e assim sucessivamente para a terceira e quarta carga de roupa. Considerando que iniciamos o trabalho de lavanderia às 18:00 h (na fig. 5.5, equivalente a 6 PM), e procuramos realizar o serviço da maneira mais eficiente possível, só conseguiremos terminar o serviço à meia-noite. Fig.5.5 – Fluxo de Serviços no formato Sequencial Entretanto, uma forma mais eficiente de resolver o problema seria colocando a segunda carga de roupa suja na lavadora quando a primeira carga estiver limpa e rodando alegremente na secadora. Então, quando a primeira carga estiver sendo passada e dobrada, a segunda carga estará secando e a terceira poderá ser incluída no “pipeline” da lavanderia. Usando este método, o nosso serviço termina por volta das 21:30 h., como pode ser observado na fig. 5.6. Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
6.1. Diagrama de Blocos de um Microcontrolador A fig.6.1 mostra o Diagrama de Blocos de um microcontrolador completo com todas as possibilidades de acessórios e dispositivos periféricos que podem ser estruturados no interior do dispositivo. Fig.6.1 – Diagrama de Blocos Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
6.2. Unidade Central de Processamento (CPU)/Unidade Lógica-Aritmética (ALU) A Unidade Central de Processamento (CPU – Central Processing Unit) pode ser considerada como o “cérebro” do controlador e é responsável por buscar a instrução correta para execução, decodificar esta instrução e executá-la. A CPU interliga todas as partes do microcontrolador como se fosse uma única peça. A função mais importante realizada pela CPU é decodificar as instruções do programa. Quando um programador escreve um programa, as instruções escritas têm o formato semelhante a: MOVLW 0x O formato literal é bastante claro e simples para a compreensão humana, mas é completamente imcompreensível para o microcontrolador. Para que o microcontrolador entenda a instrução neste formato, é necessário que um “tradutor” reescreva a instrução no formato literal para o formato de uma sequencia de “zeros” e “uns” (código binário – único formato que o microcontrolador consegue ler) chamado de “opcode”. A tradução do formato literal para o formato binário é feita por um programa residente normalmente chamado de “compilador”, que contém as correlações de código (ou dicionário) para reescrever no formato binário todas as instruções, variáveis, constantes etc.. Portanto, a instrução buscada na memória de programa é decodificada pela CPU em um conjunto de ações que executam a tarefa designada pela instrução. Como as instruções podem conter outros comandos que podem requerer diferentes transferencias de dados de uma memória para outra, da memória para os PORTs de I/O ou ainda executar alguns cálculos, é necessário que a CPU esteja conectada com todas as partes do microcontrolador a partir de barramentos de dados e de endereços. Algumas vezes a CPU trabalha em conjunto com a Unidade Lógica e Aritmética (ALU) para completar a execução de instruções que envolvem operações aritméticas e lógicas. 6.3. Unidade Lógica-Aritmética (ALU) Muitas das instruções da memória de programa operam na memória de dados. Para operar a memória de dados existe a Unidade Lógica-Aritmética (ALU – Arithmetic-Logic Unit), que realiza as operações de lógica e aritmética e controla os bits de status da memória. A execução de algumas instruções força tais bits a assumir um estado dependendo do valor do resultado (por exemplo, um determinado bit de um registro de controle assume valor 1 quando a execução de uma instrução apresentar resultado nulo). Nos microcontroladores, a ALU emprega registros de 8 bits e é capaz de realizar operações de soma, subtração, deslocamento e operações lógicas (booleanas) utilizando um registro de trabalho (registro W) e qualquer outro registro (arquivo ou constante numérica). A fig.6.2 mostra o diagrama simplificado do fluxo de informações da ALU e do registro W: Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
A fig.6.4 mostra o mapa da memória de programa genérica. Observar que os endereços da memória são mostrados em numeração hexadecimal. Mesmo durante um programa, os endereços que são informados ao programador serão sempre neste formato, uma vez que ocupam comprimento menor que nos formatos binário ou decimal. Fig.6.4 – Mapa Memória de Programa Genérico Como mostra a fig.6.4, algumas informações e referencias devem ser detalhadas, como segue: 6.4.1.1. Vetor de Reset (Reset Vector) O Vetor de Reset identifica a primeira posição, ou o endereço inicial, da memória de programa (0h) portanto, o local onde se inicia o programa inserido pelo usuário. Quando o microcontrolador é energizado e após a estabilização do seu oscilador (clock), o programa começa por esta posição de memória. Se o microcontrolador já estiver operacional e ocorrer um reset (forçado por ação externa ou pelo programa), o contador de programa PC é forçado a zero, a execução do programa é redirecionada para este endereço de memória e o microcontrolador reinicia novamente, inclusive com paginação de memória, dados e constantes iniciais. Todas as informações existentes até o instante do reset são perdidas. 6.4.1.2. Vetor de Interrupção (Interrupt Vector) Uma das mais poderosas ferramentas existentes dentro de um microcontrolador é a Interrupção, isto é, um desvio forçado por alteração de estado de algum bit preparado para ocorrer em situações especiais pelo programador. Quando uma interrupção ocorre, o contador de programa PC é forçado a assumir o valor 04h. A partir deste endereço, o programa inicia o Tratamento de Interrupção (ISR – Interrupt Service Routine) de acordo com as necessidades da aplicação do controlador. Bento Alves Cerqueira Cesar Filho - R 1.0 - NOV/
6.4.1.3. Contador de Programa (Program Counter – PC) O Contador de Programa (PC) especifica o endereço de busca na memória da instrução para execução. O incremento ou modificação dos valores do PC é feito automáticamente pela CPU (hardware) em função das necessidades impostas pelo programa. Se não houver nenhuma instrução de desvio, o incremento é automático no ciclo Q1. Se houver uma instrução de desvio (GOTO), então o novo valor será colocado no PC de acordo com as premissas de endereçamento vindas da CPU. O comprimento do registrodo PC é normalmente de 13 bits. Os primeiros 8 bits (de 0 a 7) compreendem o registro PCL (low byte – byte baixo) e são acessíveis diretamente, isto é, podem ser lidos e/ou escritos pelo programa. Os últimos bits (de 8 a 12) compreendem o registro PCH (high byte – byte alto) e não são diretamente acessíveis, isto é, sómente podem ser lidos e/ou escritos através de outro registro, o registro PCLATH (Program Counter Latch High). 6.4.1.4. Stack O Stack contém os endereços de retorno dos desvios (sub-rotinas) ou interrupções requisitadas. Permite uma combinação de até 8 desvios, isto é, permite até o máximo de 8 desvios de sub-rotina e interrupção. O registro de Stack não faz parte da memória de programa ou da memória de dados, e também não é possível ler ou escrever nestes registros. O valor do registro PC é colocado no Stack quando uma instrução CALL é executada ou quando uma interrupção provoca um desvio (sempre que uma interrupção é chamada, a Rotina Principal é interrompida no ponto em que se encontra e força um desvio para o Vetor de Interrupção). O valor do registro PC retorna do Stack quando uma das instruções de retorno (RETURN, RETLW ou RETFIE) é executada. Observar que os valores do registro PC são colocados seqüencialmente dentro do Stack à medida que os desvios ocorrem. Após oito valores do registro PC serem colocados dentro do Stack, o nono valor sobre- escreve o primeiro armazenado, o décimo sobre-escreve o segundo armazenado e assim sucessivamente. Os demais registros existentes não são modificados.A fig.6.5 mostra o procedimento de escrita dos endereços dentro do Stack: Fig.6.5 – Sequencia de Entrada de Registros no Stack Observações: