apostila pic c v1.2
TRANSCRIPT
-
Linguagem C
2011 Prof. Alexandre 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 ... 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) > (rotao binria para direita) ++ (incremento) * (multiplicao) > (maior que) || (ou) = (maior igual) & (e binrio) ^ (ou exclusivo)
-
9
Caracter especial
Funo
\f Limpar display \n Pular linha \\ Barra invertida \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 %li 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 (condio) { intrues; }
else { 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 : instrues;
break; case VALOR2 : instrues;
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_eeprom() Ler rea da ROM de programa
write_program_eeprom()
Gravar algo na rea de ROM de programa (flash)
read_calibration() Funo exclusiva para PIC14000 l dado da memria de calibrao
write_program_memory()
Grava uma seqncia de bytes na memria de programa
read_program_memory()
L uma seqncia de bytes da memria de programa
write_external_memory()
Grava em uma memria externa. Pode depender de implementao.
erase_program_memory()
Apaga uma rea da memria flashROM
setup_external_memory()
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 #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 this 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.
Recursively 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