# Programação embarcada

A programação embarcada refere-se ao estudo de programação em microcontroladores e microprocessadores para controlar seus periféricos e manipular circuitos externos. A diferença entre programação em um dispositivo PC ou eletrônico comum e de um embarcado, são as limitações de recursos, como falta de memória, falta de um sistema operacional completo, limitações nas formas de comunicação com o mundo externo e requisitos limitados de tempo de resposta para realizar uma tarefa que deve ser tratado pelo sistema embarcado. Em geral, só se conta com poucos serviços básicos providos pelo hardware ou por um software básico. Sistemas embarcados são projetados para executar tarefas específicas, que comparado a um computador que tem uma finalidade de realização de multitarefas.

## Linguagens de programação

As linguagens de programação mais usadas para o uso em microcontroladores são as linguagens C e Assembly. É possível a ativação de um LED com a linguagem de programação C e assembly.

## Periféricos

Microcontroladores quase sempre são classificados em famílias, dependendo da aplicação para qual foram designados. A partir da aplicação que a família de microcontroladores se destina, um ramo de periféricos específicos é selecionado e integrado ao microprocessador. Estes microprocessadores normalmente operam com barramentos de 8, 16 ou 32 bits. Mesmo com a classificação dos microcontroladores em famílias, existem periféricos essenciais a praticamente todas as aplicações, que são a memória de dados e a memória de programa. A memória de dados mais usada atualmente é a RAM (Random Access Memory), que é uma memória volátil, ou seja, não preserva o seu conteúdo sem uma fonte de alimentação constante. Recentemente as memórias de programa sofreram uma grande mudança. Anos atrás as memórias de programa mais utilizadas eram a ROM (Ready-Only Memory) e a EPROM (Erasable Programmable Read-Only Memory), porém com a popularização da memória FLASH cada vez mais os microcontroladores vem sendo produzidos com este tipo de memória, em substituição a ROM e a EPROM.

## Interrupções

Interrupção é um evento que faz a CPU parar o programa principal e executar uma tarefa ou um serviço que está diretamente relacionado com esse evento. Pode ser gerada internamente ou externamente ao chip. Pode ser usado para diversas finalidades como: Coordenar as atividades de I/O com a CPU, realizar tarefas de urgência, proporcionar maneiras de sair de um programa quando um erro ocorre e lembrar a CPU de realizar tarefas periódicas.

## Contadores

Em sistemas embarcados normalmente se usa um clock (ou sinal oscilador) para servir como um "relógio" do programa. Contadores usam esse sinal de clock para medir um certo tempo para ser usado em determinada função.

## Reset

Um sinal de reset normalmente é usado para, como o próprio nome já diz, resetar ou "ligar e desligar" o programa. O reset pode ser aplicado com POR, pino de reset, COP reset ou monitor ("fiscalizador") de clock.

### POR reset

POR ou Power-On Reset é um tipo de reset que usa a detecção de tensão para resetar.

### Reset pin

Reset Pin ou Pino de reset é um pino do chip que reseta se acionado.

### COP reset

COP ou Computer Operating Properly (Operação Adequada Computadorizada, de tradução livre) possibilita o usuário a resetar.

### Clock Monitor reset

É um reset que funciona por meio de um clock baseado num circuito interno do chip.

## Registradores

Registrador é um tipo de memória de alta velocidade de acesso mas com pequena capacidade, fica dentro da CPU do microcontrolador. É o tipo mais importante de memória e justamente por esse fato são os mais rápidos pois é prioridade de acesso. Registradores são ponteiros que direcionam para endereços especiais na memoria. Existem dois tipo de registradores: registradores para leitura e registradores de escrita. Registradores de leitura são regiões da memoria aonde os periféricos do microcontrolador escrevem os resultados de suas operações. Enquanto os registradores de escrita são regiões da memoria onde se tem informações que acarretam em alterações das operações dos periféricos.Os principais exemplos registradores conhecidos são TRIS e PORT.

## Programmer

A principal função de um programmer é programar e depurar microcontroladores. O principal exemplo de programmer é o PICkit, ferramenta de baixo custo e de interface fácil para a programação e depuração de microcontroladores, possuindo várias versões.

## IDE's

IDE, do inglês Integrated Development Environment(Ambiente de Desenvolvimento Integrado) são softwares usados para gerenciar e editar projetos em desenvolvimento de programas. Onde os mais usados em programação embarcada são: MPLAB e MPLABX.

### MPLAB IDE

O MPLAB IDE é um software editor para gerenciar projetos e ambiente de programação no desenvolvimento de aplicações e sistemas embarcados, utilizando PIC Microchip MCUs e DSCs dsPIC. Fornecido gratuitamente pela empresa Microchip_Technology® integrando diversos ambientes de trabalho para programação, simulação e gravação de microcontroladores.

### MPLABX IDE

MPLAB® X IDE é um software para desenvolver aplicações para microcontroladores da Microchip e controladores de sinal digital. É um ambiente de desenvolvimento integrado (IDE), uma vez que fornece um único "ambiente" integrado para desenvolver o código para microcontroladores embarcados. Traz muitas mudanças para o microcontrolador PIC, como cadeia de ferramentas para desenvolvimento. Ao contrário das versões anteriores do MPLAB® IDE que foram desenvolvidas totalmente in-house, MPLAB® X IDE é baseado no código aberto NetBeans IDE da Oracle. Isto permitiu adicionar muitos recursos solicitados com freqüência rapidamente e facilmente, ao mesmo tempo, proporciona uma arquitetura muito mais extensível para trazer características ainda mais novas no futuro.