Programar para Microcontroladores
9 pág.

Programar para Microcontroladores


DisciplinaTecnologias Web4.045 materiais12.592 seguidores
Pré-visualização4 páginas
1 
Linguagem para Programar Microcontroladores: 
Assembly, C ou Basic? 
 
 
Introdução: 
 
Num processador (microprocessador ou microcontrolador), o significado de cada 
instrução do conjunto de instruções está embutido ao nível do hardware, nos circuitos, 
mais precisamente no bloco do processador denominado decodificador de instrução. 
Tais instruções são denominadas \u201copcodes\u201d (códigos operacionais). Apesar das 
instruções poderem ser escritas em código binário, em função da arquitetura dos 
processadores disponíveis, o tamanho mínimo das instruções e dos dados utilizado 
normalmente é de oito bits, o que caracteriza um Byte. A este nível, para facilitar o 
trabalho dos programadores, o código pode ser escrito na notação de dígitos 
hexadecimal (dois dígitos em hexadecimal para cada Byte). Dizemos que códigos 
escritos desta forma são escritos em linguagem de máquina. 
 
Porém, este método de escrever o código é complexo e exige o conhecimento de 
um grande número de códigos operacionais e a criação de programas para 
microcontroladores e microprocessadores pode se tornar uma tarefa desgastante á 
medida que aumenta a complexidade da aplicação desenvolvida. Os primeiros 
dispositivos programáveis tinham seus programas escritos em linguagem de código de 
máquina, os quais eram geralmente inseridos através de um teclado de uma unidade de 
programação, em formato de dígitos hexadecimais. 
 
O trabalho de programação era assim bastante complexo tomando um longo 
tempo dos programadores, o que o tornava também muito oneroso. Aliado a isso, a 
sempre crescente demanda pela programação de sistemas, para facilitar o trabalho de 
escrever código de baixo nível, foi desenvolvido um sistema onde grupos de códigos 
operacionais semelhantes receberam nomes que lembram suas funções e que os 
tornaram muito mais práticos de serem usados. Estes nomes são denominados 
mnemônicos. Isto provocou o surgimento de uma nova forma de programação, dando 
origem à linguagem Assembly, que consiste numa forma de representação dos códigos 
de máquina usando mnemônicos, ou seja, abreviações de termos usuais que descrevem a 
operação efetuada pelo comando do código de máquina. 
 
Um mnemônico é um nome reservado de uma família de códigos operacionais 
que realizam tarefas semelhantes no processador. Os códigos operacionais atuais 
diferem quanto ao tamanho e tipo de operandos que sejam utilizados. 
 
Exemplo: 
 
Opcode Operando Instrução 
(mnemônico) (hexadecimal) 
DEC A 14H --- 
SUBB A, R4 9CH --- 
SUBB A, 0XXH 94H XXH 
 
 2 
Os mnemônicos possibilitam escrever código de um modo muito mais intuitivo e 
sem perda de precisão. Existe uma correlação exata entre o que você escreve com 
mnemônicos e o que você obtém como códigos operacionais acabados. 
 
A linguagem de mnemônicos se chama: ASSEMBLY (repare no Y no final). O 
programa montador, ou seja, o programa que transforma o código escrito na linguagem 
Assembly em linguagem de máquina, substituindo as instruções, variáveis pelos 
códigos binários e endereços de memória correspondente, é que se chama 
ASSEMBLER. 
 
Voltando ao exemplo anterior, escrevemos o mnemônico SUBB A, R4 e o 
assembler transforma SUBB A, R4 na sequência de bits correspondente ao hexadecimal 
9C, ou seja, em 1001 1100. Esta sequência de bits corresponde à instrução embutida nos 
circuitos do microcontrolador Atmel TSC80251 (código operacional) que faz com que o 
dado contido no registrador acumulador seja subtraido do valor contido no registrador 
R4 e do valor do flag de carry, deixando o resultado no acumulador. 
 
Assim, para trabalhar com Assembly é necessário o uso de um programa 
montador (Assembler) que faz a conversão dos mnemônicos em código de máquina. 
Sem dúvida nenhuma, a representação das instruções em Assembly tornou interpretação 
da leitura do programa pelos seres humanos muito mais simples do que se empregarmos 
o código de máquina original, pois os mnemônicos são contrações de palavras básicas 
da língua inglesa. No entanto, ainda ficam pendentes muitos problemas. 
 
Já os compiladores das várias outras linguagens de nível mais alto, como os 
compiladores de linguagem C, por exemplo, fazem a compilação dos programas em 
duas etapas: na primeira etapa, o código fonte escrito em C é transformando para código 
em Assembly e na segunda etapa é feita a montagem, ou seja, é gerado o código binário 
com a ajuda de um Assembler. 
 
A linguagem C foi originalmente desenvolvida para programação de baixo nível 
para sistemas com poucos recursos, \u201cruntime\u201d problemático e que processam operações 
básicas e de baixo nível. 
 
Até o desenvolvimento da linguagem C, não existiam linguagens de 
programação de alto nível adequadas à tarefa de desenvolver os sistemas operacionais, 
ou seja, os programas especiais utilizados para o controle genérico de um computador, e 
também outros softwares de baixo nível. Aos desenvolvedores restava somente 
conformar-se em utilizar o Assembly para a execução destas tarefas. 
 
Foi principalmente a partir das necessidades de reescrita do sistema operacional 
UNIX, que até então era escrito em Assembly, que surgiu a linguagem C. De fato, a 
implementação da linguagem é tão poderosa que a linguagem C foi escolhida para o 
desenvolvimento de outros sistemas operacionais como o Windows e o Linux. 
 
A linguagem C foi criada em 1972 por Dennis Ritchie, da Bell Laboratories. 
Esta linguagem consiste na realidade em uma linguagem de nível intermediário entre 
o Assembly e as demais linguagens de alto nível, como Pascal, Java, etc. 
 
Mas afinal de contas, qual é a linguagem mais adequada para desenvolvimento 
de projetos de eletrônica envolvendo microcontroladores. Apesar de a resposta parecer 
 3 
bastante óbvia, várias pessoas se perguntam sobre qual linguagem é melhor: C ou 
Assembly. 
 
Essa resposta é dependente da situação: para programas muito pequenos, que 
utilizam apenas funções básicas do microcontrolador, talvez o assembler seja a solução 
mais adequada. Já para programas maiores, que incluem um grande número de projetos 
comerciais, a linguagem C é sem dúvidas a mais adequada. 
 
O primeiro fato a se considerar é que tanto a linguagem de máquina quanto a 
linguagem Assembly, bem como o programa montador, são específicos de cada 
processador. Isso significa que um programa desenvolvido em Assembly para um 
microcontrolador 8051 não tem portabilidade para outro microcontrolador, por 
exemplo, o PIC. Para utilizar-se um programa desenvolvido em linguagem Assembly de 
um processador, em outro diferente, o programador deve executar a tradução cabal do 
programa para a linguagem Assembly do processador de destino. Isso equivale a dizer 
que Assembly não é propriamente dita uma linguagem, mas sim um conjunto de muitos 
dialetos. Quem aprende uma linguagem Assembly, aprende a linguagem Assembly de 
um determinado produto (processador). 
 
Outro fato é que linguagem Assembly é de baixo nível, ou seja, ela tem ainda as 
seguintes desvantagens: 
 
\u2022 Ela não utiliza uma filosofia de programação estruturada a qual propicia uma 
construção mais simples e clara das aplicações pela organização dos programas 
em módulos ou estruturas independentes entre si (que em linguagem C são 
chamadas de funções), as quais tem o objetivo de realizar uma tarefa específica. 
 
\u2022 Ela não possui nenhum comando, instrução ou função que vá além daqueles 
definidos no conjunto de instruções do processador utilizado. Isso implica em 
um trabalho extra para os programadores ao desenvolver rotinas ou operações 
que não fazem parte do conjunto de instruções do processador, produzindo, por 
conseguinte, programas muito extensos e complexos, com um fluxo muitas 
vezes difícil de ser seguido, pois qualquer operação mais complexa que se enseje 
programar na aplicação, esta deve ser traduzida em um conjunto