C para o Compilador CCS
C para o Compilador CCS
C para o Compilador CCS
0 - Introdução
• Por que C ?
2
Capítulo 3 – Treinamento em C 1 - Introdução
• Exemplo CCS:
#include <stdio.h>
#include <stdlib.h>
void main()
{
setup_adc_ports(NO);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
3
Capítulo 3 – Treinamento em C 1 – Tipos de dados e variáveis
4
5
Capítulo 3 – Treinamento em C 1 – Tipos de dados e variáveis
• Modificadores de acesso:
– signed
– unsigned
– short
– long
– Exemplos:
• signed int = -128 a +127
• signed char = -128 a +127
• short int = 1bit = int1 = boolean
• long int = 16 bits = int16
6
Capítulo 3 – Treinamento em C 1 – Tipos de dados e variáveis
• Representação de valores:
int valor;
valor = 50; //sis. decimal
valor = 0x50; //sis. hexade.
valor = 050; //sis. octal
valor = 0b01010101; //sis. binário
• Outras atribuições:
val1 = 50; //inteiro
val2 = -5; //inteiro negativo
val3 = 54.32; //ponto flutuante (real)
val4 = ‘a’; //caractere aspas simples
val5 = “teste”; //string com aspas duplas
8
Capítulo 3 – Treinamento em C 2 – Diretivas de compilação
2 – Diretivas de compilação
• #include
– Exemplo:
#include “18F4550.h” ou #include <18F4550.h>
– Indica que anexe ao programa o arquivo 18F4550.h onde
são feitas muitas declarações e definições e também as
bibliotecas.
– Bibliotecas mais usuais:
• stdio.h
• stdlib.h
9
Capítulo 3 – Treinamento em C 2 – Diretivas de compilação
• #use
– Exemplo:
#use delay(clock=4000000)
#use rs232(baud=19200, xmit=PIN_B2, rcv=PIN_B3)
– Diretiva interna do compilador usada para configurar
determinados aspectos de execução do μC.
• #define
– Exemplo:
#define numero_linhas 10
...
int matriz [numero_linhas];
10
Capítulo 3 – Treinamento em C 2 – Diretivas de compilação
• #fuses
– Exemplo:
#fuses NOWDT, BROWNOUT, NOLVP
– Indica o estado dos “fusíveis” que indica em que modo
o μC deve operar e quais recursos devem ou não estar
disponíveis. No exemplo NOWDT indica watchdog
desligado, BROWNOUT indica resete por brown-out
ligado e NOLVP programação por baia tensão
desligada.
– Dica: para ver quais “fuses” são válidas para um
determinado μC e quais seus significados, vá no PCW
no menu View > Valid Fuses
11
Capítulo 3 – Treinamento em C 2 – Diretivas de compilação
• #asm e #endasm
– Exemplo:
#asm
movf a,w
addwf b,w
; comandos aqui
#endasm
– Em meio a um bloco de código C pode ser aberto um
trecho de código assembly e depois fechado
• #device
– Define o nome do processador usado. Exemplo:
#device PIC18F4550 ADC=8
– Especifica o pic18f4550 e indica que ele deve retornar
8 bits de conversão a partir da função read_adc(); 12
Capítulo 3 – Treinamento em C
3 – Comandos de controle
• IF • SWITCH
if (condicao) switch(variavel)
{ {
comandos; 0: output_low(PIN_B0);
} break;
else 1: output_high(PIN_B0);
{ break;
comandos; default:
}
output_high(PIN_B1);
}
13
Capítulo 3 – Treinamento em C
• FOR • WHILE
for (inicialia; condicao; while (condicao)
incremento)
{
{
comandos;
comando;
}
comando;
}
Exemplo: • DO WHILE
for (x=0, y=110; x<=100 || do
y < 1; x++, y--) {
{ comandos;
printf(“%u, %u”, x, y); } while (condicao)
}
14
Capítulo 3 – Treinamento em C
4 – Criando funções
• Forma geral:
tipo_dado nome_funcao (parametros)
{
//comandos
}
– Exemplos:
void divide (float *a, float *b)
float divide (float a, float b)
{
{
If(*b)
If (b)
*a=*a/*b
return a/b;
else
else
*a=0;
return 0;
}
} 15
Capítulo 3 – Treinamento em C
resultado = soma(2,3);
}
int soma (int a, int b)
{
#asm
movf a,w
addwf b,w
movwf _RETURN_
#endasm
}
17
Capítulo 3 – Treinamento em C
void main()
{
float precos[10];
float taxa_inflacao = 1.05;
corrige_inflacao(precos, taxa_inflacao );
}
18
Capítulo 3 – Treinamento em C
• Operadores relacionais
• Lógicos booleanos
• Resumo de expressões:
21
Capítulo 3 – Treinamento em C
– Outro exemplo:
int a, b;
float c;
a = b = 2;
c = 10 + ( (float) a/b); //sem casting c seria inteiro
22
Capítulo 3 – Treinamento em C
• Vetores e matrizes:
int valores [3]={0,1,2}; /*vetor com 3 (de 0 a 2) inteiros incializados
char nome [5]={‘a’,’l’,’a’,’n’,’\o’};/*vetor com 4 (de 0 a 3) caracteres
e um de final
int16 saldo [6]; /*vetor com 6 valores (de 0 a 5) de 16btis cada sem inicalizacao
int dados [2][3]; /*matriz de 2 linhas e 3 colunas de inteiros
23
Capítulo 3 – Treinamento em C
• STRUCT
struct NOME_DA_ESTRUTURA
{
tipo variavel1;
tipo variavel2;
};
Exemplo:
struct cadastro
{
char nome [30];
char endereco [80];
int idade;
};
struct cadastro cliente1;
cliente1.nome = “Alan”;
cliente1.idade = 20;
24
Capítulo 3 – Treinamento em C
7 – Funções do CCS
7.1 - Manipulação de bit e byte
• BIT_CLEAR(): apaga um bit de uma variável
int teste = 0x2502;
bit_clear(teste, 1); //teste=0x2500
• MAKE8(): lê um dos bytes que compõem uma variável de 16
ou 32 bits
int teste = 0x2502;
int x = make8 (teste, 1); //x=0x25
• BIT_SET(): seta um bit de uma variável
• Outras funções de bit/byte: SHIFT_RIGHT(), SHIFT_LEFT(),
ROTATE_RIGHT(), ROTATE_LEFT(), BIT_TEST(), SWAP(),
MAKE16(), MAKE32() ...
25
Capítulo 3 – Treinamento em C
28
Capítulo 3 – Treinamento em C
30
Capítulo 3 – Treinamento em C
32
Capítulo 3 – Treinamento em C
33
Capítulo 3 – Treinamento em C
• SIN(),ASIN(),SINH() OU COS(),ACOS(),COSH()
valor = sin(3.14);
37
Capítulo 3 – Treinamento em C
• WRITE_PROGRAM_EEPROM() e
READ_PROGRAM_EEPROM(): escreve dado em memória
programa
38
Capítulo 3 – Treinamento em C
40
Capítulo 3 – Treinamento em C