Você está na página 1de 17

Linguagem C

2011
Prof. Al exandre J. B. S. - V1.2
www.argeek.com.br

SUMRIO
1 PIC 16F877A .................................................................................................................. 3
1.1 Pinagem ............................................................................................................. 3
1.2 Caractersticas eltricas ...................................................................................... 4
1.3 Estrutura interna ................................................................................................. 5
1.4 Memria de dados .............................................................................................. 5
2 CLOCK (CICLOS DE MQUINA) ................................................................................... 6
3 SOFTWARES MPLAB e CCS ........................................................................................ 7
3.1 Instalao do MPLAB e CCS .............................................................................. 7
3.2 Criao de projetos no MPLAB em Linguagem C (CCS) .................................... 7
3.3 Configurao do MPLAB ..................................................................................... 7
3.4 Compilao do programa .................................................................................... 7
3.5 Gravao do programa no PIC ........................................................................... 7
4 FUNES DA LINGUAGEM C PADRO CCS ............................................................. 8
4.1 Declarao de variveis ...................................................................................... 8
4.2 Operadores ......................................................................................................... 8
4.3 Especificadores de formato para o PRINTF ....................................................... 9
5 PRINCIPAIS ESTRUTURAS DA LINGUAGEM C .......................................................... 9
5.1 Estruturas de deciso ......................................................................................... 9
5.2 Estruturas de repetio .................................................................................... 10
6 DESCRIO DAS FUNES EMBUTIDAS NO COMPILADOR PCW ....................... 12
7 DIRETIVAS DO COMPILADOR ................................................................................... 14
8 PRINCIPAIS ERROS DO COMPILADOR CCS ............................................................ 15







3
1 PIC 16F877A

1.1 Pinagem



Figura 1: PIC16F877A.

Tabela 1: Significado das nomenclaturas utilizadas na identificao dos pinos.

Nome do Pino
Nm.
Pino
I/O/P Tipo Descrio
OSC1/ CLKIN 13 I ST/ CMOS
(4) Entrada para cristal.
Entrada para osciladores externos (hbridos ou RC).
OSC2/ CLKOUT 14 O -
Sada para cristal. Os cristais ou ressonadores devem ser ligados
aos pinos OSC1 e OSC2.
Sada com onda quadrada em da freqncia imposta em OSC1
quando em modo RC. Essa freqncia equivale aos ciclos de
mquina internos.
MCLR/ VPP 1 I/P ST
Master Clear (reset) externo. O microcontrolador s funciona quando
este pino encontra-se em nvel alto.
Entrada para tenso de programao (13V).
VSS 12/ 31 P - GND.
VDD 11/ 32 P - Alimentao positiva.

RA0/ AN0
RA1/ AN1
RA2/ AN2/ VREF- /
CVREF
RA3/ AN3/ VREF+

RA4/ T0CKI/ C1OUT

RA5/ SS/ AN4/
C2OUT

2
3
4

5

6


7

I/O
I/O
I/O

I/O

I/O


I/O

TTL
TTL
TTL

TTL

TTL


TTL
PORTA (I/Os digitais bidirecionais e sistema analgico):
RA0: I/O digital ou entrada analgica AN0.
RA1: I/O digital ou entrada analgica AN1.
RA2: I/O digital ou entrada analgica AN2 ou tenso negativa de
referncia analgica.
RA3: I/O digital ou entrada analgica AN3 ou tenso negativa de
referncia analgica.
RA4: I/O digital (quando sada open drain, isto , no consegue
impor nvel alto) ou entrada externa do contador RMR0 ou sada do
comparador 1.
RA5: I/O digital ou entrada analgica AN5 ou habilitao externa
(slave select) para comunicao SPI ou sada do comparador 2.



RB0/ INT
RB1
RB2
RB3/ PGM

RB4
RB5
RB6/ PGC

RB7/ PGD



33
34
35
36

37
38
39

40



I/O
I/O
I/O






I/O



TTL/ ST
(1)
TTL
TTL
TTL

TTL
TTL
TTL/ ST
(2)

TTL/ ST
(2)

PORTB (I/Os digitais bidirecionais). Todos os pinos deste PORT
possuem pull-up interno que podem ser ligados/ desligados pelo
software:
RB0: I/O digital com interrupo externa.
RB1: I/O digital.
RB2: I/O digital.
RB3: I/O digital ou entrada para programao em baixa tenso (5V).
RB4: I/O digital com interrupo por mudana de estado.
RB5: I/O digital com interrupo por mudana de estado.
RB6: I/O digital com interrupo por mudana de estado ou clock da
programao serial ou pino de in-circuit debugger.
RB7: I/O digital com interrupo por mudana de estado ou data da
programao serial ou pino de in-circuit debugger.
PORTC (I/Os digitais bidirecionais):


4
RC0/ T1OSO/ T1CKI
RC1/ T1OSI/ CCP2
RC2/ CCP1

RC3/ SCK/ SCL

RC4/ SDI/ SDA

RC5/ SDO
RC6/ TX/ CK

RC7/ RX/ DT
15

16

17

18

23

24
25

26

I/O

I/O

I/O

I/O

I/O

I/O
I/O

I/O
ST

ST

ST

ST

ST

ST
ST

ST
RC0: I/O digital ou sada do oscilador externo para TMR1 ou entrada
de incremento para TMR1.
RC1: I/O digital ou entrada do oscilador externo para TMR1 ou
entrada do Capture2 ou sadas para Capture2/ PWM2.
RC2: I/O digital ou entrada do Capture1 ou sadas para Capture1/
PWM1.
RC3: I/O digital ou entrada/ sada de clock para comunicao serial
SPI/ IC.
RC4: I/O digital ou entrada de dados para SPI ou via de dados
(entrada/ sada) para IC.
RC5: I/O digital ou sada de dados para SPI.
RC6: I/O digital ou TX (transmisso) para comunicao USART
assncrona ou clock para comunicao sncrona.
RC7: I/O digital ou RX (recepo) para comunicao USART
assncrona ou data para comunicao sncrona.


RD0/ PSP0
RD1/ PSP1
RD2/ PSP2
RD3/ PSP3
RD4/ PSP4
RD5/ PSP5
RD6/ PSP6
RD7/ PSP7


19
20
21
22
27
28
29
30


I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O


TTL/ ST
(3)
TTL/ ST
(3)
TTL/ ST
(3)
TTL/ ST
(3)
TTL/ ST
(3)
TTL/ ST
(3)
TTL/ ST
(3)
TTL/ ST
(3)

PORTD (I/Os digitais bidirecionais) ou porta de comunicao
paralela:
RD0: I/O digital ou dado 0 (comunicao paralela).
RD1: I/O digital ou dado 1 (comunicao paralela).
RD2: I/O digital ou dado 2 (comunicao paralela).
RD3: I/O digital ou dado 3 (comunicao paralela).
RD4: I/O digital ou dado 4 (comunicao paralela).
RD5: I/O digital ou dado 5 (comunicao paralela).
RD6: I/O digital ou dado 6 (comunicao paralela).
RD7: I/O digital ou dado 7 (comunicao paralela).

RE0/ RD/ AN5

RE1/ WR/ AN6

RE2/ CS/ AN7

8

9

10

I/O

I/O

I/O

TTL/ ST
(3)

TTL/ ST
(3)

TTL/ ST
(3)

PORTE (I/Os digitais bidirecionais e sistema analgico):
RE0: I/O digital ou controle de leitura da porta paralela ou entrada
analgica AN5.
RE1: I/O digital ou controle de escrita da porta paralela ou entrada
analgica AN6.
RE2: I/O digital ou habilitao externa da porta paralela ou entrada
analgica AN7.

Legenda
I Entrada (Input)
O Sada (Output)
I/O Entrada ou sada (Input/ Output)
P Power (alimentao)
- No utilizado
TTL Entrada tipo TTL
ST Entrada tipo Schimitt Trigger
Notas:
(1)
Esta entrada do tipo ST, somente quando configurado como interrupo externa.
(2)
Esta entrada do tipo ST, somente durante o modo de programao serial.
(3)
Esta entrada do tipo ST, quando configurado como I/O de uso geral e TTL quando usado em
modo de porta paralela.
(4)
Esta entrada ST, quando em modo RC e CMOS nos demais casos.

1.2 Caractersticas eltricas

Tabela 2: Caractersticas eltricas do PIC16F877A.

Temperatura de trabalho -55C at 125C
Temperatura de armazenamento -65C at 150C
Tenso de trabalho 4,0V a 5,5V
Tenso mxima no pino VDD (em relao ao VSS) -0,3V at 7,5V
Tenso mxima no pino MCRL (em relao ao VSS) 0 at 14V
Tenso mxima no pino RA4 (em relao ao VSS) 0 at 8,5V
Tenso mxima nos demais pinos (em relao ao VSS) -0,3V at (VDD + 0,3V)
Dissipao mxima de energia 1,0W
Corrente mxima de sada no pino VSS 300mA
Corrente mxima de entrada no pino VDD 250mA
Corrente mxima de entrada de um pino (quando em VSS) 25mA
Corrente mxima de sada de um pino (quando em VDD) 25mA
Corrente mxima de entrada do PORTA, PORTB e PORTE combinados 200mA
Corrente mxima de sada do PORTA, PORTB e PORTE combinados 200mA
Corrente mxima de entrada do PORTC e PORTD combinados 200mA
Corrente mxima de sada do PORTC e PORTD combinados 200mA






5
1.3 Estrutura interna



Figura 2: Diagrama interno do PIC 16F877A.

1.4 Memria de dados



Figura 3: Memria de dados do PIC16F877A.


6
2 CLOCK (CICLOS DE MQUINA)



Figura 4: Cristal e Ressonador.

Nos microcontroladores PIC, o sinal do clock internamente dividido por quatro. Portanto,
para um clock externo de 4 MHz, temos um clock interno de 1 MHZ e, consequentemente, cada
ciclo de mquina dura 1 s.



Figura 5: Esquema dos Ciclos de Mquina.

























7
3 SOFTWARE MPLAB E CCS

3.1 Instalao do MPLAB e CCS

1 - Instalar MPLAB 8.46a. http://www.microchip.com/
2 - Instalar demoupd.exe. http://www.ccsinfo.com/
3 - Instalar pcwhdupd.exe.
4 - Instalar pcdideupd.exe.
5 - Colocar serial.

3.2 Criao de projetos no MPLAB em Linguagem C (CCS)

I - Crie uma pasta com o nome do projeto na Unidade (C:).
II - Coloque o cdigo fonte ex.: botao_led.c dentro da pasta.

1 - Abra o programa MPLAB IDE.
2 - No menu, clique em PROJECT PROJECT WIZARD AVANAR.
3 - Selecione o Modelo do PIC: ex.: PIC16F877A AVANAR.
4 - Selecione o compilador CCS C Compiler for PIC... AVANAR.
5 - Clique BROWSE, digite o nome do projeto SALVAR na pasta do projeto criado no item I
AVANAR.
6 - Selecione o arquivo ex.: botao_led.c ADD AVANAR CONCLUIR.

3.3 Configurao do MPLAB

1 - No menu, clique em VIEW, deixe selecionado PROJECT e OUTPUT.
2 - Na janela aberta do pr ojeto, clique duas vezes no cdigo fonte ex.: botao_led.c dentro da
pasta SOURCE FILES. (abrir o cdigo fonte)
3 - Com o boto direito do Mouse clique no cdigo fonte aberto e selecione PROPERTIES...
4 - No menu GENERAL, verifique a opo USE TABBED WINDOW e deixe selecionada.
5 - No menu C FILE TYPES, verifique as opes LINE NUMBERS e AUTO INDENT e deixem
selecionadas.
6 - No altere as outras opes, clique OK.

3.4 Compilao do programa

1 - No menu, clique em PROJECT BUILD ALL ou MAKE.
2 - Outra opo apertar o boto F10 do teclado.

3.5 Gravao do programa no PIC

1 - Conectar os cabos do gravador, simulador e a fonte de energia.
2 - Selecionar o gravador: No menu PROGRAMMER SELECT PROGRAMMER 1
PICSTART PLUS.
3 - Habilitar o gravador: No menu PROGRAMMER ENABLE PROGRAMMER.
4 - Apagar a memria do PIC: No menu PROGRAMMER ERASE FLASH DEVICE.
5 - Verificar a memria do PIC: No menu PROGRAMMER > BLANK CHECK ALL.
6 - Gravar o PIC: No menu PROGRAMMER PROGRAM.
7 - Verificar a gravao do PIC: No menu PROGRAMMER VERIFY.






8
4 FUNES DA LINGUAGEM C PADRO CCS

Funo Descrio Exemplo
output_high()
Ativa um determinado pino do
microcontrolador
output_high(PIN_D0);
output_high(PIN_C2);
output_low()
Desativa um determinado pino do
microcontrolador
output_low(PIN_D0);
output_low(PIN_C2);


input()


Busca o estado de um pino
if (input(PIN_A1))
{
output_high(PIN_D0);
x = input(PIN_A4);
}
output_a() Envia um byte para o PORT A output_a(VAR1); // envia VAR1 para PORTA
output_b() Envia um byte para o PORT B output_b(0xff); // liga todos bits de PORTB
output_c() Envia um byte para o PORT C output_c(VAR1); // envia VAR1 para PORTC
output_d() Envia um byte para o PORT D output_d(0x00); // desliga todos os bits de PORTD
output_e() Envia um byte para o PORT E output_e(VAR1); // envia VAR1 para PORTE
input_a() Busca um byte do PORT A
int VAR1;
VAR1 = input_a();
input_b() Busca um byte do PORT B
int VAR1;
VAR1 = input_b();
input_c() Busca um byte do PORT C
int VAR1;
VAR1 = input_c();
input_d() Busca um byte do PORT D
int VAR1;
VAR1 = input_d();
input_e() Busca um byte do PORT E
int VAR1;
VAR1 = input_e();



lcd_init()




Inicializa o LCD.
#use delay (clock=4000000)
#define use_portb_lcd true
#include <lcd.c>
...
void main()
{
...
lcd_init();
...
}
lcd_putc()
Envia uma string (seqncia de caracteres)
para o LCD
lcd_putc( \f TESTE);
delay_ms() Causa um atraso em milsimos de segundo
delay_ms(VAR1);
delay_ms(100);
delay_us()
Causa um atraso em milionsimos de
segundo
delay_us(10);
delay_us(VAR1);


printf()

Cria uma sada formatada, geralmente
utilizada para exibir dados das variveis no
LCD
float VAR1;
int VAR2;
long VAR3;
printf(lcd_putc, \f TESTE %f, VAR1);
printf(lcd_putc,\fTESTE\n %lu %f, VAR3, VAR1);

4.1 Declarao de variveis

Tipos de dados
Tamanho em
bits
Descrio exemplo
int 8 variveis inteiras sem sinal, capacidade de 0 a 255 int X, Y=1, VAR1=0;
signed int 8 variveis inteiras com sinal, capacidade de 128 a 127 signed int VAR3 = -10;
long 16 variveis inteiras sem sinal, capacidade de 0 a 65535 long A, B = 0, VAR2;
signed long 16 variveis inteiras com sinal, capac. de 32768 a 32767 signed long GRAU=0;
float 32 variveis reais com sinal. Representao aproximada. float VAR4, VAR5;
short
ou
boolean

1
variveis lgicas, de um bit, podendo valer 0 ou 1 boolean FLAG1=0, SENSOR;
short CHAVE;
int32 32
variveis inteiras sem sinal, podendo valer de 0 a
4294967295
int32 CONTADOR;
signed int32 32
variveis inteiras com sinal, podendo armazenar valores
de -2147483648 a 2147483647
signed int32 VAR10;
char 8 variveis que armazenam caracteres em forma de bytes. char C = a, LETRA = , H;
OBS: Os tipos de dados int e long podem assumir outras configuraes em outros tipos de processadores. Ex: em um
processador de 16 bits, o tipo de dado INT assume 65536 possibilidades diferentes.

4.2 Operadores

+ (adio) == (igual) <= (menor igual) | (ou binrio) = (atribuio)
- (subtrao) != (diferente) && (e) >> (rotao binria para direita) ++ (incremento)
* (multiplicao) > (maior que) || (ou) << (rotao binria para esquerda) -- (decremento)
/ (diviso) < (menor que) ! (negao) ~ (negao binria)

% (resto diviso) >= (maior igual) & (e binrio) ^ (ou exclusivo)



9






Caracter
especi al
Funo
\f Limpar displ ay
\n Pular li nha
\\ Barra i nvertida
\0 Null

Especificador Tipo
%u int ou short
%i ou %d signed int

4.3 Especificadores de formato para o PRINTF

Especificador de formato o smbolo que indica em uma string utilizada no comando
PRINTF, a posio e o formato onde ser impresso o valor da varivel.

%lu long ou int32
%l i ou %ld signed long
%X int em hexadec.
%f Float
%c Caractere
%s String
%e float (not.cientf.)
%lx long hex
%% smbolo %
%3u int (3 casas)
%03u int (3 dgitos c/ zeros esq.)
%1.2f float (2 casas dec.)

Exemplos de uso :
int vlr;
....
printf(lcd_putc, \f Valor: %u , vlr);


float a, b; int c;
...
printf(lcd_putc, \fCont: %u \nX:%1.2f Y:%1.2f , c, a, b);




5 PRINCIPAIS ESTRUTURAS DA
LINGUAGEM C

5.1 Estruturas de deciso



if (condio)
{
instrues;
}














if (condi o)
{
intrues;
}
el se
{
instrues;
}


10




5.2 Estruturas de repetio



while(condio); While vazio. Muito til quando e deseja
reter o programa at que uma
condio ocorra.
A condio entre os parnteses indica a
condio na qual o sistema ficar retido.
Lembre que WHILE significa
ENQUANTO. O PONTO e VRGULA
identificam o lao vazio.






while (condio)
{
....;
....;
}

// enquanto a condio for
// verdadeira, sero executadas
// as instrues entre as chaves
// ou a instruo seguinte no caso
// de no existirem as chaves.













While (condio)
{
....;
if (condio)
continue; // volta p/ inicio do
while
....;
if (condio)
{
...;
break; // interrompe o while
}
}


11






















































do {
...;
} while (condio);




do / while significa faa / enquanto.

Ao contrrio do while, o do/while permite
que o bloco seja executado ao menos
uma vez.














for (inicializ ; condio ; incrm)
...;
}




O for geralmente utilizado para se
repetir um determinado bloco baseado na
contagem (incremetal ou
decremental) de uma varivel de tipo
inteiro (int, long, int32, etc...)

Inicializ: comando a ser executado antes
da primeira interao do lao. Condio:
situao para continuar o lao.
Incrm: incremento ou decremento da
varivel de controle.







switch (varivel)
{
case VALOR1 : i nstrues;
break;
case VALOR2 : i nstrues;
break;
default : instrues;
}







12
6 DESCRIO DAS PRINCIPAIS FUNES EMBUTIDAS NO
COMPILADOR PCW

FUNES DE I/O VIA RS232
getc() ou getchar(); Busca caractere via porta serial
putc() ou putchar(); Envia caractere via porta serial
fgetc();
Busca caractere em um
dispositivo
gets(); Envia uma string pela porta serial
puts();
Envia seqncia de caracteres
via porta serial
fgets();
Busca uma seqncia de
caracteres via porta serial
fputc();
Envia um caractere a um
dispositivo
fputs();
Envia uma seqncia de
caracteres a um dispositivo
printf();
Imprime uma seqncia formatada
de texto em um dispositivo
kbhit();
Verifica se h caractere
disponvel na entrada serial
fprintf();
Sada formatada para um
dispositivo
set_uart_speed();
Determina velocidade da porta
serial
perror();
Imprime uma mensagem de erro
no dispositivo padro de sada
assert(); Usado para depurao
SPI (I/O 2 fios)
setup_spi(); Inicializa SPI
spi_read(); L da interface serial
spi_write(); Grava na interface serial
spi_data_is_in();
Retorna verdadeiro se existem
dados recebidos pela SPI
ENTRADA E SADA DIGITAL
output_low(); Desativa uma sada
output_high(); Ativa uma sada
output_float();
Habilita o terceiro estado do pino
(coletor aberto)
output_bit();
Envia o valor de um bit para um
pino
input(); L o valor de um pino
output_a(); Envia um byte para o PORTA
output_b(); Envia um byte para o PORTB
output_c(); Envia um byte para o PORTC
output_d(); Envia um byte para o PORTD
output_e(); Envia um byte para o PORTE
input_a(); L um byte do PORTA
input_b(); L um byte do PORTB
input_c(); L um byte do PORTC
input_d(); L um byte do PORTD
input_e(); L um byte do PORTE
port_b_pullups();
Ativa os PULL-Ups de entrada do
portb
set_tris_a();
Define a direo para os pinos do
PORTA
set_tris_b();
Define a direo para os pinos do
PORTB
set_tris_c();
Define a direo para os pinos do
PORTC
set_tris_d();
Define a direo para os pinos do
PORTD
set_tris_e();
Define a direo para os pinos do
PORTE
PWM
setup_ccpX();
Define o modo de operao dos
pinos de PWM
set_pwmX_duty();
Determina o valor do PWM, de 0
a 1023
INTERFACE DE PORTA PARALELA ESCRAVA
(PORTD)
setup_psp() Ativa a porta paralela escrava
psp_input_full()
Verifica o funcionamento do
recurso de porta paralela escrava
psp_output_full()
Verifica o funcionamento do
recurso de porta paralela escrava
psp_overflow()
Verifica o funcionamento do
recurso de porta paralela escrava
I2C
i2c_start() Inicia interface I2C
i2c_stop() Para interface I2C
i2c_read() L byte da interface I2C
i2c_write() Grava byte na interface I2C
i2c_poll() Verifica buffer da interface
PROCESSOR
sleep() Entra em modo SLEEP
reset_cpu()
Reinicia (reseta) o
microcontrolador
restart_cause() Retorna a causa do ltimo reset
disable_interrupts() Desativa interrupes
ext_int_edge()
Configura comportamento da
interrupo por borda
read_bank()
L o valor de um registrador em
um determinado banco
write_bank()
Grava uma informao em uma
posio de memria
label_address()
Endereo ROM representado por
um rtulo
goto_address()
Desvia a execuo para um
endereo ROM
getenv()
Retorna o valor de uma varivel
de ambiente
BIT/BYTE
shift_right() Rola dados para direita.
shift_left() Rola dados para esquerda.
rotate_right() Rotaciona dados para direita.
rotate_left() Rotaciona dados para esquerda.
bit_clear() Limpa um bit de uma varivel
bit_set() Ativa um bit de uma varivel
bit_test() Testa um bit de uma varivel
swap()
Troca os nibbles de uma varivel
de 8 bits
make8() Extrai um byte de uma varivel


13
make16() Extrai uma Word de uma varivel
make32()
Extrai um valor de 32 bits de uma
varivel
ANALOG
setup_comparator() Configura o comparador
setup_adc_ports()
Configura portas usadas pelo
conversor AD
setup_adc() Configura o AD
set_adc_channel() Determina o canal a ser utilizado
read_adc() L valor do canal AD ativado
MATEMTICAS
abs() Retorna valor absoluto
acos() Arco cosseno
asin() Arco seno
atan() Arco tangente
ceil()
Arredonda acima um float para
nmero inteiro.
cos() Cosseno
exp() Calcula funo E de um nmero.
floor()
Arredonda abaixo um float para
nmero inteiro.
labs()
Calcula o valor absoluto de um
long
sinh() Seno hiperblico
log() Logaritmo natural
log10() Logaritmo base 10
pow() Potncia
sin() Seno
cosh() Cosseno hiperblico
tanh() Tangente hiperblica
fabs() Valor absoluto para um float
fmod()
Resto da diviso de ponto
flutuante
atan2() Arco tangente
frexp() Quebra um float
ldexp()
modf()
Quebra um float em inteiro e
decimal
sqrt() Raiz quadrada
tan() Tangente
div()
Diviso retornando quociente e
resto
ldiv()
Diviso de um long retornando
quociente e resto
VOLTAGE REF
setup_vref()
Estabelece tenso de refer. dos
comparadores
STANDARD
atoi() Transforma ASCII em int
atoi32() Transforma ASCII em int32
atol() Transforma ASCII em long
atof() Transforma ASCII em float
tolower()
Transforma letras maisculas em
minsculas
toupper()
Transforma letras minsculas em
maisculas
isalnum() Verifica se uma string numrica
isalpha()
Verifica se uma string
alfabtica
isamoung()
Verifica se um caractere
pertence a uma string
isdigit() Verifica se nmero
islower() Verifica se letra minscula
isspace() Verifica se espao
isupper() Verifica se letra maiscula
isxdigit() Verifica se dgito hexadecimal
strlen()
Retorna comprimento de uma
string
strcpy() Copia uma string
strncpy() Copia com limite de caracteres
strcmp() Compara strings
stricmp()
Compara strings ignorando
maiscula/minscula
strncmp()
Compara com limite de
caracteres
strcat() Concatena strings
strstr()
Procura por uma string dentro de
outra
strchr()
Procura caracteres em uma
string
strrchr()
Procura caracteres em uma
string, de traz para frente.
strtok()
Aponta para prximo caractere
aps separador em uma string
strspn()
Conta caracteres iniciais em
strings
strcspn()
Conta caracteres iniciais em
strings
strpbrk()
Procura primeiro caracter comum
em strings
strlwr()
Converte uma string em
minsculas
sprintf() Imprime (printf) em uma string
isgraph() Testa se caractere grfico
iscntrl() Testa se caractere de controle
isprint() Testa se imprimvel
strtod() Extrai um float de uma string
strtol() Extrai um inteiro de uma string
strtoul() Idem
strncat()
Concatena com limite de
caracteres
strcoll()
Compara caracteres em uma
string
strxfrm()
Compara caracteres em uma
string
setup_timer_x()
Configura funcionamento dos
TIMERS
set_timer_x() Inicializa o TIMER
get_timer_x() Busca valor de um TIMER
setup_counters() Configura contador
setup_wdt() Configura o Watch Dog Timer
restart_wdt() Reinicia o Watch Dog Timer
DELAYS
delay_us()
Causa um atraso (tempo) em
milhonsimos de segundos
delay_ms()
Causa um atraso (tempo) em
milsimos de segundos
delay_cycles()
Causa um atraso em nmero de
ciclos (clock / 4)


14
STANDARD C
memset()
Copiar um conjunto de dados na
memria
memcpy()
Copiar um conjunto de dados na
memria
offsetof()
Retorna valor de deslocamento
de dados na memria
offsetofbit()
Retorna valor de deslocamento
de dados na memria
malloc()
Aloca dinamicamente uma rea
de memria
calloc()
Aloca dinamicamente uma rea
de memria
free()
Libera memria alocada por
malloc ou calloc
realloc() Realoca memria
memmove()
Copiar um conjunto de dados na
memria
memcmp()
memchr()
EEPROM
read_eeprom() Ler um byte da EEPROM
write_eeprom() Gravar um byte na EEPROM
read_program_eepro
m()
Ler rea da ROM de programa
write_program_eepro
m()
Gravar algo na rea de ROM de
programa (flash)
read_calibration()
Funo exclusiva para PIC14000
l dado da memria de
calibrao
write_program_memo
ry()
Grava uma seqncia de bytes
na memria de programa
read_program_memor
y()
L uma seqncia de bytes da
memria de programa
write_external_memor
y()
Grava em uma memria externa.
Pode depender de
implementao.
erase_program_mem
ory()
Apaga uma rea da memria
flashROM
setup_external_memo
ry()
Configura forma de utilizao de
memria externa.
STANDARD C SPECIAL
rand() Gerao de nmero aleatrio
srand()
Define o valor mximo para
gerao de nmero aleatrio

7 DIRETIVAS DO COMPILADOR

#FUSES utilizada para programar as opes da palavra de configurao (configuration word) dos PICs
Opo Descrio
LP Oscilador externo a cristal ou ressoador (< 200 kHz).
RC Oscilador externo (Resistor/ Capacitor).
XT Oscilador externo a cristal ou ressoador.
HS Oscilador externo a cristal ou ressoador (> 4 MHz).
INTRC_OSC_NOCLKOUT Oscilador interno sem sada de clock
INTRC Oscilador interno (4 MHz). *
INTRC_OSCOUT Oscilador interno com sada de clock (1/4 da freqncia). *
INTRC_IO Oscilador interno, OSC1 e OSC2 como E/S. *
WDT Watchdog habilitado.
NOWDT Watchdog desabilitado.
PROTECT Proteo de cdigo habilitada.
PROTECT_75% Proteo ligada para 75% da memria. *
PROTECT_50% Proteo ligada para 50% da memria. *
NOPROTECT Proteo de cdigo desabilitada.
PUT Temporizador de Power-up ligado.
NOPUT Temporizador de Power-up desligado.
BROWNOUT Reset por queda de tenso habilitado. *
NOBROWNOUT Reset por queda de tenso desabilitado. *
MCLR Pino MCLR utilizado para RESET. *
NOMCLR Pino MCLR utilizado como entrada. *
LVP Programao em baixa tenso habilitada *
NOLVP Programao em baixa tenso desabilitada (RB4 = E/S) *
CPD Proteo com senha habilitado.
NOCPD Proteo com senha desabilitado.
WRT Delay para iniciar. (65 a 62ms)
NOWRT Sem delay para iniciar.
* Esta opo no esta disponvel em todos os dispositivos.

#INCLUDE Insere um arquivo texto externo a partir da posio atual. Exemplo: #include <16f877A.h>
#USE DELAY Informa ao compilador a velocidade de clock do sistema de destino.
#USE FAST_IO Seleciona o modo rpido de entrada e sada.







15
8 PRINCIPAIS ERROS DO COMPILADOR CCS

A #DEVICE required before this line Falta a definio do microcontrolador utilizado atravs da diretiva DEVICE. Esta
diretiva j est declarada nos arquivos de include relativos ao microcontrolador
utilizado.
A numeric expression must appear
here
O ponto do programa pede um cdigo executvel. Verifique se no est sendo feita a
declarao de uma varivel aps uma linha de cdigo executvel. Se isso ocorrer,
inverta a ordem, fixando a declarao de todas as variveis no incio da funo.
Bad expression syntax Mensagem de erro genrica para alerta de erro de sintaxe.
Cannot change device type thi s far
into the code
Aps uma linha de gerao de cdigo no mais permitida a definio do dispositivo
(diretiva DEVICE). Veja se no h linhas de programa ates do primeiro include. Este
erro tambm comum caso um arquivo tipo HEADER (como o 16f877.h) tenha seu
contedo alterado inadequadamente. Tente mudar o arquivo de include ou declarar a
linha de DEVICE em um ponto mais prximo do incio do arquivo de programa.
Constant out of the valid range O valor da constante est alm da capacidade de seu destino. Por exemplo, est se
atribuindo o valor 500 a uma varivel do tipo INT de 8 bits, que s suporta dados at
255.
Duplicate case value H uma dupla ocorrncia de um mesmo CASE em uma estrutura SWITCH.
Duplicate DEFAULT statements Foi encontrada uma segunda ocorrncia da clusula DEFAULT dentro de um mesmo
SWITCH.
Duplicate #define #define duplicado ou j declarado
Duplicate function Dupla implementao de uma funo. Cada funo deve ter um nome nico.
ELSE with no corresponding IF Encontrado um ELSE sem um IF correspondente. Veja se no foi adicionado
acidentalmente um ponto e vrgula na linha do IF deste ELSE. Lembre que um IF no
pode ter ponto e vrgula.
Expect ; Verifique a falta de um ponto e vrgula. Geralmente o erro apontado aps a linha que
est com o erro de pontuao.
Expect } Verifique a falta de um fechar chaves. Lembre que cada abrir chaves deve possuir um
fechar chaves correspondente. Recomenda-se o correto alinhamento para facilitar
visualizao.
Expect comma Verifique a falta de uma vrgula
Expect WHILE Verifique a falta de um WHILE aps o uso de um DO {}
Expecting : Verifique a falta de dois pontos
Expecting = Verifique a falta de um sinal de atribuio
Expecting a ( Verifique a falta de um abrir parnteses
Expecting a , or ) Verifique a falta de uma vrgula ou fechar parnteses
Expecting a , or } Verifique a falta de uma vrgula ou de um fechar chaves
Expecting a . Verifique a falta de um ponto
Expecting a ; or , Verifique a falta de um ponto e vrgula ou de uma vrgula
Expecting a ; or { Verifique a falta de um ponto e vrgula ou de um fechar chaves
Expecting a close paren Verifique a falta de um fechar parnteses
Expecting a declaration Esperando uma declarao. Geralmente pode ocorrer por algum erro de pontuao
anterior.
Expecting a variable Esperando uma varivel.
Expecting a ] Esperando um fechar colchetes
Expecting a { Esperando um abrir chaves
Expecting an = Esperando um sinal de atribuio
File cannot be opened Verifique o nome e o caminho do arquivo. (se o include estiver certo)
Filename must start with " or < Verifique a sintaxe do INCLUDE.
Identifier is already used in this
scope
um aviso que voc est tentando usar um nome para a funo ou varivel que j
existe ou j foi utilizado neste programa.
No MAIN() function found Verifique se voc criou a funo principal: void main()
Not enough RAM for all variables Significa que existem muitas variveis para pouca memria RAM. Use tipos de dados
mais econmicos, menos variveis globais e mais variveis locais.
Out of ROM, A segment or the
program is too large
O programa ficou muito grande para a memria ROM. Isso pode ser gerado tambm
por uma string muito longa, ou pelo esquecimento de um fechar aspas. Caso
realmente esteja com problemas de falta de ROM, use a diretiva #separate antes de
algumas subrotinas para usar pginas de ROM diferentes em cada etapa do programa.
Printf format type is invalid Veja se voc est usando o especificador de formato correto. Para uma varivel do
tipo SHORT ou INT, use %u ou %i (%i para valores com sinal). Para variveis do tipo
LONG ou INT32, use %lu ou %li. Para float, use %f... para outros tipos
ou especificadores, consulte a tabela.
Printf format (%) invalid Voc usou um especificador de formato invlido. (leia o item anterior desta tabela)
Printf variable count (%) does not
match actual count
No printf devem existir menos especificadores de formado do que as variveis que
devem ser exibidas.
Recursion not permitted Devido a escassez de recursos de pilha, o compilador impede o uso de recurso para
o PIC
Verifique se voc no est chamando a funo de dentro dela mesma, ou
gerando ciclos de chamadas recorrentes.
Recursivel y defined structures not
permitted
String too long Uma seqncia de caracteres muito longa, ou voc esqueceu de fechar aspas
duplas em alguma linha.
Undefined identifier Identificador no declarado. Veja se voc declarou a varivel que est usando.
Undefined label that was used in a
GOTO
GOTO para um rtulo no declarado ou invlido.
Unknown device type No conhece o dispositivo usado pela diretiva DEVICE