Programação embarcada
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Microcontroller_Entwicklerboard_IMGP4485.jpg/400px-Microcontroller_Entwicklerboard_IMGP4485.jpg)
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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]POR ou Power-On Reset é um tipo de reset que usa a detecção de tensão para resetar.
Reset pin
[editar | editar código-fonte]Reset Pin ou Pino de reset é um pino do chip que reseta se acionado.
COP reset
[editar | editar código-fonte]COP ou Computer Operating Properly (Operação Adequada Computadorizada, de tradução livre) possibilita o usuário a resetar.
Clock Monitor reset
[editar | editar código-fonte]É um reset que funciona por meio de um clock baseado num circuito interno do chip.
Registradores
[editar | editar código-fonte]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.[1]
Programmer
[editar | editar código-fonte]![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/50/PICkit2.jpg/220px-PICkit2.jpg)
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.[2]
IDE's
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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.[3]
LED blink em c
[editar | editar código-fonte]#include <htc.h> #define _XTAL_FREQ 8000000 void main() { TRISB=0X00; PORTB=0X00; while(1) { PORTB=0XFF; __delay_ms(1000); PORTB=0X00; __delay_ms(1000); } }
LED blink em assembly
[editar | editar código-fonte]LIST p=16F628 ;tell assembler what chip we are using include "P16F628.inc" ;include the defaults for the chip __config 0x3D18 ;sets the configuration settings (oscillator type etc.)
cblock 0x20 ;start of general purpose registers count ;used in table read routine count1 ;used in delay routine counta ;used in delay routine countb ;used in delay routine endc
LEDPORT Equ PORTB ;set constant LEDPORT = 'PORTB' LEDTRIS Equ TRISB ;set constant for TRIS register org 0x0000 ;org sets the origin, 0x0000 for the 16F628, ;this is where the program starts running movlw 0x07 movwf CMCON ;turn comparators off (make it like a 16F84)
bsf STATUS, RP0 ;select bank 1 movlw b'00000000' ;set PortB all outputs movwf LEDTRIS bcf STATUS, RP0 ;select bank 0 clrf LEDPORT ;set all outputs low
Start clrf count ;set counter register to zero Read movf count, w ;put counter value in W call Table movwf LEDPORT call Delay incf count, w xorlw d'14' ;check for last (14th) entry btfsc STATUS, Z goto Start ;if start from beginning incf count, f ;else do next goto Read
Table ADDWF PCL, f ;data table for bit pattern retlw b'10000000' retlw b'01000000' retlw b'00100000' retlw b'00010000' retlw b'00001000' retlw b'00000100' retlw b'00000010' retlw b'00000001' retlw b'00000010' retlw b'00000100' retlw b'00001000' retlw b'00010000' retlw b'00100000' retlw b'01000000'
Delay movlw d'250' ;delay 250 ms (4 MHz clock) movwf count1 d1 movlw 0xC7 movwf counta movlw 0x01 movwf countb Delay_0 decfsz counta, f goto $+2 decfsz countb, f goto Delay_0
decfsz count1 ,f goto d1 retlw 0x00
end
Ver também
[editar | editar código-fonte]Referências
Bibliografia
[editar | editar código-fonte]HUANG, Han-way. The HCS12/9S12: An Introduction to Software and Hardware Interfacing. 2ª Edição. Estados Unidos da América: Delmar, Cengage Learning. 2009.