You are on page 1of 30

Guilherme Bragana

Introduo
A criao de programas para microcontroladores pode ser uma tarefa complexa medida que aumenta o tamanho do sistema a ser controlado. A princpio, as rotinas para microcontroladores eram escritas em ASSEMBLY. A linguagem Assembly uma forma de representao dos cdigos de mquina usando mnemnicos, abreviaes usuais da operao efetuada pelo processador em cdigo de mquina. Assim, em vez de escrevermos o comando em cdigo de mquina 0011000010001100, o programador apenas escreve o comando assembly MOVLW 0x8C (mover o valor hexadecimal 0x8C para o acumulador W) para realizar a mesma tarefa. Sem dvida a linguagem Assembly facilitou a vida dos programadores, mas no resolveu todos os problemas. A linguagem C, assim como outras de alto nvel, utiliza a filosofia de programao estruturada, onde os comandos, rotinas ou programas so divididos em mdulos independentes entre si e com o objetivo de realizar uma determinada tarefa. Assim, cada funo em C corresponde a um bloco de comandos em Assembly, e estes blocos so montados de forma inteligente pelo compilador, de forma a construir um cdigo de mquina rpido e eficiente que ser gravado posteriormente no microcontrolador.

Programao de Microcontroladores em C
Atualmente a maioria dos fabricantes de uCtrl (vamos chamar o Microcontroladores assim) possuem compiladores de linguagem C para desenvolvimento das rotinas. A construo de rotinas em C permite grande complexidade de programas e criao rpida de novos projetos, o que permite alm de baratear custos com desenvolvimento, adaptar programas de um sistema para outro com pouco esforo. Devido proximidade com o hardware e o Assembly, a linguagem C muito eficiente. Eficincia o grau de inteligncia que o compilador traduz um programa em cdigo de mquina. Quanto menor e mais rpido, maior a eficincia e melhor o compilador. O aspecto da eficincia muito importante quando tratamos de uCtrl cujos recursos so limitados como no caso do PIC 16F628A, que dispomos de 2048 palavras de memria de programa, 224 bytes e memria RAM e 128 bytes de EEPROM. Nesses casos, imprescindvel um compilador eficiente e economia de memria.

Princpios de Programao
Antes de comear o estudo da linguagem direcionada ao uso em uCtrl, preciso lembrar conceitos bsicos de programao. Precisamos fazer um breve estudo sobre termos como lgebra booleana, algoritmos e outros princpios de programao. A tarefa de programao constitui basicamente um processo de identificao e soluo de problemas. Para isso o programador pode utilizar 5 procedimentos bsicos: 1) Exposio do Problema: o programador deve descrever detalhadamente o problema a ser resolvido pelo programa. 2) Anlise da Soluo: se o problema conhecido, o programador deve elaborar as solues que melhor resolvem o problema em questo. 3) Codificao da Soluo: descrio sequencial passo a passo da soluo que melhor resolve o problema. A isto se d o nome de algoritmo. 4) Traduo do Cdigo: com a sequncia de comandos pronta, necessrio traduzi-la em cdigo da linguagem utilizada a fim de construir a rotina que ir comandar o microcontrolador. 5) Depurao: este processo verifica os possveis erros do cdigo, e pode ajudar o programador a melhorar a eficincia da rotina. Dependendo da complexidade do programa a ser construdo, pode ser necessrio utilizar alguns artifcios de programao: Um conjunto de comandos usados repetidamente pode ser codificado separadamente formando uma funo. Assim o programador pode executar todos os comandos toda vez que for necessrio apenas chamando a funo dentro do programa principal. Isso acontece muito com a funo delay_ms(x). Um conjunto de comandos executados muitas vezes na mesma sequncia pode ser definido como um LOOP. Existem varias formas de execuo de LOOP. Normalmente em um programa necessrio testar condies de igualdade. A codificao dos testes condicionais, baseados na lgebra Booleana, tambm obedece a algumas regras que veremos adiante.

Durante a fase de Codificao o programador pode utilizar programas de computador denominados Geradores de Programa. Estes programas so classificados em duas categorias: Interpretadores e Compiladores. As linguagens interpretadas so aquelas em que a construo do cdigo que ser gravado no microcontrolador feita em tempo real. Isso significa que essas linguagens podem ter uma execuo mais lenta ou podem ocupar muito espao na memria de programa. Nesse tipo de linguagem cada comando de alto nvel traduzido em uma respectiva sequncia de comandos de baixo nvel pelo programa interpretador. Se um

mesmo comando for utilizado diversas vezes no programa, sero geradas tantas sequncias de comando de baixo nvel quanto forem as aparies do comando de alto nvel. Nos compiladores acontece de forma diferente. Compiladores so programas altamente complexos e utilizam diversos artifcios para a otimizao do cdigo gerado, tanto em funo do espao na memria de programa ocupado quanto na velocidade de execuo. Mesmo quando vrios comandos so escritos repetidamente, o compilador gera uma sequncia de cdigo que ser repetida de forma que o efeito seja igual ao cdigo de alto nvel.

lgebra Booleana
A lgebra booleana baseada em regras e conceitos lgicos simples: proposies e operadores lgicos relacionais. Uma proposio nada mais do que qualquer afirmao verbal passvel de ser classificada como sendo verdadeira ou falsa. Duas ou mais proposies podem ser relacionadas com o uso de operadores lgicos relacionais E (and), OU (or) e NO (not). O operador relacional E (and) usado para conectar duas ou mais proposies, resultando na Conjuno. A Conjuno de duas ou mais ou mais proposies s ser verdadeira de TODAS as proposies forem verdadeiras. A seguir temos uma tabela verdade da operao booleana E (and). A B C (proposio) (proposio) (conjuno) F F F F V F V F F V V V O operador relacional OU (or) utilizado para relacionar duas ou mais proposies, resultando na Disjuno. A Disjuno de duas ou mais proposies verdadeira se qualquer ou todas as proposies forem verdadeiras. A seguir temos uma tabela verdade da operao booleana OU (or).

A B C (proposio) (proposio) (disjuno) F F F F V V V F V V V V O operador relacional NO (not) utilizado para negar ou inverter uma proposio, fazendo com que ela tenha sentido oposto ao original. Se uma proposio verdadeira, depois da operao NO (not) esta passa a ser falsa. Em seguida temos uma tabela verdade para a funo NO (not).

A C (proposio) (proposio negada) F V V F Estas so as principais operaes booleanas utilizadas com lgica em microcontroladores. Existem outras operaes como OU EXCLUSIVO (xor) tambm usadas, mas seu uso pouco comum. Mais frente, veremos as funes do compilador usado e estas outras operaes sero mencionadas de forma rpida, pois est subentendido o conhecimento prvio das operaes booleanas.

Variveis e Dados
Varivel uma representao de um elemento pertencente a um conjunto. As variveis so armazenadas na memria e podem assumir um valor dentro de um conjunto de valores possveis. Quando precisamos armazenar um valor vindo do exterior do uCtrl ou do prprio programa, utilizaremos uma varivel. As variveis podem ser armazenadas na memria RAM ou na memria EEPROM. Elas so criadas pelo programa e alocadas pelo compilador. Elas podem assumir valores diferentes e podem ser modificadas em qualquer momento, mas no podem ser relembradas caso haja falta de energia no uCtrl. Somente a memria EEPROM salva os valores das variveis e retm esses valores mesmo com falta de energia. As variveis so classificadas segundo o tipo de contedo que armazenam: numrico, caractere, alfanumrico e lgico. Variveis inteiras armazenam nmeros inteiros. Variveis de Ponto Flutuante armazenam nmeros reais. As variveis de ponto flutuante podem ocupar mais posies de memria do que as variveis inteiras.

Operadores
Normalmente, durante um programa, precisamos relacionar variveis. Os Operadores so smbolos grficos utilizados para relacionar as variveis. Podem ser dos tipos: Matemticos: utilizados para efetuar operaes matemticas. Soma, Subtrao, Multiplicao, Diviso, etc. Relacionais: utilizados para relacionar variveis. Maior, Menor, Igual, etc. Lgicos: utilizados para efetuar operaes booleanas entre variveis. Resultam em Verdadeiro (1) ou Falso (0). Lgicos bit a bit: utilizados para efetuar operaes booleanas bit a bit entre variveis. Resulta em uma varivel. Memria: utilizados para operaes em relao memria do uCtrl. Exemplo: atribuio (=)

Tipos de Dados especficos do Compilador CCS C


int1: declara variveis de 1 bit. (equivale ao short int) boolean: declara variveis de 1 bit (equivale ao short int e ao int1) int8: declara variveis de 8 bits (equivale ao int) byte: declara variveis de 8 bits (equivale ao int e int8) int16: declara variveis de 16 bits (equivale ao long int) int32: declara variveis de 32 bits.
A seguir temos uma tabela com os tipos de dados disponveis no Compilador CCS C

Tipo Tamanho em Bits Faixa de Valores short int, int1, boolean 1 0 ou 1 char 8 0 a 255 signed char 8 -128 a 127 unsigned char 8 0 a 255 int, int8, byte 8 0 a 255 signed int, signed byte 8 -128 a 127 unsigned int, unsigned byte 8 0 a 255 long int, int16 16 0 a 65535 signed long int 16 -32768 a 32767 unsigned long int 16 0 a 65536 int32 32 0 a 4294967295 signed int32 32 -2147483648 a 2147483647 Float 32 1,18-38 a 3,4+38

Converso de Tipos de Variveis


Sempre que tivermos uma expresso composta por dados de tipos diferentes entre si, ser aplicada a chamada converso de tipos. As regras de converso de tipos em C so basicamente trs: 1. Em uma atribuio, o tipo do dado resultante da expresso convertido no tipo de dado da varivel que recebe a atribuio; 2. Todos os tipos short int e char so convertidos no seu tipo base imediatamente superior, ou seja, int; 3. Cada par de operadores de tipos diferentes convertido no tipo base do tipo superior, o que tambm chamado de proporo de tipos. Nas atribuies, a converso depende basicamente de a varivel-alvo da atribuio ser de maior ordem ou no que o tipo resultante da expresso. A tabela mostra a forma de converso para cada tipo de dado envolvido em uma atribuio.
Tipo da Expresso short int char, int, long int, int32 char, int long int, int32 int32 int32 float float float float signed unsigned Tipo da Varivel Alvo char, int, long int, int32 short int long int, int32 char, int long int float short int char, int long int int32 unsigned signed Resultado Somente o bit 0 utilizado; os outros bits so zerados. O bit 0 do resultado da expresso armazenado na varivel; os outros bits so descartados. O byte LSB da varivel assume o resultado da expresso; a parte MSB zerada. Os 8 LSB do resultado da expresso so armazenados na varivel; os outros so descartados. Os 16 LSB do resultado da expresso so armazenados na varivel; os demais bits so descartados. O valor da expresso truncado para o armazenamento na varivel float; possvel perda de dados. O LSB da parte inteira do resultado da expresso armazenado na varivel. Os 8 bits LSB da parte inteira do resultado da expresso so armazenados na varivel. Os 16 LSB da parte inteira do resultado da expresso so armazenados na varivel. A parte inteira do resultado da expresso armazenada na varivel. Se o resultado da expresso for negativo, o resultado ser maior que o mdulo do resultado. Se o resultado da expresso for maior que o extremo de faixa do tipo, o resultado ser negativo.

O programador tambm pode forar explicitamente uma expresso a ser de um determinado tipo. Esta operao chama-se Modelagem (ou CAST) e segue a forma: (novo tipo) expresso

Diretivas do Compilador
Todo compilador possui uma lista de comandos internos que so traduzidos em cdigo. Esses comandos so utilizados para especificar determinados parmetros internos utilizados pelo compilador no momento de compilar o cdigo-fonte. O compilador CCS C possui uma grande quantidade de diretivas, que podem ser utilizadas para controlar diversos parmetros, alm de outros usos. As principais Diretivas esto descritas a seguir. Outras Diretivas podem ser encontradas no Manual CCS C.

#BIT A diretiva #BIT utilizada para definir uma abreviao para um bit de uma constante ou varivel j definida anteriormente. Sintaxe: #bit identificador = x.y O identificador especificado utilizado como abreviao para o bit y da varivel ou constante x. O valor de y deve estar entre 0 e 7. Essa diretiva cria uma varivel booleana mapeada diretamente no local especificado, o que til para efetuar o acesso direto a um bit de uma varivel ou registrador interno do PIC.

#DEFINE Utilizada para substituir o identificador pelo texto especificado imediatamente depois dele. Sintaxe: #define identificador texto A diretiva ir substituir todas as aparies do identificador pelo texto especificado.

#ERROR

Fora o compilador a gerar uma condio de erro de compilao. Sintaxe: #error texto Quando a diretiva #error encontrada, o compilador aborta a compilao e apresenta uma mensagem com o texto indicado pelo programador. possvel incluir uma macro no texto da mensagem, situao essa em que o compilador ir expandir o cdigo da macro. Exemplo: #if __device__ == 675 #error Este programa no funciona no 12f675! #endif

#FUSES Esta diretiva utilizada para programar as opes da palavra de configurao (configuration words) dos PICs. Sintaxe: #fuses opes

Na tabela abaixo temos as principais opes disponveis geralmente na configurao dos PICs: Opo LP RC XT HS INTRC INTRC_OSCOUT INTRC_IO WDT NOWDT PROTECT NOPROTECT PUT NOPUT Descrio Oscilador LP. Oscilador RC. Oscilador XT. Oscilador HS. Oscilador interno. Oscilador interno com sada de clock. Oscilador interno, OSC1 e OSC2 como E/S. Watchdog habilitado. Watchdog desabilitado. Proteo de cdigo habilitada. Proteo de cdigo desabilitada. Temporizador de Power-Up ligado. Temporizador de Power-Up desligado.

BROWNOUT NOBROWNOUT MCLR NOMCLR

Reset por queda de tenso habilitado. Reset por queda de tenso desabilitado. Pino MCLR utilizado como RESET. Pino MCLR utilizado como E/S.

#IF, #ENDIF Teste para compilao condicional da diretiva. Sintaxe: #if expresso cdigo #endif Exemplo: #if __device__ == 675 #error Este programa no funciona no 12F675! #endif

#INCLUDE
Insere um arquivo de texto a partir da posio atual. Sintaxe: #include <nome_do_arquivo> #include nome_do_arquivo Na primeira forma, o arquivo descrito ser procurado na pasta de biblioteca do compilador. Na segunda forma, necessrio descrever todo o caminho de diretrio ao qual o arquivo descrito se encontra. Exemplos: #include <16f628a.h> #include d:\projetos\biblio\eeprom.c

#INT_xxx Informa ao programa que a funo seguinte ser utilizada para tratamento de interrupo. Sintaxe: #INT_AD #INT_ADOF #INT_BUSCOL #INT_BUTTON #INT_CCP1 #INT_CCP2 #INT_COMP #INT_EEPROM #INT_EXT #INT_EXT1 #INT_EXT2 #INT_I2C #INT_LCD #INT_LOWVOLT #INT_PSP #INT_RB #INT_RC #INT_RDA #INT_RTCC #INT_SSP #INT_TBE #INT_TIMER0 #INT_TIMER1 #INT_TIMER2 #INT_TIMER3 ADIF converso A/D completa. ADOF Overflow da converso A/D. BCLIF Coliso de barramento I2C. Pushbutton. CCP1IF Mdulo CCP1. CCP2IF Mdulo CCP2. CMIF Comparador analgico. EEIF Escrita na EEPROM. INTF Interrupo externa RB0/INT. INT1F - Interrupo externa INT1. INT2F - Interrupo externa INT2. I2CIF Interrupo do mdulo I2C. LCDIF Interrupo do mdulo LCD. LVDIF Deteco de baixa tenso. PSPIF Chegada de dados no mdulo PSP. RBIF Mudana na porta B RB4 a RB7. Mudana na porta C RC4 a RC7. RCIF Recepo de dados na USART. TOIF Estouro de contagem do Timer 0. SSPIF Atividade de comunicao SPI ou I2C. TXIF Buffer de transmisso vazio. TOIF Estouro de contagem do Timer 0. TMR1IF Estouro de contagem do Timer 1. TMR2IF Estouro de contagem do Timer 2. TMR3IF Estouro de contagem do Timer 3.

Nem todas as interrupes esto disponveis em todos os uCtrl. Consulte o Datasheet para informaes sobre interrupes disponveis.

Exemplo: #int_timer1 void trata_t1(){ x++

} #int_rb void trata_rbif() { y++ }

#USE DELAY (clock = valor) Esta diretiva necessria para a utilizao das funes de atraso de tempo (delay_us() e delay_ms()) e tambm para a rotina de comunicao serial por software. O valor a ser especificado a velocidade de clock em Hertz.

#USE RS232 Ativa o suporte comunicao serial. Sintaxe: #use rs232 (opes) Opo BAUD = valor XMIT = pino RCV = pino RESTART_WDT INVERT PARITY = x BITS = x FLOAT_HIGH ERRORS Descrio Especifica a velocidade de comunicao. Especifica o pino de transmisso de dados. Especifica o pino de recepo de dados. Determina que a funo GETC() reinicie o Watchdog enquanto aguarda a chegada de um caractere. Inverte a polaridade dos pinos de TX/RX. No pode ser utilizada com o hardware interno. Seleciona a paridade (x pode ser: N(sem paridade), E (paridade par) ou O (paridade mpar)). Seleciona o nmero de bits de dados (5 a 9 para o modo por software e 8 a 9 para o modo hardware). A sada no vai a nvel lgico 1. Utilizado com sadas coletor aberto. Solicita ao compilador que armazene os erros de recepo na varivel RS232_ERRORS, reinicializando os flags de erro quando eles ocorrerem. Permite a utilizao das velocidades disponveis com o bit BRGH em 1 em chips que tenham bugs nesta configurao do hardware.

BRGH10K

ENABLE = pino STREAM = identificador

Especifica um pino para atuar como sada de habilitao durante uma transmisso. Utilizado no protocolo RS485. Associa a interface RS232 a um identificador de stream de dados. Os stream de dados so utilizados em algumas funes internas do compilador.

Esta diretiva permite a construo de interfaces seriais por software ou hardware, permitindo a utilizao de funes como printf(), getc() e putc(). Esta diretiva permanece ativa at que outra diretiva #RS232 seja definida. necessrio utilizar a diretiva #USE DELAY antes dessa diretiva. Se forem especificados os pinos da interface SCI interna do dispositivo (normalmente pinos RB2 (TX) e RB1 (RX) nos PIC de 18 pinos e RC6 (TX) e RC7 (RX) de 28 e 40 pinos) e caso ela esteja presente, a diretiva ir utilizar o hardware de comunicao do PIC. Se o compilador no puder obter uma velocidade prxima de 3% do valor desejado, ser emitida uma mensagem de erro. A varivel RS232_ERRORS possui a seguinte formatao: Modo de software: o bit 7 da varivel ir armazenar o nono bit de dados e o bit 6 da varivel indica que no foi possvel colocar a sada em alta impedncia (modo float_high). Modo de hardware: quando utilizado o hardware interno, a varivel conter uma cpia do registrador RCSTA, com exceo do bit 0, que utilizado para indicar erro de paridade.

Exemplo:
#use rs232 (baud = 9600, xmit = PIN_A0, rcv = PIN_A3)

Funes do Compilador
Matemticas

ABS() Retorna o valor absoluto de um nmero. Sintaxe: valor = abs(x) Em que x do tipo signed int de 8, 16 ou 32 bit ou float e valor do mesmo tipo de x. Requisito: #include <stdlib.h>

CEIL() Retorna o menor nmero inteiro que maior que o valor especificado. Sintaxe: valor = ceil(x) Em que x e valor so do tipo float. Requisito: #include <math.h>

FLOOR() Retorna o menor nmero inteiro que no maior que o valor especificado. Sintaxe: valor = floor(x) Em que x e valor so do tipo float. Requisito: #include <math.h>

SIN(), ASIN(), SINH(), COS(), ACOS(), COSH(), TAN(), ATAN(), TANH() Retorna o valor do seno, arco seno, seno hiperblico, cosseno, arco cosseno, cosseno hiperblico, tangente, arco tangente e tangente hiperblica do valor especificado. Sintaxe: valor = sin(x) valor = asin(x) valor = sinh(x) valor = cos(x) valor = acos(x) valor = cosh(x) valor = tan(x) valor = atan(x) valor = tanh(x) Em que x e valor so do tipo float. Na funo seno, cosseno e tangente, x dever ser um ngulo em radianos entre -2 e +2. Na funo arco seno, arco cosseno e arco tangente, x dever ser um valor entre -1.0 e +1.0. Na funo seno hiperblico, cosseno hiperblico e tangente hiperblica, x corresponde a um valor qualquer. O valor retornado pela funo ser: Um valor entre -1.0 e +1.0 no caso da funo seno e cosseno; O valor da tangente; Um ngulo em radianos entre /2 e +/2 no caso da funo arco seno, arco cosseno ou arco tangente; Um valor qualquer no caso do seno hiperblico, cosseno hiperblico ou tangente hiperblica. Requisito: #include <math.h>

EXP()

Calcula o valor de ex. Sintaxe: valor = exp(x) Em que x e valor so do tipo float. O valor aproximadamente igual a 2,718282. Requisito: #include <math.h>

POW() Calcula o valor de xy. Sintaxe: valor = pow(x,y) Em que x, y e valor so do tipo float. Requisito: #include <math.h> SQRT() Calcula a raiz quadrada do valor especificado. Sintaxe: valor = sqrt(x) Em que x e valor so do tipo float. Requisito: #include <math.h>

Atraso

DELAY_CYCLES() Aguarda n ciclos de mquina. Sintaxe: delay_cycles(n) Em que n uma constante de 8 bits.

DELAY_US() Aguarda n microssegundos. Sintaxe: delay_us(n) Em que n uma varivel de 8 bits ou 16 bits.

DELAY_MS() Aguarda n milissegundos. Sintaxe: delay_ms(n) Em que n uma varivel de 8 bits ou 16 bits.

Manipulao de Bit ou Byte

BIT_CLEAR() Apaga um bit de uma varivel. Sintaxe: bit_clear(var,bit) Em que var uma varivel inteira de 8, 16 ou 32 bits e bit um nmero de 0 a 31 especificando qual dos bits da varivel ser apagado.

BIT_SET() Seta um bit de uma varivel. Sintaxe: bit_set(var,bit) Em que var uma varivel inteira de 8, 16 ou 32 bits e bit um nmero de 0 a 31 especificando qual dos bits da varivel ser setado.

BIT_TEST() Testa um bit de uma varivel e retorna o valor do estado do bit. Sintaxe: res = bit_test(var,bit) Em que var uma varivel inteira de 8, 16 ou 32 bits, bit um nmero de 0 a 31 especificando qual dos bits da varivel ser testado e res um valor booleano indicando o estado do bit testado.

Entrada e Sada

OUTPUT_LOW() Coloca o pino especificado em nvel 0. Sintaxe: output_low(pino) Em que pino um identificador de pino do uCtrl.

OUTPUT_HIGH() Coloca o pino especificado em nvel 1. Sintaxe: output_high(pino) Em que pino um identificador de pino do uCtrl.

OUTPUT_FLOAT() Coloca o pino especificado do uCtrl em estado de alta impedncia. Sintaxe: output_float(pino) Em que pino um identificador de pino do uCtrl. OUTPUT_BIT() Coloca o pino especificado do uCtrl em um nvel lgico determinado por um valor booleano. Sintaxe: output_bit(pino,boolean) Em que pino um identificador de pino do uCtrl e boolean um valor ou varivel booleana. INPUT() L o estado lgico de um pino do microcontrolador. Sintaxe:

res = input(pino) Em que pino um identificador de pino do uCtrl e res uma varivel booleana.

OUTPUT_X() Escreve um byte completo em uma determinada porta do uCtrl. Sintaxe: output_x(valor) Em que X a letra que representa a porta do uCtrl (A, B, C, D, E) e valor uma varivel de 8 bits. Nem todos os uCtrl possuem todas as portas implementadas. Consulte o Datasheet para maiores informaes.

INPUT_X() L um byte completo de uma determinada porta do uCtrl. Sintaxe: valor = input_x() Em que valor uma varivel de 8 bits e x uma porta do uCtrl (A, B, C, D, E). Nem todas as portas esto implementadas em todos os uCtrl. Consulte o Datasheet.

SET_TRIS_X() Configura a direo dos pinos de uma porta do uCtrl. Sintaxe: set_tris_x(valor)

Em que valor uma constante ou varivel de 8 bits e X uma porta do uCtrl (A, B, C, D, E). Nem todas as portas esto implementadas em todos os uCtrl. Consulte o Datasheet.

Manipulao de Timers

SETUP_TIMER_0(), SETUP_RTCC() Configura o Timer 0. Sintaxe: setup_timer_0(modo) setup_rtcc(modo) Em que modo uma varivel ou constante de 8 bits. O modo pode ser uma das seguintes constantes: RTCC_INTERNAL Timer 0 com clock interno. RTCC_EXT_L_TO_H Timer 0 com clock externo sensvel borda de subida. RTCC_EXT_H_TO_L Timer 0 com clock externo sensvel borda de descida. RTCC_DIV_2 Prescaler dividindo por 2. RTCC_DIV_4 Prescaler dividindo por 4. RTCC_DIV_8 Prescaler dividindo por 8. RTCC_DIV_16 Prescaler dividindo por 16. RTCC_DIV_32 Prescaler dividindo por 32. RTCC_DIV_64 Prescaler dividindo por 64. RTCC_DIV_128 Prescaler dividindo por 128. RTCC_DIV_256 Prescaler dividindo por256. RTCC_OFF Timer 0 desligado (somente PIC 18). RTCC_8_BIT Timer 0 em modo 8 bit (somente PIC 18). Note que as constantes que configuram o Prescaler podem ser unidas a constantes de configurao do Timer 0 por um operador OU (or |) SETUP_TIMER_1() Configura o Timer 1. Sintaxe: setup_timer_1(modo) Em que modo uma varivel ou constante inteira de 8 bits.

O modo pode ser uma ou mais constantes dos seguintes grupos: T1_DISABLED Desliga o Timer 1. T1_INTERNAL Com clock interno. T1_EXTERNAL Com clock externo assncrono. T1_EXTERNAL_SYNC Com clock externo sncrono. T1_CLOCK_OUT Ativa a sada externa de clock. T1_DIV_BY_1 Prescaler do Timer 1 dividindo por 1. T1_DIV_BY_2 Prescaler do Timer 1 dividindo por 2. T1_DIV_BY_4 Prescaler do Timer 1 dividindo por 4. T1_DIV_BY_8 Prescaler do Timer 1 dividindo por 8. As constantes anteriores podem ser juntadas por meio da operao OU (or |).

SETUP_TIMER_2() Configura o Timer 2 Sintaxe: setup_timer_2(modo,per,ps) Em que modo uma varivel ou constante inteira de 8 bits, per uma varivel inteira de 8 bits e ps um nmero entre 1 e 16. O modo pode ser uma ou mais constantes dos seguintes grupos: T2_DISABLED Desliga o Timer 2. T2_DIV_BY_1 Timer 2 ligado com Prescaler dividindo por 1. T2_DIV_BY_2 Timer 2 ligado com Prescaler dividindo por 2. T2_DIV_BY_4 Timer 2 ligado com Prescaler dividindo por 4. O parmetro per utilizado para especificar um perodo de contagem para o Timer 2. A contagem do temporizador inicia em 0 e cada vez que ele chegar a uma contagem igual ao valor de per, o temporizador ser reiniciado. O parmetro ps utilizado para especificar um valor para o ps-divisor do Timer 2. O nmero programado em ps ser igual ao nmero de reincios do Timer 2, necessrios para gerar uma interrupo (TMR2IF). Isto significa que se for programado um ps=2, a cada dois reincios de contagem do Timer 2, ser gerada um interrupo.

SET_TIMERX() Modifica o contedo de um Timer interno. Sintaxe:

set_rtcc(valor) set_timerx(valor) Em que valor uma varivel ou constante de 8 ou 16 bits e X o indicador do Timer correspondente (0, 1, 2). O valor a ser escrito depende do tipo de Timer e do modelo do PIC em questo. Consulte o Datasheet.

GET_TIMERX() Le o contedo de um Timer interno. Sintaxe: valor = get_rtcc() valor = get_timerx() Em que valor uma varivel ou constante de 8 ou 16 bits e X o indicador do Timer correspondente (0, 1, 2). O valor a ser escrito depende do tipo de Timer e do modelo do PIC em questo. Consulte o Datasheet.

Mdulo PWM
SETUP_CCPX() Configura o funcionamento do mdulo CCP. Sintaxe: setup_ccp1(modo) setup_ccp2(modo) Em que modo uma varivel ou constante inteira de 8 bits. As constantes definidas para a configurao do modo so: CCP_OFF Mdulo CCP desligado. CCP_PWM Configura o modo de gerao de sinal PWM. Exemplo: setup_ccp1(ccp_pwm);

SET_PWMX_DUTY()

Configura o ciclo ativo do mdulo CCP no modo PWM. Sintaxe: set_pwm1_duty(valor) set_pwm2_duty(valor) Em que valor uma varivel ou constante inteira de 8 ou 16 bits.

Comunicao Serial Assncrona

GETC(), GETCH(), GETCHAR() Aguarda a chegada de um caractere pela porta serial padro e retorna o seu valor. Sintaxe: valor = getc() valor = getch() valor = getchar() Em que valor um valor inteiro de 8 bits. A funo GETC() aguarda a chegada de um caractere pela linha serial. Caso seja utilizada a USART interna, esta funo pode retornar imediatamente caso existam caracteres no buffer de recepo (que pode armazenar at 3 caracteres). Observe que no caso da no utilizao da USART interna, somente pode ocorrer a recepo de um caractere durante a execuo da funo. O caractere recebido retornado pela funo. Requisito: #use rs232 PUTC(), PUTCHAR() Escreve um caractere na sada serial padro. Sintaxe: putc(dado) putchar(dado) Em que dado um valor inteiro de 8 bits. Requisito: #use rs232

PRINTF() Imprime um dado na sada serial padro. Sintaxe: printf(dado) Em que dado uma ou mais variveis de 8, 16 ou 32 bits. Esta funo pode ser utilizada para escrever outros tipos de dados que no sejam simples caracteres. Para isso, o argumento dado deve conter os cdigos de formatao necessrios impresso correta do tipo de dado desejado. Os cdigos de formatao obedecem ao formato %wt, em que w um nmero opcional para indicar o nmero de caracteres a serem impressos e t pode ser uma das seguintes opes: c s u x x d e f Lx Lx Lu Ld % Caractere. String. Inteiro sem sinal Inteiro em formato hexadecimal com letras minsculas. Inteiro em formato hexadecimal com letras maisculas. Inteiro com sinal. Ponto flutuante em formato exponencial. Ponto flutuante em formato decimal. Hexadecimal longo (16 ou 32 bits) com letras minsculas. Hexadecimal longo (16 ou 32 bits) com letras maisculas. Decimal longo (16 ou 32 bits) sem sinal. Decimal longo (16 ou 32 bits) com sinal. Smbolo de porcentagem.

O argumento w funciona da seguinte forma: Um nmero simples, indica o nmero de caracteres a serem impressos. Se o dado a ser impresso tiver menos caracteres que o nmero especificado, sero adicionados espaos. Um nmero precedido de 0 funciona da mesma forma descrita anteriormente, com a diferena de que em vez de serem adicionados espao, so adicionados zeros esquerda do nmero. Um nmero seguido por um ponto e outro nmero especifica o formato de impresso de um nmero fracionrio. O primeiro nmero especifica o nmero

de casas antes do ponto decimal. Quando utilizado com o formato string, o primeiro nmero especifica o nmero mnimo de caracteres a serem impressos e o segundo nmero o nmero mximo de caracteres a serem impressos. Se o nmero de caracteres da string for maior que o nmero mximo estipulado, os caracteres excedentes sero truncados. Requisito: #use rs232 Exemplos:
#use rs232(baud=9600,xmit=pin_b3,rcv=pin_b2) int x=12; signed int t=-5; long int y=550; float z=250.498567; char a[]={teste da funo printf}; printf (testando...); printf(valor de x eh: %u\r\n,x); printf(x=%u, y=%lu, t=%d\r\n,x,y,t); printf(%05lu\r\n,x); printf(%5.3f\r\n,z); pritnf(%5.12s\r\n,a); //imprime: testando... //imprime: valor de x eh: 12 //imprime: x=12, y=550, t=-5 //imprime: 00550 //imprime: 250.498 //imprime: teste da fun

KBHIT() Verifica se h um caractere sendo recebido pela porta serial padro. Sintaxe: res = kbhit() Em que res uma varivel booleana. Esta funo verifica se um caractere recebido est disponvel no buffer de recepo da USART. A funo retorna 1 (true) caso um caractere esteja disponvel ser lido, ou 0 (false) caso no exista caractere disponvel para recepo. Requisito #use rs232

You might also like