Академический Документы
Профессиональный Документы
Культура Документы
Centro de Tecnologia
Curso de Engenharia Elétrica
MICROCONTROLADORES
Linguagem C
Teresina - 2012
Sumário
● 1. Introdução
● 1.1. C vs Assembly
● 2. Compiladores
● 3. A Linguagem C do CCS
● Bibliografia
2
Microcontroladores – Prof. Marcos Zurita
1. Introdução
3
Microcontroladores – Prof. Marcos Zurita
Introdução
C vs Assembly
● Código Assembly
●
Gera um código compilado “enxuto”
●
Veloz
●
Controle “total” sobre as operações
●
Códigos fonte extensos
●
Difícil de programar
●
Difícil de entender
●
Difícil manutenção
●
Grande dependência do hardware
●
Baixo reaproveitamento de código
●
Impossibilidade de migração para outros µC´s
4
Microcontroladores – Prof. Marcos Zurita
Introdução
● Código C
● Código compilado quase tão “enxuto” quanto ASM
● Quase tão veloz quanto ASM
● Abstração das operações em baixo nível
● Códigos-fonte enxutos
● Fácil de programar
● Fácil de entender
● Fácil manutenção
● Baixa dependência do hardware
● Bom reaproveitamento de código
● Possibilidade de integração com ASM
● Menor velocidade em operações críticas
5
Microcontroladores – Prof. Marcos Zurita
Introdução
Despeça-se da sua
família e de seus
pais por alguns
dias...
6
Microcontroladores – Prof. Marcos Zurita
Introdução
Examine “todos” os
microcontroladores
de que você dispõe
(n° de E/S, conver-
sores, temporiza- Projete e, se possível,
dores, etc.) construa um protótipo
do sistema que será con-
Escolha o que melhor atende trolado pelo uC, incluindo
aos requisitos de funciona- periféricos que serão utiliza-
mento do sistema desejado. dos na aplicação real.
7
Microcontroladores – Prof. Marcos Zurita
Introdução
Escreva o programa
em uma linguagem
de alto nível para
programar o uC.
Escolha também um
simulador para Com alguns pucos cliques o
auxiliar o programa inteiro se converte
desenvolvimento. em algo compreensível pelo
uC. Utilize um gravador para
programa-lo.
8
Microcontroladores – Prof. Marcos Zurita
Introdução
9
Microcontroladores – Prof. Marcos Zurita
2. Compiladores
10
Microcontroladores – Prof. Marcos Zurita
Compiladores
O Compilador CCS C
● Suporta toda linha de µC´s PIC (PIC12, 14, 16 e 18)
● Integração com o MPLAB
● Compatibilidade com ANSI e ISO
● Gera códigos eficientes
● Grande diversidade de bibliotecas e funções
● Grande portabilidade de código
● Implementação natural de ponto flutuante
● Assistente de criação de código
● Geração automática de código ASM e relatórios
● Grande nível de abstração no uso de:
● Delays
● Comunicação serial
● LCD 12
Microcontroladores – Prof. Marcos Zurita
3. A Linguagem C do CCS
13
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
A Linguagem do CCS C
● Variáveis e tipos de dados
● Operadores
● Estruturas de condição
● Estruturas de repetição
● Funções
14
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Modificadores de Tipo
● Alteram o tamanho ou a forma com que os tipos são
tratados.
● signed
● unsigned
● short
● long
16
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Uso de Variáveis
int cont; // contador de 8 bits
unsigned int ciclo, j; // ciclos de maquina
float tensao; // tensao lida
cont = 0;
ciclo = 1;
j = ciclo + 1;
tensao = 3.496;
18
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Matrizes
● Definem um conjunto de elementos do mesmo tipo
(tamanho fixo):
int v[10]; // conj. de 10 inteiros
19
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Matrizes Multidimensionais
● São associações de matrizes unidimensionais (vetores).
20
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Strings
● Tratam-se de um conjunto de caracteres.
● Podem ser declaradas na forma de vetores ou de
ponteiros.
● Quando declaradas sob a forma de vetor, devem ter
sempre o tamanho do número máximo de caracteres +
1.
char msg[14]; // string de ate 13 caracteres
char mes[2][4]; // vetor de strings de 3 caracteres
21
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
● Locais
● Só são acessíveis dentro da função onde foram
declaradas.
● São destruídas no encerramento da função.
25
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
#include <stdio.h>
void main ()
{
int y = -10; // variável local
x = x + y;
26
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Modificador Static
● Obriga o compilador a manter a variável numa posição
fixa da memória.
● Evita que a variável seja destruída no encerramento da
função.
● São inicializadas com 0;
27
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
byte incrementa()
{
static byte ciclo; // variável local estática
return ciclo++;
}
void main()
{
x = x + incrementa();
x = (x + 2) * incrementa();
Ponteiros
● Ponteiro é uma variável que contém o endereço de outra
variável.
● Podem ser utilizados para alocação dinâmica, podendo
substituir matrizes com mais eficiência (por não ter
tamanho fixo).
● Sintaxe:
tipo *nome_do_ponteiro;
Ex.: Ponteiros
30
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Constantes
● Valores mantidos fixos na memória durante toda a
execução do programa.
● Todo valor atribuído explicitamente no código é
potencialmente um candidato a ser convertido em
constante.
● Podem assumir qualquer um dos tipos nativos do C, e
serem declaradas como hexadecimais, octais, strings e
constantes de controle (barra invertida).
● Devem ser declaradas em caixa alta (por convenção).
31
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Ex.: Constantes
#include <stdio.h>
void main()
{
float j = 0.0;
char msg[15] = OUTRA_COISA ;
j = j + COISA + MAIS_COISA;
32
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Expressões Constantes
Formato Descrição
123 Número decimal inteiro
12.3 Número decimal em ponto flutuante
0123 Número octal
0x123 Número hexadecimal
0b0101 Número binário
'T' Caractere
'\012' Caractere octal
'\x12' Caractere hexadecimal
'\c' Caractere especial, onde \c pode ser:
\n Nova linha
\r Retorno de carro
\t Tabulação
\b Retrocesso (Backspace)
\f Salta Formulário
\' Aspas simples
\” Aspas duplas
\\ Barra invertida 33
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Operadores Aritméticos
● Usados para desenvolver expressões matemáticas.
● Podem ser binários ou unários.
Operador Descrição
+ Soma (inteira e ponto flutuante)
- Subtração ou troca de sinal (inteira e ponto flutuante)
* Multiplicação (inteira e ponto flutuante)
/ Divisão (inteira e ponto flutuante)
% Resto de divisão (de inteiros)
++ Incremento (inteiro e ponto flutuante)
-- Decremento (inteiro e ponto flutuante)
34
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
x = y + z; // x = 22
y = 23 / 2; // y = 11
f = 23.0 / 2; // f = 11.5
z = 24 % 5; // z = 4
x++; // x = 23
z--; // z = 3
Operadores de Bits
● Manipulam bits em valores inteiros.
Operador Descrição
>> Deslocamento de bits para direta
<< Deslocamento de bits para esquerda
~ Complemento bit-a-bit (inverte todos os bits)
| OR bit-a-bit
& AND bit-a-bit
^ XOR bit-a-bit
37
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
38
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Registros em C (struct)
● Um registro é um conjunto de variáveis agrupadas em
uma mesma referência.
● Podem conter variáveis de tipos distintos.
● As variáveis contidas podem ter seu tamanho em bits
alterado através do modificador “:”.
● Sintaxe:
struct nome_estrutura {
tipo1 nome_var1 [:bits];
tipo2 nome_var2 [:bits];
(...)
tipoN nome_varN [:bits];
} nome_var;
39
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
char c, ch;
struct lcd_bk lcd_pin; // “lcd_bk” é do tipo “lcd_pin”
lcd.data = 0x9;
c = lcd.data;
ch = 'a';
lcd_bk.enable = 0;
lcd_bk.data = ch;
40
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Uniões em C (union)
● Permite a criação de variáveis capazes de suportar dife-
rentes tipos de dados num mesmo espaço de memória.
● Ocupa na memória apenas o tamanho da maior variável
declarada.
● O tamanho das variáveis pode ser alterado por “:”.
● Sintaxe:
union nome_uniao {
tipo1 nome_var1 [:bits];
tipo2 nome_var2 [:bits];
(...)
tipoN nome_varN [:bits];
} nome_var;
41
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Enumerações (Enum)
● Uma enumeração é uma lista de constantes inteiras.
● Sintaxe:
enum nome_enum {id1 [=v1], id2 [=v2], idN [=vN]};
● Exemplo:
typedef int8 porta; // cria um novo tipo chamado “porta”
pA = pB = 0x00;
void main() {
coord coord_ini, coord_fin; // novo tipo sendo usado!
// instruções...
// mais instruções...
}
45
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
if (x >= 10)
{
y = 0;
x = 0;
}
else
y++;
x++;
}
46
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
switch (tecla)
{
case 0: y = 1; break;
case 1: y = 10; break;
case 2: y = 100;
x = 0; break;
default:
y++;
}
47
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
48
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
while (y != 13)
{
y++;
x--;
}
49
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
do
{
y++;
x--;
}
while (y != 13)
50
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
Funções
● Conjunto de rotinas agrupadas de modo a realizar uma
determinada tarefa.
● Melhor maneira de abstrair e agrupar trechos de código
que se repetem.
● Definida por um nome, um tipo de retorno, argumentos e
corpo.
● Os argumentos são opcionais, e o retorno, quando não
for necessário, deve ser void.
51
Microcontroladores – Prof. Marcos Zurita
A Linguagem C do CCS
E.: Funções
void printHelloWord()
{
printf(“Hello World!”);
}
void main()
{
int16 s = soma(5, 14);
Operador Ternário
● Também conhecido como “operador de expressão
condicional”.
● É uma forma compacta da estrutura if-else.
● Sintaxe:
condicao ? expressao1 : expressao2;
● Exemplo:
minimo = (x<y)? x : y; //retorna o menor argumento
Macros
● De maneira semelhante a declaração de constantes,
macros são um recurso de substituição textual de
trechos de código, comportando-se de maneira
semelhante a pequenas funções.
● Sintaxe:
#define nome_macro(arg1, arg2, ..., argN) expressao;
● Exemplo:
#define min(x,y) ((x<y)?x:y) //retorna o menor argumento
int a, b, c, d, menor;
// instruções...
d = min(a,b); // gera o código “d=((a<b)?a:b);”
menor = min(d,c); // gera o código “menor=((d<c)?d:c);”
54
Microcontroladores – Prof. Marcos Zurita
Bibliografia
● Milan Verle, “PIC Microcontrollers -
Programming in C”, 1a Ed., MikroElektronika,
2009.
● Alberto Noboru Miyadaira, “Microcontroladores
PIC18: aprenda e programe em liguagem C”,
2a Ed., Editora Érica, 2011.
● Andrew S. Tanenbaum, “Organização
Estruturada de Computadores”, 5a Ed.,
Pearson, 2006.
● Microchip Tec. Inc., “8-bit PIC
Microcontrollers”, Data Sheet, 2010.
● Microchip Tec. Inc., “PIC16F87XA - 28/40/44-Pin
Enhanced Flash Microcontrollers”, Data Sheet,
2003.
55
Microcontroladores – Prof. Marcos Zurita