Você está na página 1de 96

Engenharia Elétrica

AAM

Professor: Marco Shawn Meireles Machado


Objetivos da Aula:
•Definir linguagem de alto nível e baixo nível;
•Descrever a linguagem assembler;
•Descrever a linguagem C;
•Revisão linguagem C;
Conteúdos da Aula:
•Introdução à linguagem de programação
•Organização
•Algoritmos x programas
•Exemplo de algoritmo, fluxograma e programa
•Linguagem de máquina
•Linguagem assembly
•Linguagem C
Lei de Moore

A cada 18 meses a 2 anos, a densidade de transistores


em um circuito integrado dobra.
1. Linguagem de Programação

Os microcontroladores são máquinas digitais que


funcionam com dígitos binários. Isso significa
que estas máquinas somente entendem os
códigos de máquina gerados pelo compilador.
2. Organização
Um programa de computador deve
ser organizado de tal forma que a
máquina realize as operações de
forma correta. Nós, seres humanos,
somos capazes de pensar diversas
coisas simultaneamente, e fora de
ordem. Nosso cérebro é capaz de
organizar as ideias e transformar os
estímulos externos e internos em
um resultado.
Então surge uma questão: como fazer a
ponte entre uma máquina tão poderosa
quanto o cérebro humano e uma máquina
tão limitada quanto um computador?
Então surge uma questão: como fazer a
ponte entre uma máquina tão poderosa
quanto o cérebro humano e uma máquina
tão limitada quanto um computador?

A resposta deve ser objetiva:

Organização
As máquinas não pensam, o ser humano
tem que pensar pelas máquinas.
O fundamental na linguagem de
programação é ter todo o trabalho
organizado e padronizado. As máquinas
não precisam nos entender e nem têm
como fazê-lo. Nós é que devemos nos
fazer entender. As máquinas sempre
executarão o que foram programadas
para fazer. Se esquecermos algo ou
colocarmos na ordem errada, o programa
ficará errado.
As linguagens de programação
compreendem uma sintaxe e uma
semântica.
A sintaxe é o padrão usado para escrever
o programa, pois as máquinas só
entendem as informações escritas na
forma específica da linguagem e a
semântica é a lógica geral do programa, o
sentido das instruções usadas enquanto
as escrevemos.
3. ALGORITMOS X PROGRAMAS

O algoritmo é uma sequência de


instruções bem definida, que evite
confusões ou duplo sentido, onde cada
instrução pode ser executada
separadamente e a seu tempo. O
algoritmo é como uma receita de bolo,
onde todos os passos estão listados em
ordem clara e objetiva
3. ALGORITMOS X PROGRAMAS

O programa é o conjunto previamente


definido de instruções a serem
executadas por uma máquina capaz de
interpretá-las. Um programa deve ser
escrito na linguagem da máquina que irá
executá-lo. Programa é o algoritmo escrito
de tal forma que a máquina consiga
interpretá-lo e produzir o resultado
esperado.
Quanto melhor for escrito o algoritmo,
mais confiável será o programa.
Algoritmos ruins podem causar falhas
inesperadas.
Fluxogramas

Fluxogramas são algoritmos


gráficos usados para
representar algo que deve
ser executado. Os
fluxogramas ajudam a
perceber a complexidade do
programa e estruturar o
código.
Fluxogramas
Fluxogramas
Com o uso do fluxograma, é muito mais
rápido desenvolver um projeto e muito
mais fácil perceber as falhas do programa.
O fluxograma organiza as ideias trazendo
um ganho em produtividade e
minimizando as horas de trabalho.
Pseudocódigo

O pseudocódigo é uma linguagem básica,


intermediária entre a linguagem de
programação e a linguagem humana.
Serve para representar a solução de um
algoritmo da forma mais detalhada
possível. Assim, o programador poderá
codificar o programa com maior facilidade.
Pseudocódigo
São algoritmos na linguagem humana.
É fácil observar o que deve ser feito no
programa. O pseudocódigo é claro, não
ambíguo, muito objetivo. Assim basta
analisar o pseudocódigo e escrever em
alguma linguagem de programação.
4. EXEMPLO DE ALGORITMO,
FLUXOGRAMA E PROGRAMA

Para ilustrar o processo de organização


de um programa, vejamos um exemplo de
cada um dos três para executar a mesma
tarefa: o cálculo de x na função
“a.x + b = 0”.
Fluxograma
Pseudocódigo
Código em linguagem de
programação C para computadores
5. Linguagem de máquina
Dentro do microcontrolador, os circuitos
eletrônicos são capazes de ler apenas dígitos
binários, armazenados na forma de níveis lógicos
de tensão. Muitos microcontroladores usam 5 V
para o nível lógico alto e 0 V para o nível lógico
baixo. Para representar estes dígitos usamos os
números 0 e 1, respectivamente para os dígitos
baixo e alto.
5. Linguagem de máquina

A programação direta em código de


máquina é muito difícil e não permite que o
programador faça projetos complexos.
Desta forma, é impraticável a programação
em código de máquina, devido ao elevado
custo de mão de obra.
Quase nunca um sistema é programado
em linguagem de máquina, pois, quanto
mais complexo o código, maior a chance
de ter sido desenvolvido em alguma
linguagem próxima à linguagem humana,
chamada linguagem de alto nível.
6. Linguagem Assembly

A linguagem assembly é composta


por mnemônicos que representam
diretamente os códigos de máquina.
Apesar de não ser tão próxima da
linguagem humana, a linguagem
assembly facilita muito a
programação.
Normalmente existem três tipos de instruções no
microcontrolador:
Instruções com literais – são instruções onde se
informa um número. Normalmente, o número é
utilizado com o registrador W ou H ou X ou é
utilizado como parte do endereço de destino de
uma instrução de desvio.
Instruções com registradores – são instruções
onde se informa um registrador especial.
Instruções com registradores e destino – são
instruções onde se informa um registrador
especial e um destino para a informação.
Linguagem C

Os microcontroladores em geral possuem a


possibilidade de programação em outras
linguagens, mesmo estas não sendo nativas do
microcontrolador.
Revisão da linguagem C

Como a linguagem de programação C é


padronizada, podemos utilizar as instruções e
operadores que são usados para programação
de computadores. A única diferença é que
algumas instruções fazem uso da tela e do
teclado, que não existem em um
microcontrolador e o tamanho dos tipos de
dados pode ser diferente.
Revisão da linguagem C

Como a linguagem de programação C é


padronizada, podemos utilizar as instruções e
operadores que são usados para programação
de computadores. A única diferença é que
algumas instruções fazem uso da tela e do
teclado, que não existem em um
microcontrolador e o tamanho dos tipos de
dados pode ser diferente.
Conceitos básicos
Comentários:

•Não tem efeito no programa;


•São importantes para descrever o programa;
•Podem ser uma única linha ou várias;

//Exemplo de comentário de uma linha

/* para fazer um comentário de várias linhas,


deve-se colocar todo o texto entre barra e
asterisco */
LETRAS MAIÚSCULAS são diferentes de letras
minúsculas por padrão em linguagem C. Quando
escrevemos um programa, é necessário atentar
para esse detalhe. O compilador pode não
reconhecer uma palavra, pelo simples fato de
escrevermos uma letra maiúscula no lugar de
uma minúscula e vice-versa.

Casa, casa e CaSa são diferentes em linguagem C


Indentação facilita a programação
Sem indentação:
se(chuva){usar_guarda_chuva();usar_botas();}se(sol)usar_boné();

Com indentação:
se(chuva){
usar_guarda_chuva();
usar_botas();
}
se(sol){
usar_boné();
}
Identificadores
Servem para identificar funções, variáveis,
rótulos e outros itens criados pelo programador.

•Devem começar com uma letra ou sublinhado;


•Somente os 31 primeiros caracteres são considerados;
•Não pode conter espaços;
•Não pode conter caracteres especiais;
•Não pode conter caracteres de pontuação;
•Não pode ser igual ao nome de uma função;
•Não pode ser igual a uma palavra chave;
•Não pode conter símbolos matemáticos.
Correto Incorreto
Nome_1 Nome 1
_1casa 1casa
a_mais_b a+b
Tipos de dados
Existem basicamente cinco tipos de dados em
linguagem de programação C:

•Caractere – A, B, C, 1, 2, 3, #, @, etc.
•Inteiro – 0 a 255 se for 8 bits, 0 a 1023 se for 10
bits, 0 a 65535 se for 16 bits.
•Ponto flutuante – 1,24; 32,32434; 12,5, etc.
•Ponto flutuante de precisão dupla.
•Sem valor.
• int1
Define um número de apenas um bit, ou
seja, uma variável booleana, que assume
apenas dois valores: 0 ou 1. Você pode
usar esse tipo de dado para condições
lógicas, do tipo verdadeiro ou falso.
• int8
Define um número inteiro de 8 bits. O
número pode variar entre 0 e 255, se for
sem sinal, e -128 a 127, se for com sinal.
• int16
Define um número inteiro de 16 bits, que
pode estar entre 0 e 65.535, se for sem
sinal, e – 32.768 a 32.767, se for com
sinal.
• int32
Define um número inteiro de 32 bits. Se
for sem sinal, o número pode estar entre 0
e 4.294.967.296; se for com sinal, o
número pode estar entre – 2.147.483.648
e 2.147.483.647.
• char
Define um caractere de 8 bits.

• float
Define um número de ponto flutuante de
32 bits.

• short
Por padrão, é o mesmo que int1.
• Int
Por padrão, é o mesmo que int8 ou int16.

• long
Por padrão, é o mesmo que int16.

• void
Void indica que o tipo não retorna valor.
As variáveis e constantes usadas no sistema
devem ser declaradas no programa para que o
mesmo reserve a quantidade necessária de bytes
para a operação a ser efetuada.
Para declarar a variável, basta seguir o formato:
Tipo_da_variável nome_da_variável;
Exemplo:

int temperatura, velocidade = 0, luminosidade;

A variável pode ser local ou global


Variáveis Globais
São válidas em todo o programa. Devem ser
declaradas fora de qualquer função e antes do
primeiro uso. Seu valor nunca se perde.

int a,b,resultado; //inicializa as três variáveis

void soma(){
resultado = a + b;
}
Variáveis Locais
São válidas dentro da função onde foram
declaradas. Devem ser declaradas antes do
primeiro uso. Quando se sai da função, a
memória é liberada e o valor pode se perder.

float a,b; //a e b são variáveis globais


float media(){
float soma,resultado; //soma e resultado são locais
soma = a + b;
resultado = soma / 2;
return (resultado);
}
Strings
São cadeias de caracteres formadas pelos
caracteres que se deseja armazenar e um
terminador chamado nulo.

Cada caractere ocupa um byte na memória.

char nome[6] = “Marco”;


Constantes
As constantes usadas no sistema não podem ser
alteradas após a sua declaração.
Para declarar uma constante, basta seguir o
formato:
const nome_da_variável = valor;
Exemplo:

const nacionalidade = “brasileira”;


const pi = 3.1415;
const dezena = 10;
Operadores
São símbolos usados para realizar uma
operação, seja ela lógica ou aritmética.

A linguagem C é muito rica em


operadores e por este motivo é
considerada uma das mais poderosas
linguagens de programação.
Operador de atribuição
O operador de atribuição é o símbolo de
igualdade (=).

Para atribuir um valor a uma variável ou


constante, basta usar a seguinte sintaxe:

nome_da_variável = expressão;
ou
nome_da_variável = valor;
Operadores aritméticos
Os operadores aritméticos são os mesmos
usados na matemática tradicional:

- Subtração
+ Adição
* Multiplicação
/ Divisão
% Módulo ou resto da divisão
-- Decremento
++ Incremento
Operadores relacionais
Os operadores relacionais operam as relações
entre os valores de uma função:

> Maior
>= Maior ou igual
< Menor
<= Menor ou igual
== Igual
!= Diferente
Operadores lógicos
Estes se referem a forma com que as operações
relacionais se conectam entre si:

&& AND (lógica E)


|| OR (lógica OU)
! NOT (negação lógica)
Operadores lógicos
Devemos nos lembrar das operações lógicas
quando utilizamos os operadores lógicos:
F && F = Falso F || F = Falso
F && V = Falso F || V = Verdadeiro
V && F = Falso V || F = Verdadeiro
V && V = Verdadeiro V || V = Verdadeiro

!V = Falso !F = Verdadeiro
Operadores bit a bit

& AND (E)


| OR (OU)
^ XOR (OU-EXCLUSIVO)
~ COMPLEMENTO DE UM
>> Deslocamento para a direita
<< Deslocamento para a esquerda
Operador ?
• Se precisarmos atribuir um valor a uma
variável de forma condicional, poderemos
usar o operador “?”.
• O funcionamento é simples: a sentença é
avaliada e, se retorna verdadeiro, o
primeiro valor é atribuído. Se retornar
falso, o segundo valor é atribuído.
Exemplo
X = 5;

Y = x < 20 ? 120 : 150 ;


/* na sentença acima, “x < 20” é analisado e
o resultado é verdadeiro, portanto, o valor
120 é atribuído à variável y. Se a sentença
retornasse falso, o valor 150 seria atribuído
à variável y. */
Operador de ponteiro
• Uma variável é uma determinada posição
da memória onde um dado é guardado
durante o processamento das
informações. Essa variável recebe um
identificador para facilitar seu manuseio.
Um ponteiro guarda o endereço físico
dessa variável para que a mesma possa
ser acessada diretamente.
• O uso de ponteiros facilita muito diversas
operações, principalmente o uso de dados
multidimensionais, como matrizes e
strings.
O operador para o ponteiro é o
símbolo &. Ele devolve o valor do
endereço da variável.
char nome[20] = “Marco”; //inicia a matriz
nome com 20 caracteres e com a string
“Marco”

int *valor; //inicia uma variável chamada valor


valor = &nome; //armazena o valor do
//endereço inicial
//da variável nome na
//variável valor
• O segundo operador é o operador *. Ele é
o complemento do operador &.
Continuando o exemplo anterior, vemos
que o operador * devolve o conteúdo
armazenado no endereço fornecido.
char nome[20] = "Marco"; //inicia a matriz nome com 20
//caracteres
//e com a string “Marco”
char *valor; //inicia uma variável chamada valor
(Ponteiro)

valor = &nome; //armazena o valor do endereço inicial


printf("1 Algarismo: %c\n",*valor);
valor++;
printf("2 Algarismo: %c\n",*valor);
return 0;
}
Expressões numéricas e de
string (caracteres)

Vamos ver neste item os tipos de expressão


permitidas para valores numéricos e
para a manipulação de caracteres.
Expressões numéricas e de
string (caracteres)

Números Decimais: Não podem começar


por ‘ 0 ’ (zero)
Exemplos: 123; 2; 14534; 3.14; ...

Números Octais: Devem começar por ‘ 0 ’


(zero)
Exemplos: 045; 09;...
Expressões numéricas e de
string (caracteres)

Números Binários: Devem iniciar por ‘ 0b ‘


Exemplo: 0b10101010

Números Hexadecimais: Devem iniciar por


‘ 0x ‘
Exemplo: 0x32; 0xA9; ...
1.8. Expressões numéricas e
de string (caracteres)

String de 1 caractere: Entre Apóstrofos ‘ ‘


Exemplo: ‘z’; ‘A’; ....

String de vários caracteres: Entre aspas “ “


Exemplo: “teste de escrita”
Devemos lembrar que:

Zero é considerado falso e qualquer valor


diferente de zero é verdadeiro.
Blocos de comandos
Para agrupar os comandos, usamos chaves { }

Para escrever um bloco de comandos, usamos a


seguinte forma:
{
Comando_1;
Comando_2;
...
Comando_n;
}
Comandos de seleção
Comando IF

if (expressão) comando_1;
else comando_2;
Traduzindo,

Se a expressão é verdadeira, faça comando_1;


Caso contrário, faça comando_2;
Comandos de seleção
Comando Switch

switch (expressão) {
case constante1:
sequência de comandos
break;
case constante2:
sequência de comandos
break;
case constante3:
sequência de comandos
break;
...
default:
sequência de comandos
}
Comandos de seleção
Comando Switch (tradução)

Alternar para a expressão verdadeira (expressão) {


Caso seja verdadeira a constante1:
sequência de comandos
Parar;
Caso seja verdadeira a constante2:
sequência de comandos
Parar;
Caso seja verdadeira a constante3:
sequência de comandos
Parar;
...
sequência de comandos padrão:
sequência de comandos
}
Comandos de iteração
Laço FOR

for (inicialização ; condição ; incremento)


comando;
Traduzindo,
Para o número inicial = inicialização, enquanto a
condição é verdadeira, usando este incremento,
faça a sequência de comandos.
Comandos de iteração
Laço WHILE

while (expressão) comando;

Traduzindo,
Enquanto a expressão é verdadeira, faça a
sequência de comandos.

While = Verifique primeiro, faça depois


Comandos de iteração
Laço DO... WHILE

do comando while (expressão);

Traduzindo,
Faça a sequência de comandos Enquanto a
expressão é verdadeira.

Do...while = Faça primeiro, verifique depois


Comandos de Desvio
Return

Retorna da função com um valor. O valor pode ser


uma constante, uma variável ou o resultado de uma
expressão.

return (valor);
Comandos de Desvio
Goto

Desvia para um rótulo dentro do programa.

qualquer_nome:
comando_1();
comando_2();
...
comando_n();
goto qualquer_nome;
Comandos de Desvio

Break

Causa a interrupção de um laço.

break;
Comandos de Desvio

Continue

Passa para a próxima iteração do laço, ignorando as


demais linhas.

continue;

Você também pode gostar