·

Engenharia Elétrica ·

Microprocessadores

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta
Equipe Meu Guru

Prefere sua atividade resolvida por um tutor especialista?

  • Receba resolvida até o seu prazo
  • Converse com o tutor pelo chat
  • Garantia de 7 dias contra erros

Texto de pré-visualização

Sumário 1 Introdução 3 2 Definições Gerais em Linguagem C 4 21 A Linguagem C é Case Sensitive 4 22 Palavras Reservadas 4 23 Comentários 4 24 Representação Numérica 5 25 Tipos de Dados 5 251 Constantes 6 252 Definições 7 26 Variáveis 7 261 Variáveis Locais 8 262 Variáveis Globais 8 27 Funções 8 28 Header 9 3 Operadores 10 31 Operadores Aritméticos 10 32 Operadores Relacionais 11 33 Operadores Booleanos 12 34 Operadores Lógicos 13 35 Associação de Operadores 14 4 Estruturas Condicionais 15 41 A Estrutura if 15 42 A Estrutura ifelse 16 43 A Estrutura ifelse if 16 44 A Estrutura switch 17 5 Estruturas de Repetição 18 51 O Laço for 18 511 O Comando break 18 52 O Laço while 19 521 Estrutura de Repetição Infinita 19 53 O Laço dowhile 20 6 Comentários Finais 21 1 Introdução 3 1 Introdução O objetivo desse documento é fornecer um resumo sobre a linguagem C com ênfase em aplicações para microcontroladores O emprego da linguagem C na programação de mi crocontroladores não é complicado mas exige conhecimento mínimo da estrutura de pro gramação além de conhecimentos específicos sobre as estruturas internas do microcon trolador em questão Este resumo apresentará as estruturas de programação mais comuns necessárias para se programar microcontroladores Para os conhecimentos específicos de cada microcontrolador uma leitura do datasheet do componente se faz necessária A estrutura básica de um programa em C para microcontroladores é a seguinte void main inicializações de hardware e software while1 loop infinito tarefas a serem executadas pelo microcontrolador durante o funcionamento Com o uso inteligente dos comentários e funções a programação se torna de mais fá cil compreensão Programas extensos podem ser divididos em subrotinas funções que ocasionalmente consumirão menos memória do microcontrolador e tornarão o se proces samento mais rápido 2 Definições Gerais em Linguagem C 4 2 Definições Gerais em Linguagem C 21 A Linguagem C é Case Sensitive Case sensitive significa que a linguagem C diferencia as letras maiúsculas das minúsculas Assim os identificadores CONTADOR contador e Contador são diferentes entre si De vemos prestar bastante atenção a esse fato pois se criarmos uma variável de uma maneira e escrevermos de outra na hora de utilizála teremos um erro de compilação Essa regra também se aplica a todos os comandos da linguagem C que devem ser escritos em letras minúsculas eg while for if 22 Palavras Reservadas A linguagem C possui um conjunto de palavras reservadas que não podem ser usadas como variáveis de programa As palavras reservadas da linguagem C no padrão ANSI são Tab 1 Palavras Reservadas em Linguagem C auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while main Como já comentado uma palavra reservada da linguagem C não pode ser utilizada pelo programador como variável do programa A seguir temos um exemplo de erro no emprego de variáveis while 1 int 200 23 Comentários Os comentários auxiliam na documentação do programa e são fundamentais para enten dimento futuro de sua funcionalidade especialmente se quem vai fazer a manutenção do firmware não é o próprio programador que o criou Além disso os comentários também são úteis exclusão de linhas de código durante a compilação facilitando os testes durante a programação Em geral grande parte dos compiladores aceita dois tipos de comentários os de linha simples e os de múltiplas linhas Os comentários de linha simples sempre são iniciados com dupla barra fazendo com que o compilador ignore tudo o que estiver na mesma linha depois da dupla barra Por exemplo Este é um comentário de linha simples 2 Definições Gerais em Linguagem C 5 Por sua vez os comentários de múltiplas linhas devem ser sempre iniciados com e terminados com Por exemplo Este é um comentário de múltiplas linhas 24 Representação Numérica Nessa subseção apresentaremos um resumo das representações numéricas para microcon troladores PIC baseados no compilador MikroC Pro Os tipos numéricos são os mesmos para todos os microcontroladores porém a representação numérica pode variar entre os diversos compiladores existentes Decimal valordecimal 125 Binário PORTA 0b11110001 Hexadecimal valorhexa 0xFF Octal valoroctal 075 Caractere caracter a 25 Tipos de Dados Toda variável usada em um programa deve ser declarada como de um determinado tipo que define seu tamanho em número de bits e suas características As variáveis podem ser Tab 2 Tipos de Dados Tipo Bytes Mínimo Máximo Representa void Zero Sem valor Sem valor Valores nulos char 1 128 127 Caracteres int 2 32768 32767 Inteiros float 4 1 5 1045 3 4 1038 Valores com casas decimais ponto flutuante double 8 4 9 10324 1 8 10308 Valores com casas decimais ponto flutuante 2 Definições Gerais em Linguagem C 6 Além disso temos os seguintes modificadores de tipo Tab 3 Modificadores de Tipos de Dados Tipo Modificação signed Com sinal unsigned Sem sinal short Inteiro menor que o padrão long Inteiro maior que o padrão Portanto temos os seguintes tipos de dados inteiros Tab 4 Tipos de Dados Inteiros Tipo Bytes Mínimo Máximo char 1 128 127 signed char 1 128 127 unsigned char 1 0 255 short int 2 128 127 signed short int 2 128 127 unsigned short int 2 0 255 int 2 32768 32767 signed int 2 32768 32767 unsigned int 2 0 65535 short 2 32768 32767 signed short 2 32768 32767 unsigned short 2 0 65535 long int 4 231 231 1 signed long int 4 231 231 1 unsigned long int 4 0 232 1 251 Constantes Servem para criar símbolos de valor constante que auxiliam na programação No momento da compilação o compilador se encarrega de atribuir os valores corretos aos símbolos criados Por exemplo const LIGADO 1 const DESLIGADO 0 const TMAX 100 Após definir as constantes é possível utilizar estas palavras como tendo o mesmo sig nificado do valor numérico atribuído 2 Definições Gerais em Linguagem C 7 252 Definições Além de dar nome a valores constantes também podemos atribuir outros nomes a símbolos já existentes no microcontrolador Por exemplo imagine que você tenha um LED ligado ao bit 0 da porta A do seu microcontrolador além de um motor DC ligado ao bit 1 dessa mesma porta Para facilitar a programação podese fazer define LED PORTAB0 define MOTOR PORTAB1 Observe que na Linguagem C os comandos iniciados pelo caractere são os únicos que não recebem pontoevírgula no final da sentença Assim os comandos de definição define e const servem para tornar o programa mais compreensível Além disso estes comandos são sempre eliminados pelo compilador ou seja não consomem memória extra do microcontrolador Para visualizar sua utilizada considere o código abaixo utilizando definições e cons tantes define LED PORTAB0 define MOTOR PORTAB1 const LIGADO 1 const DESLIGADO 0 void main LED LIGADO MOTOR LIGADO 26 Variáveis Uma variável sempre deve ser declarada da seguinte forma modificador tipo de dado nome da variável valor Note que a utilização do modificador e da inicialização da variável são opcionais Exemplos unsigned int valor 123 char letra a int contador As variáveis podem ser do tipo locais ou globais conforme veremos a seguir 2 Definições Gerais em Linguagem C 8 261 Variáveis Locais São variáveis declaradas dentro de um bloco de instruções ou função e só podem ser acessadas dentro desse bloco Exemplo int media int valor1 5 int valor2 7 return valor1valor22 Uma observação importante é que todas as definições de variáveis locais devem apare cer logo no início do blocofunção 262 Variáveis Globais São declaradas fora dos blocos de função e podem ser acessadas por todas as funções e blocos de instruções Exemplo int valor1 5 int valor2 7 int media return valor1valor22 int soma return valor1valor2 Mas atenção apesar de parecer uma boa ideia declarar funções globais devemos ter bastante cuidado com sua utilização Uma vez que estas variáveis podem ser acessadas por todas as funções é difícil manter o controle sobre seus valores à medida que o código vai sendo executado Por essa razão declarar variáveis globais não é considerada uma boa prática de programação devendo ser utilizadas apenas quando estritamente necessárias e de forma bastante cuidadosa 27 Funções Quando temos trechos de códigos que são repetidos várias vezes podemos isolar estes tre chos em funções Assim podemos chamar uma função em diferentes pontos do programa principal evitando reescrever aquele trecho de código repetidamente Uma função deve ser declarada antes de ser chamada Por isso é importante escrever todas as novas funções antes da função principal main Por exemplo 2 Definições Gerais em Linguagem C 9 void piscaLED declara o início da função piscaLED PORTAB0 1 liga o pino A0 delayms1000 aguarda 1000ms 1 segundo PORTAB0 0 desliga o pino A0 delayms1000 aguarda 1 segundo void mainvoid início do programa principal while1 piscaLED chama a função piscaLED O void que traduzido para português quer dizer vazio é um tipo de dado utilizado em funções que não retornam nenhum parâmetro A função main é sempre do tipo void pois não retorna nem recebe nanhum valor Entretanto as funções podem muitas vezes conter parâmetros de entrada que carregam informações para dentro do bloco da função além de parâmetros de saída devolvendo informações ao programa principal Por exemplo int mediaint a int b declara o início da função media Essa função recebe dois valores do tipo int a e b return a b2 retorna um valor do tipo int void mainvoid início do programa principal int valor1 10 int valor2 20 int result result mediavalor1 valor2 A função média retorna seu valor do tipo int na variável result 28 Header Em muitos compiladores é necessário incluir um arquivo que contém todas as definições do microcontrolador sendo utilizado Isto é feito através do comando include Em geral temos a seguinte sintaxe que deve ser incluída logo no início de qualquer programa includemicrocontroladorh Além deste arquivo com as definições do microcontrolador podemos utiliza a instrução include para incluir algum arquivo denominado cabeçalho contendo funções auxiliares a serem utilizadas Por exemplo includenomedoarquivoh 3 Operadores 10 3 Operadores A linguagem C possui operadores para atribuir comparar ou modificar dados e variáveis Podemos dividir estes operadores em quatro categorias principais Aritméticos para cálculos Relacionais para comparar valores numéricos Lógicos para testar condições ou manipular bits Booleanos para realizar operações lógicas com mais de um bit 31 Operadores Aritméticos Em linguagem C temos os seguintes operadores aritméticos Tab 5 Operadores Aritméticos Símbolo Operação Soma Subtração Multiplicação Divisão Resto inteiro da divisão Incremento em um Decremento em um Os operadores aritméticos sempre usam duas variáveis e retornam um terceiro valor mantendo inalteradas as variáveis originais Exemplos Soma int y 10 int z 5 int x 0 x y z Soma o conteúdo da variável y com a variável z e armazena o resultado na variável x Subtração int a 10 int b 5 int c 0 c b a Subtrai da variável b o conteúdo da variável a e armazena o resultado na variável c 3 Operadores 11 Multiplicação int a 1 int b 20 int c 2 a bc Multiplica o conteúdo da variável b pelo da variável c e armazena o resultado na variável a Divisão int a 0 int b 20 int c 2 a bc Divide o conteúdo da variável b pelo da variável c e armazena o resultado na variável a Resto inteiro da divisão int a 1 int b 25 int c 2 a bc Divide o conteúdo da variável b pelo da variável c e armazena o resto da divisão na variável a Incremento em um int contagem 0 contagem Incrementa a variável contagem em um Decremento em um int contagem 0 contagem Decrementa a variável contagem em um 32 Operadores Relacionais Realizam operações de comparação retornando os valores FALSO 0 ou VERDADEIRO 1 Esses operadores não afetam o conteúdo das variáveis sendo comparadas 3 Operadores 12 Tab 6 Operadores Relacionais Símbolo Descrição Igual a Diferente de Menor que Maior que Menor ou igual Maior ou igual Exemplo void main unsigned char cont 0 while1 if PORTAB0 1 Se o pino A0 estiver ligado if cont 9 cont Se contagem for maior que 9 incrementa else cont 0 Caso contrário zera 33 Operadores Booleanos São usados para realizar testes booleanos entre elementos em um teste condicional Os operadores são Tab 7 Operadores Booleanos Símbolo Descrição E AND OU OR NÃO NOT Exemplo 1 int A 0 if A 0 A 10 A Significado se A for maior do que zero E A for menor do que dez então incremente A em um 3 Operadores 13 Exemplo 2 int A 0 int B 0 int C 0 if A B A C A Significado se A for diferente de B OU A for diferente de C então decremente A em um 34 Operadores Lógicos São usados para realizar testes lógicos bit a bit Os operadores lógicos são Tab 8 Operadores Lógicos Símbolo Descrição E AND OU OR OU Exclusivo XOR NÃO NOT Deslocamento para a direita Deslocamento para a esquerda Exemplo 1 int cont 0 if PORTAB0 PORTAB1 cont Significado se PORTAB0 for igual a um E PORTAB1 for igual a um então cont é incrementado em uma unidade Exemplo 2 int cont 0b00000001 if PORTAB0 PORTAB1 cont cont1 Significado se PORTAB0 for igual a um OU PORTAB1 for igual a um então o valor de cont é deslocado para a esquerda Exemplo 3 int cont 10 if PORTAB0 PORTAB1 cont Significado se PORTAB0 for igual a um E PORTAB1 não for igual a um então o valor de cont é decrementado de uma unidade 3 Operadores 14 35 Associação de Operadores Algumas abreviações são comumente utilizadas com os operadores Dentre elas podemos citar Tab 9 Abreviações de Operadores Forma Expandida Forma Reduzida x x y x y x x y x y x x y x y x x y x y x x y x y x x y x y x x y x y x x y x y x x y x y x x y x y 4 Estruturas Condicionais 15 4 Estruturas Condicionais 41 A Estrutura if A estrutura if que significa se em português é uma estrutura de decisão baseada no resultado de um teste lógico Sua forma geral é if condição comando 1 comando 2 comando n Se houver apenas uma instrução a ser executada após o teste lógico as chaves podem desprezadas if condição comando Em C qualquer número diferente de zero é considerado verdadeiro o que significa que a condição if só será falsa se o teste lógico aplicado resultar em zero 0 Qualquer outro valor mesmo que negativo é considerado verdadeiro 1 Exemplo void main int contagem 0 if PORTAB0 contador Apenas se o valor da porta A0 for igual a um o contador será incrementado Entretanto em geral utilizamos uma expressão lógica como condição de entrada para a estrutura if void main int contagem 0 if PORTAB0 0 contador Apenas se o valor da porta A0 for igual a zero o contador será incrementado Uma observação importante é quanto a diferença entre o operador de atribuição e a operação booleana de igualdade Para inicializar uma variável utilizamos porém para testar o valor de uma variável utilizamos Por exemplo int a 10 Inicializamos a variável a com o valor 10 if a 10 Fazemos o teste booleano com a variável a a 4 Estruturas Condicionais 16 42 A Estrutura ifelse A estrutura if pode ser expandida com o uso de else senão que permite definir comandos a serem executados caso o teste seja falso 0 Por exemplo int i 10 int j 5 if i 10 Se i for igual a 10 incrementa j j else Senão decrementa j j Caso haja mais de um comando if na sequência o else estará sempre relacionado com o último if Por exemplo int i 10 int j 5 if i 10 Se i for igual a 10 incrementa j j else Senão decrementa j j 43 A Estrutura ifelse if Este tipo de estrutura permite um número de alinhamentos de comandos possibilitando colocar estruturas if dentro de outras estruturas if com maior facilidade Seu formato geral é if condição 1 comandos else if condição 2 comandos else if condição 3 comandos A estrutura ifelse if é uma alternativa para tornar tomadas de decisões mais rápidas em alguns casos Isto ocorre porque no momento em que alguma condição seja satisfeita os demais blocos if subsequentes não serão sequer testados 4 Estruturas Condicionais 17 44 A Estrutura switch A estrutura switch é muito parecida com a estrutura ifelse if A diferença é que switch não aceita expressões lógicas para tomar decisões mas somente constantes O comando switch testa o valor de uma variável e executa os comandos correspondentes a casos cases pré estabelecidos Cada case define uma série de comandos que serão executados até chegar na instrução break Quando nenhum caso correspondente for encontrado a cláusula default será executada Porém o uso da cláusula default é opcional Formato da estrutura switch switchvariável case constante1 comandos break case constante2 comandos break case constante n comandos break default comandos break Exemplo de uso da estrutura switch int contador readADC lê o valor do conversor AD e armazena na variável contador switchcontador case 0 x PORTAB0 1 break case 1 PORTAB1 1 break case 2 PORTAB0 0 PORTAB1 0 break default break 5 Estruturas de Repetição 18 5 Estruturas de Repetição 51 O Laço for O laço for é utilizado quando precisamos de uma ciclo controlado de repetições Em sua inicialização definimos uma variável de controle a qual damos um valor inicial uma con dição de parada e uma regra de incremento ou decremento Antes de serem executados os comandos do laço for avaliase a condição de teste Caso esta condição seja verdadeira os comandos são executados A cada ciclo de execução iteração a variável de controle é incrementada ou decrementada de acordo com uma regra A estrutura geral do laço for é forinicialização condição incremento comandos Vejamos um exemplo de uso fori 0 i 10 i PORTAB0 1 liga o pino A0 delayms1000 aguarda 1 segundo PORTAB0 0 desliga o pino A0 delayms1000 aguarda 1 segundo Neste exemplo a variável i é inicialmente carregada com o valor 0 i 0 Como a condição inicial é verdadeira i 10 os comandos do laço são executados Após a execução dos comandos do laço a variável i é incrementada em uma unidade dada pela condição de incremento i e novamente os comandos do laço são executados Isto é feito até que a condição se torne falsa isto é quando i for igual a 10 Ainda é possível utilizar o laço for em passos decrescentes O mesmo código acima pode ser escrito de maneira equivalente como fori 10 i 0 i PORTAB0 1 liga o pino A0 delayms1000 aguarda 1 segundo PORTAB0 0 desliga o pino A0 delayms1000 aguarda 1 segundo 511 O Comando break o comando break é utilizado para encerrar o laço for antes de se completar todas as itera ções Quando o laço é quebrado o programa pula para a próxima instrução após o laço Exemplo void main int i 0 5 Estruturas de Repetição 19 fori 0 i 10 i if PORTBB0 1 break PORTAB0 1 liga o pino A0 delayms1000 aguarda 1 segundo PORTAB0 0 desliga o pino A0 delayms1000 aguarda 1 segundo Neste exemplo o pino A0 ficará piscando desde que o pino B0 seja diferente de 1 Quando isto acontecer quando B0 for ligado o comando break será executado e o laço será encerrado 52 O Laço while O laço while tem a seguinte estrutura whilecondição comandos Dessa forma o laço inicialmente verifica uma condição lógica Se esta condição for verdadeira os comandos dentro do laço serão executados caso contrário o programa salta para a linha de comando imediatamente após o fim do laço A condição pode ser uma operação relacional ou um teste booleano Por exemplo whilex50 Enquanto x for menor do que 50 x incrementa x 521 Estrutura de Repetição Infinita Microcontroladores em geral são programados para executar uma tarefa indefinidamente Dessa forma o uso de laços infinitos é bastante comum Uma maneira de criar um laço infinito é fornecer uma condição sempre verdadeira ao while Assim uma estrutura típica de um programa em C para microcontroladores é a seguinte void main inicializações de hardware e software while1 loop infinito tarefas a serem executadas pelo microcontrolador durante o funcionamento onde a condição em while1 é sempre verdadeira sempre igual a 1 5 Estruturas de Repetição 20 53 O Laço dowhile O laço dowhile nada mais é do que uma variação do laço while Sua estrutura geral é do comandos whilecondição A diferença aqui é que os comandos são executados antes de se realizar o teste lógico de condição Caso o teste executado ao final seja verdadeiro o laço é executado novamente do início Caso contrário o programa segue com a instrução imediatamente após o laço