(Parte I) Microcontroladores Microcontroladores PIC18 PIC18 Prof. talo Jder Loiola Batista Prof. talo Jder Loiola Batista Universidade de Fortaleza Centro de Cincias Tecnolgicas E-mail: italoloiola@unifor.br Julho /2011 Aula 07 Reviso: Linguagem C - Reviso Reviso: Linguagem C - Reviso (Parte I) PIC18 PIC18 Programao em C Programao em C Prof. talo Jder Loiola Batista Prof. talo Jder Loiola Batista Universidade de Fortaleza - UNIFOR Centro de Cincias Tecnolgicas - CCT italoloiola@unifor.br Julho /2011 Linguagem Linguagem que pode ser utilizada programao de quase todos H microcontroladores com programao em C; O compilador transforma as em assembly; em assembly; Linguagem C utilizada atualmente na os microcontroladores; instrues otimizadas para instrues em C no cdigo AA Linguagem Linguagem que pode ser utilizada programao de quase todos H microcontroladores com programao em C; O compilador transforma as em assembly; em assembly; Linguagem C utilizada atualmente na os microcontroladores; instrues otimizadas para instrues em C no cdigo AA Linguagem Um programa em C constituido dos seguintes elementos: i. Variveis i. Variveis ii. Operadores iii. Comando de controle iv. Funes O comando #include uma diretiva #include <18f4520.h> #include <18f4520.h> Servir para informar o pr-processador ser inserido o cdigo fonte que arquivo denominado 18f4520.h. Linguagem C constituido por um ou mais diretiva do compilador: #include <18f4520.h> #include <18f4520.h> processador em que deve se encontra no 18f4520.h. Linguagem Arquivos como 18f4520.h arquivos header ou cabealho chamados de Bibliotecas e contm definidas, utilizadas nos programas chamados de Bibliotecas e contm definidas, utilizadas nos programas Outros tipos de arquivos .h: Funes matemticas #include <math.h> Funes padro #include<stdlib.h> Funes de entrada e sada #include <stdio.h> Funes de texto #include<string.h> Funes do sistema #include<system.h> Funes matemticas #include <math.h> Linguagem C h so chamados de cabealho. Tambm contm funes pr- programas. contm funes pr- programas. Funes matemticas Funes padro Funes de entrada e sada Funes de texto Funes do sistema Funes matemticas Linguagem Aprimeira funo a ser executada void main() { } ela no recebe e no retorna nenhum Comentrios: Comentrios: // comentrio em uma /* comentrio em mais uma linha */ Linguagem C executada : nenhum parmetro linha mais de AA Linguagem H uma biblioteca para cada especifica os registradores especiais Para carregar um valor em um colocar o nome dele: trisb = 0; status = 0x0f; portc = 255; portc = 255; No necessrio especificar Linguagem C cada microcontrolador que especiais (SFR) um registrador, basta 0x0f; 255; 255; especificar o banco do registrador! AA Linguagem Para carregar um valor em um nome do registrador e o endereo ou o nome do bit, se for conhecido: ou o nome do bit, se for conhecido: portb.rb0 status.c = status.f0 Ou, pode apenas colocar o nome termo <_bit>: rb3_bit = rb3_bit = c_bit = trisb2 bit t0ie_bit = Linguagem C um bit, deve-se colocar o endereo do bit (f0, f1, f2...) conhecido: conhecido: = 1; = 0; = 0; nome do bit, seguido do = 1; = 1; 0; AA bit = 0; = 1; Linguagem Representao numrica: portb = 255; // decimal portb = 255; // decimal portb = 0xff; // hexadecimal portb = 0377; // octal portb = 0b11111111; // Linguagem C decimal decimal hexadecimal octal // binrio AA Linguagem Variveis: Tipo char int float void Tamanhoembytes 1 2 4 0 No h distino entre variveis mas as funes devem ser em letra Linguagem C Tamanhoembytes Intervalo 0 a 255 0 a 65535 -1.5E-45 a 3.4E+38 Nenhum valor variveis com letra maiscula ou minscula, letra minscula (void, if, while, for). AA Linguagem Modificadores de tipo: Tipo (unsigned) char Tamanhoembytes 1 (unsigned) char signed char (signed) short (int) unsigned short (int) (signed) int unsigned int (signed) long int 1 1 1 1 2 2 4 unsigned long int float double 4 4 4 long double void 4 0 Linguagem C Tamanhoembytes Intervalo 0 a 255 0 a 255 -128 a +127 -128 a +127 0 a 255 -32768 a +32767 0 a 65535 -2.15E+9 a +2.15E+9 0 a 4.3E+9 -1.5E-38 a +3.4E+38 -1.5E-38 a +3.4E+38 AA -1.5E-38 a +3.4E+38 nenhum Linguagem Declarao de variveis em endereo char absolute char i absolute Declarao de flags: boolean flagteste boolean flagteste Linguagem C endereo especfico: absolute absolute 0x20 flagteste flagteste AA Linguagem Operadores aritmticos: Operador Ao Operador + - * / % ++ -- Ao Soma Subtrao Multiplicao Diviso Resto Incremento Decremento -- Decremento Linguagem C Ao Ao Soma Subtrao Multiplicao Diviso Resto da diviso inteira Incremento Decremento Decremento AA Linguagem Operadores bit a bit: Operador Ao Operador & | ^ ~ >> << Ao AND OR XOR Complemento Deslocamento Deslocamento Linguagem C Ao Ao AND XOR Complemento Deslocamento direita Deslocamento esquerda AA Linguagem Operadores relacionais: Operador Ao Operador == > < != >= <= Ao Igual Maior Menor Diferente Maior Menor Linguagem C Ao Ao Igual a Maior que Menor que Diferente de Maior ou igual a Menor ou igual a AA Linguagem Operadores relacionais booleanos: Operador && || ! Ao E OU NOT Linguagem C booleanos: Ao OU NOT AA Estrutura condicional simples Comando if if (condio) comando; if (condio) { comando1; comando2; comando3; }} Estrutura condicional simples if (a<menor) menor=a; if (a<menor) { menor=a; printf (menor); } 17 em pseudo-cdigo: se (a<menor) entao menor=a; Estrutura condicional composta Comando if...else if (condio) comando; else Executa o comando se a condio for qualquer coisa diferente de zero! else comando; if (condio) { comando1; comando2; } else { comando3; if (peso= = printf else printf em pseudo comando3; comando4; } em pseudo se (peso= = entao senao Estrutura condicional composta Executa o comando se a condio for qualquer coisa diferente de zero! (peso= =peso_ideal) printf (Vc est em forma!); else printf (Necessrio fazer dieta!); em pseudo-cdigo: 18 em pseudo-cdigo: se (peso= =peso_ideal) entao exibir Vc est em forma! senao exibir Necessrio fazer dieta! Estrutura condicional composta Comando SWITCH switch (x) {{ case const1: comando1; break case const2: comando2; break case const3: comando3; break case const4: comando4; break defualt: break; } Estrutura condicional composta case const1: comando1; break; case const2: comando2; break; case const3: comando3; break; 19 case const4: comando4; break; Estrutura de repetio Comando for for (var=valor inicial; condio; incremento) comando; for (var=valor inicial; condio; incremento) { comando1; comando2 comando3; Exemplo: for ( comando3; } Pseudo Estrutura de repetio for (var=valor inicial; condio; incremento) for (var=valor inicial; condio; incremento) Exemplo: for (cont=3; cont<=11; cont++) printf (%d;cont) 20 Pseudo-cdigo: Para CONT = 3 at 11 repetir Mostrar (CONT) Estrutura de repetio Comando while while (condio) comando; while (condio) { comando1; comando2 comando3; Pseudo MAIOR = 0 N = 1 comando3; } N = 1 Enquanto Mostrar MAIOR Estrutura de repetio Exemplo: while (N != 0) { Pseudo-cdigo: MAIOR = 0 N = 1 while (N != 0) { scanf ("%d",&N); if (N > MAIOR) MAIOR = N; } 21 N = 1 Enquanto (N <> 0) repetir Ler N Se (N > MAIOR) ento MAIOR = N Mostrar MAIOR Linguagem Funes O formato geral (ANSI) de uma funo {tipo da funo} teste_funo ({parmetros}) { //bloco de comandos comando1; comando2; ... } Linguagem C funo : ({parmetros}) AA Linguagem Funes: - Passagem de Parmetros: - Por valor; - Por Referncia. - Retorno de Valores - Pelo termino da execuo - Pela execuo da declarao Linguagem C execuo da funo; declarao return. AA Linguagem Ponteiros: endereco_de_teste = &teste; -A varivel endereco_de_teste recebe variavel teste. *endereco_teste = 10 -O contedo da varivel teste ser -Declarao de variveis tipo ponteiro tipo *nome_da_varivel Linguagem C recebe o endereo na memria da ser agora igual a 10. ponteiro: AA Linguagem Ponteiros: int *endereo _de_teste; int teste; teste = 255; endereco_de_teste = &teste; *endereco_teste = 10; Linguagem C AA Linguagem Matrizes de Dados: tipo de dado nome_da_matriz [ tamanho int nota [40]; char nome [20]; float outra [5]; Representao Grfica: Linguagem C tamanho ] AA Linguagem Matrizes de Dados: Inicializao de Matrizes: tipo de dado nome_da_matriz [ tamanho int nota [5] = { 0,0,0,0,0}; int nota [5] = {4,9,7,3,6}; int teste[] = {6,7,8,9,4,5,6,7,8,9,2,3}; static int nota [5]; nota =1 ou x = ¬a[0]; //refere primeiro elemento da matriz. Linguagem C tamanho ] = {lista de valores}; [] = {6,7,8,9,4,5,6,7,8,9,2,3}; refere-se a um ponteiro para o AA Linguagem Matrizes de Dados: Matrizes multidimensionais: tipo de dado nome_da_matriz [linhas int tabela [2] [5]; Inicializao: Inicializao: Linguagem C linhas] [colunas] AA Linguagem Matrizes de Dados: Inicializao: Por ponteiro: Linguagem C AA Linguagem Strings de Caracteres: Linguagem C AA Exemplo de programa programa em C AA