





















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Introdução
Tipologia: Notas de estudo
1 / 29
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
Objetivo:
Iniciar o projetista no uso da linguagem C para sistemas dedicados baseados na família PIC 16CXXX.
Metodologia:
O curso esta dividido em 3 partes:
w Iniciação à Linguagem C w Implementação da CCS para a linha microchip w Exemplos práticos de hardware e software
Parte I - Iniciação à linguagem C
A principal vantagem de se usar linguagens de alto nível (no nosso caso a linguagem C) esta na menor interação do projetista com o hardware, no que diz respeito ao controle do mesmo (ajuste de bancos de registradores, seqüências de inicialização, ...). Desta forma o projetista dedica seu tempo basicamente à lógica do problema e não aos detalhes internos do chip.
Como exemplo vamos ver a seqüência de escrita na EEPROM do 16F (gravar no endereço 20H o valor 12H, pág. 27 do livro):
Em assembler: Em ‘C’
bcf STATUS,RP0 write_eeprom(0x20,0x12); movlw 20H movwf EEADR movlw 12H movwf EEDATA bsf STATUS,RP bcf INTCON,GIE bsf EECON1,WREN movlw 55H movwf EECON movlw 0AAH movwf EECON bsf EECON1,WR
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
Comentários são informações anexadas ao programa fonte (*) que permitem ao programador ou outros entenderem o significado do que esta sendo feito. É boa prática comentar todas as linhas, pois após um certo tempo, nem mesmo o criador do programa lembrará de tudo o que estava pensando no momento da escrita.
O compilador ignora tudo que estiver definido como comentário
(*) O programa fonte em C deve ter terminação “.C”
Exemplo: teste.c
Existem dois tipos de comentários:
ü Comentários que ocupam apenas 1 linha
Este tipo de comentário é iniciado com duas barras conjuntas: // Neste caso, tudo que estiver após as duas barras será ignorado pelo compi- lador.
Exemplo:
x = x + 2; // soma 2 à variável x
ü Comentários com múltiplas linhas
Este tipo de comentário é iniciado com a seqüência /* e finalizado pela seqüência */. Neste caso, tudo que estiver ENTRE estas duas seqüências será ignorado pelo compilador. Ideal para excluir temporariamente trechos de código.
Exemplo:
x = x + 2; /* tempo++; a = SQRT(25); */ x = 0;
No exemplo acima, as linhas tempo++; e a=SQRT(25); serão ignoradas no momento da compilação.
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
São instruções para o compilador, e não para o programa que será gerado.
As diretivas informam, por exemplo, o processador para o qual o código deverá ser gerado, o valor do clock que será usado pela cpu,..).
As diretivas sempre começam com ‘ # ’.
Um bom exemplo é a diretiva que inclui no processo de compilação as defini- ções do chip.
#include <16F84.H>
A terminação .H indica um Header File da linguagem C, ou seja, um cabeça- lho. Equivale ao P16F84.INC usado no assembler.
O compilador C não é um compilador de linha, como o assembler.
O compilador C procura o sinal de que a instrução ou o bloco de instruções já acabou.
Este sinal é o “ponto e virgula” para uma instrução ou o ‘ } ‘ para o bloco (mais tarde falaremos sobre blocos de instruções).
No exemplo abaixo, as duas maneiras são corretas, pois o ‘ ; ‘ é que sinaliza o fim da instrução.
x = x + 25; x = x + 25 ;
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
I.5.2 - Como escrever os nomes de variáveis, constantes e funções
Todo ‘label’ (nome ou identificador), seja de variável, constante ou função, deve começar por letra, ter no máximo 32 caracteres e não usar caracteres especi- ais ou de controle (! ? % ....). Nomes de funções e rotinas internas também não podem ser utilizados.
Corretas Incorretas
Teste 0local começa com número teste parte!dois TESTE ^ 12A caracter inválido (! ) x_2
Não podemos criar uma variável ou uma rotina chamada SQRT, pois a função de cálculo de raiz quadrada já existe.
IMPORTANTE: O compilador diferencia letras minúsculas de maiúsculas. Nos exemplos acima, Teste, teste e TESTE são 3 variáveis diferentes para o compilador.
Uma boa prática esta em diferenciar variáveis, labels e registros com tipos diferentes de letras.
Exemplo: PORTB registro da CPU TempoMs Rotina de tempo em ms quantos variável em RAM
I.5.2 - Atribuindo valores
A atribuição de valores é feita pelo sinal de igualdade,
tempo = 123;
aqui a variável tempo passa a ter o valor 123 decimal.
I.5.3 - Valores iniciais das variáveis
Devemos sempre ajustar os valores iniciais de cada variável do programa antes de usa-las, pois nada garante que estão em “0 “ no reset.
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
I.5.4 - Variáveis locais e variáveis globais
Existem duas maneiras principais para a alocação de variáveis em memória:
Variáveis Globais:
As variáveis globais tem “alcance” para todas as rotinas e funções existentes no programa. Isto significa que qualquer rotina ou função poderá utiliza-la.
Variáveis Locais:
As variáveis locais tem “alcance” apenas dentro das rotinas ou funções onde foram criadas. Isto significa que apenas a rotina ou função onde a mesma foi criada poderá utiliza-la.
Vamos ver um fragmento de código como exemplo:
char A,B,C; // A, B e C são variáveis globais, pois estão fora de // qualquer função ou rotina. main () { A = 0; // Faz A= Tempo(); // chama rotina Tempo Espera(); // chama rotina Espera }
Tempo() { char J; // cria uma variável chamada J. // Somente a rotina Tempo() poderá utiliza-la J = A; }
Espera() { char X; // cria uma variável chamada X. // Somente a rotina Espera() poderá utiliza-la X = A; X = J; // Erro: A variável J não existe para esta rotina }
A principal vantagem no uso das variáveis locais esta em que a memória RAM ocupada pela mesma será compartilhada por outras variáveis locais, permi- tindo um “aumento” no espaço de memória.
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
Chamamos função um trecho de programa que realiza determinada opera- ção (função que lê teclado, função que escreve no display, ...) bem como as funções pré-definidas (SQRT, ABS, ACOS, ...).
Para evitar conflito, vamos chamar de ‘rotinas’ as funções escritas pelo proje- tista do software.
No exemplo abaixo, temos a função MAIN (falaremos dela depois) que é a rotina executada no reset do programa. A função MAIN chama uma ROTINA para ler teclas, e a rotina de ler teclas chama uma FUNÇÃO para calcular o valor absoluto da tecla.
main ( ) {
}
LeTeclas( ) {
}
Pela nomenclatura normal, ‘LeTeclas’ seria chamada de função, mas preferi- mos chama-la de rotina, para diferenciar das funções pré-definidas.
I.6.1 - Funções especialmente desenvolvidas para os PIC’s
Na parte II, referente ao compilador da CCS, veremos quais as funções que existem para os PIC’s e como funcionam.
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
Vamos ver neste item os tipos de expressão permitidas para valores numéri- cos e para a manipulação de 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) (Pouco utilizados) Exemplos: 045; 09;...
Números Binários: Devem iniciar por ‘ 0b ‘
Exemplo: 0b
Números Hexadecimais: Devem iniciar por ‘ 0x ‘
Exemplo: 0x32; 0xA9; ...
String de 1 caractere: Entre Apóstrofos ‘ ‘
Exemplo: ‘z’; ‘A’; ....
String de vários caracteres: Entre aspas “ “
Exemplo: “teste de escrita”
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
Define-se como matriz um grupo de dados que podem ser agrupados num mesmo nome, diferenciando-se apenas pela posição no grupo.
Como exemplo temos uma rua com várias casas. A rua seria nossa matriz, por exemplo, Rua Paraná. Cada casa tem um número que indica sua posição na rua (na matriz).
Exemplo: casa 32 da Rua Paraná
Poderíamos escrever Rua Parana[32]
Em C, a definição de uma variável ou de uma constante como matriz é feita apenas pela inclusão de seu tamanho entre colchetes [ ].
Exemplo:
Matriz para os 20 valores de temperatura lidos, variáveis tipo char:
char temperatura[20]; // reserva espaço de memória para // 20 bytes que indicarão a temperatura
Para acessar os elementos da matriz basta escrever o nome da variável com o índice do valor desejado.
Exemplo:
valor = temperatura[12]; // o 13o^ elemento da matriz temperatura // é copiado para a variável valor.
IMPORTANTE:
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
Um dos pontos mais importantes do aprendizado da linguagem C esta na sua sintaxe, isto é, como o programa deve ser escrito.
Até agora vimos apenas teorias sobre variáveis, dados, e funções.
Veremos a partir de agora como tudo isto é integrado de forma a produzir um resultado útil.
Para tal vamos estudar as estruturas de montagem de programas e ver como se controla o fluxo de “ações” que o programa deve tomar.
Para facilitar o aprendizado não vamos nos preocupar agora com o PIC e nem com as funções criadas para o mesmo, mas apenas com a forma como escre- vemos o programa em C.
I.10.1 - Blocos de declarações
Sempre que mais de uma instrução tiver de ser executada para uma certa rotina, as mesmas deverão estar contidas dentro de um BLOCO de declarações.
Um bloco tem início com a abertura de uma chave ‘ { ‘ e é finalizado pelo fechamento da chave ‘ } ‘.
Como um bloco não termina no fim da linha, mas sim ao fechar a chave, podemos escrever o mesmo de forma mais clara, colocando seus elementos em várias linhas e permitindo melhor colocação de comentários..
Exemplo 1: { x = 1; tempo = x * 2; }
Exemplo 2: { x = 1; // posso colocar um tempo = x * 2; // comentário para cada } // linha
Os dois exemplos acima realizam a mesma tarefa, mas o exemplo 2 é mais fácil de ser lido e posteriormente entendido.
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
Podemos então resumir numa tabela todas as combinações dos IF’s:
ü if (teste a realizar) instrução para teste “OK”
ü if (teste a realizar) { grupo de instruções para teste “OK” }
ü if (teste a realizar) instrução para teste “OK” else instrução para teste “NÃO OK”
ü if (teste a realizar) { grupo de instruções para teste “OK” } else instrução para teste “NÃO OK”
ü if (teste a realizar) instrução para teste “OK” else { grupo de instruções para teste “NÃO OK” }
ü if (teste a realizar) { grupo de instruções para teste “OK” } else { grupo de instruções para teste “NÃO OK” }
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
I.10.2.1 - IF’s aninhados (embutidos um no outro)
Chamamos a estrutura de “IF’s aninhados” quando a instrução a ser execu- tada para um teste (seja verdadeiro ou falso) é na verdade outro IF.
Vamos ver dois exemplos que ajudarão a esclarecer o assunto.
Exemplo 1: Observe os dois trechos de programa a seguir:
if ( X ) | if ( X ) if (Y) | { a = a * 2; | if (Y) else | a = a * 2; a = a * 4; | } | else | a = a * 4
No trecho da esquerda, o else refere-se ao if (Y), pois esta “mais próximo” deste. Somente se o if (Y) resultar falso é que a linha a = a * 4 será executada. Se o if (X) resultar falso , nenhuma operação será realizada.
No trecho da direita, o else refere-se ao if (X), pois o if (Y) esta dentro de um bloco, não sendo visível para o else. Se o if (X) resultar verdadeiro mas o if(Y) resultar falso , nenhuma operação será realizada.
Exemplo 2: Vários IF’s seqüênciais
if ( posição == 1) // Vê se posição = 1. peso = 1; // É 1. Faz peso = 1.
else if (posição == 2) // Não é 1. Vê se posição = 2. peso = 2; // É 2. Faz peso = 2.
else if (posição == 3) // Não é 2. Vê se posição = 3. peso = 4; // É 3. Faz peso = 4.
else if (posição == 4) // Não é 3. Vê se posição = 4. peso = 8; // É 4. Faz peso = 8.
else peso = 0; // Não é 4. Faz peso = 0.
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
I.10.4 - O condicional WHILE (enquanto)
O WHILE executa a instrução ou o bloco de instruções “enquanto” a condi- ção de teste for verdadeira.
Se logo no inicio do teste a condição der falsa, nada será executado.
Sintaxe:
while ( teste ) instrução para teste verdadeiro
ou
while ( teste ) { ( grupo de instruções para teste verdadeiro) }
Vamos proceder novamente a soma dos números de 1 a 100 como no exemplo anterior.
i = 0; // nunca esquecer de inicializar soma = 0; // todas as variáveis do programa. while ( i < 101 ) // faça enquanto I< { soma = soma + 1; i++; /* como o WHILE apenas faz o teste devo incrementar a variável */ }
I.10.4.1 - Loop infinito com WHILE
while (true) { ( declarações executadas eternamente ) }
A condição booleana “true” sempre será verdadeira (true).
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br
I.10.5 - O condicional DO / WHILE (faça ... enquanto)
O condicional DO / WHILE funciona de forma semelhante ao WHILE, exceto pelo fato de que “pelo menos uma vez a instrução ou o bloco serão executados”.
Sua sintaxe é:
do instrução para teste verdadeiro while ( teste ) ;
ou
do { ( grupo de instruções para teste verdadeiro) } while ( teste ) ;
Parte I - Iniciação à linguagem C
VIDALVIDAL Projetos Personalizados - (011) - 6451 - 8994 / 9378 - 0101 - www.vidal.com.br