Apostila PIC C v1.2

  • View
    39

  • Download
    7

Embed Size (px)

Text of Apostila PIC C v1.2

  • 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