Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Pic C PDF
Apostila Pic C PDF
APOSTILA DE:
PROGRAMAO DE
MICROCONTROLADORES PIC
USANDO LINGUAGEM C
INTRODUO ....................................................................................................................... 2
1. INTRODUO AOS MICROCONTROLADORES ...................................................... 3
1.1. O que um Microcontrolador? ................................................................................. 3
1.2. Qual a diferena do Microcontroladores e dos Microprocessadores? ...................... 3
1.3. O que significa PIC? ................................................................................................. 3
1.4. Programao do PIC ................................................................................................. 5
1.5. O que o MpLab?..................................................................................................... 6
2. O PIC 16F877A ................................................................................................................ 7
2.1. NOMENCLATURA DOS PINOS ........................................................................... 8
2.2. QUE SCHMITT-TRIGGER?.............................................................................. 10
2.3. GERADOR DE RELGIO OSCILADOR ......................................................... 12
2.4. Oscilador XT........................................................................................................... 12
2.5. Oscilador RC........................................................................................................... 13
3. AMBIENTE INTEGRADO DE DESENVOLVIMENTO (IDE) .................................. 16
3.1. CRIAO DE UM PROJETO:.............................................................................. 17
4. INTRODUO LINGUAGEM C O PRIMEIRO PROGRAMA........................... 25
5. USO DO MPSIM PARA SIMULAO ....................................................................... 29
6. AS VARIVEIS NO COMPILADOR CCS .................................................................. 43
6.1. O que so Variveis? .............................................................................................. 43
6.2. Tipos de variveis ................................................................................................... 43
6.3. OS MODIFICADORES.......................................................................................... 43
6.4. Declarao de Variveis ......................................................................................... 44
6.5. Inicializando Variveis ........................................................................................... 45
6.6. Variveis Locais e Globais ..................................................................................... 46
6.7. Constantes ............................................................................................................... 46
Exerccios 6.1:..................................................................................................................... 47
7. OPERADORES EM C.................................................................................................... 48
7.1. O Operador de Atribuio....................................................................................... 48
7.2. Os Operadores Aritmticos..................................................................................... 48
7.3. Operadores Relacionais e Lgicos.......................................................................... 50
7.4. Operadores de Incremento e Decremento............................................................... 51
7.5. Operadores Aritmticos de Atribuio ................................................................... 52
7.6. Operadores Bit a Bit................................................................................................ 53
7.7. Interface com os interruptores ................................................................................ 55
Exerccios 7.1: .............................................................................................................. 59
8. TEMPORIZAO NO PIC ........................................................................................... 61
8.1. A funo Delay:...................................................................................................... 61
8.2. Interrupo Temporizador: ..................................................................................... 64
8.3. O temporizador TIMER 0....................................................................................... 64
Exerccios 8.1: .............................................................................................................. 68
9. SINAIS ANALGICOS NO PIC................................................................................... 70
9.1. CONCEITOS BSICOS DOS CONVERSORES ................................................. 70
9.2. Tratamento de Entradas Analgicas no PIC ........................................................... 72
Exemplo 9.2: ....................................................................................................................... 74
Exerccios:........................................................................................................................... 76
10. COMUNICAO SERIAL ....................................................................................... 79
10.1. Comunicao Serial Sncrona x Comunicao Serial Assncrona...................... 79
10.2. O RS232 no PIC.................................................................................................. 80
EXEMPLO:........................................................................................................................ 81
Exerccios: ....................................................................................................................... 82
Microcontroladores - PIC 1
MICROCONTROLADORES PIC EM C
INTRODUO
Microcontroladores - PIC 2
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 3
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 4
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 5
MICROCONTROLADORES PIC EM C
Edio
O MpLab possui um editor de texto para seus programas que possui diversas
ferramentas de auxlio como localizar, substituir, recortar, copiar e colar.
Compilao
Compilar significa traduzir um programa escrito em assembly (mneumnicos) para
linguagem de mquina (nmeros). A compilao gera um arquivo com extenso
.hex (hexadecimal) a partir dos arquivos de cdigo fonte (.asm) e de projeto (.pjt).
o contedo do arquivo hexadecimal que gravado na memria de programa do
PIC.
Simulao
O MpLab possui ferramentas para simulao do programa no prprio computador,
possibilitando a execuo passo a passo, visualizao e edio do contedo dos
registradores, edio de estmulos (entradas), contagem de tempo de execuo,
etc.
Gravao
Para que o programa seja executado no microcontrolador, o arquivo hexadecimal
deve ser gravado no PIC. O MpLab oferece suporte aos gravadores fabricados pela
Microchip.
Emulao
A Emulao um recurso de desenvolvimento que possibilita testes em tempo real.
O MpLab oferece suporte ao hardware necessrio para estar emulando um
determinado programa. Esta emulao feita conectando-se (atravs do hardware
mencionado) o computador ao sistema projetado, no lugar do PIC
Microcontroladores - PIC 6
MICROCONTROLADORES PIC EM C
2. O PIC 16F877A
Microcontroladores - PIC 7
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 8
MICROCONTROLADORES PIC EM C
RC4/SDI/DAS 23 I/O ST RC4: I/O digital ou entrada de dados para SPI ou via de
dados (entrada/sada) para IC.
RE0/RD/AN5 8 I/O TTL/ST(3) RE0: I/O digital ou controle de leitura da porta paralela
ou entrada analgica AN5.
RE0/RD/AN6 9 I/O TTL/ST(3) RE1: I/O digital ou controle de leitura da porta paralela
ou entrada analgica AN6.
RE0/RD/AN7 10 I/O TTL/ST(3) RE2: I/O digital ou controle de leitura da porta paralela
ou entrada analgica AN7.
Legenda:
I =Input (entrada) O = Output(sada)
I/O = Input/OutPut (entrada ou sada) P = Power(Alimentao)
- = no utilizado TTL = Entrada tipo TTL
ST = Entrada tipo Schmitt trigger
Microcontroladores - PIC 9
MICROCONTROLADORES PIC EM C
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.
Verifica-se pelo grfico que a transio de nvel lgico baixo (LOW) para alto (HIGH)
muito longa, implicando na oscilao da sada da porta lgica "NO" medida
que o sinal de entrada passa pelo intervalo indefinido (1 ou 0), transportando para
sada o mesmo efeito.
Microcontroladores - PIC 10
MICROCONTROLADORES PIC EM C
Portanto fica claro que no existe apenas porta lgica "NO" Schmitt-trigger,
existem outras portas com essa tecnologia.
Porta lgica Schmitt-trigger projetada para aceitar sinais cuja a transio lenta
e garante na sada nvel lgico livre de oscilaes.
Analisando o grfico da figura anterior observa-se que a sada muda de nvel lgico
alto (HIGH) para baixo (LOW) quando a tenso de transio superior a VT +
(Positive-going threshold - limiar de tenso positiva de transio).
Microcontroladores - PIC 11
MICROCONTROLADORES PIC EM C
Tipos de osciladores
O PIC pode trabalhar com quatro configuraes de oscilador. Uma vez que as
configuraes com um oscilador de cristal e resistncia-condensador (RC) so
aquelas mais frequentemente usadas, elas so as nicas que vamos mencionar
aqui.
2.4. Oscilador XT
O oscilador de cristal est contido num envlucro de metal com dois pinos onde foi
escrita a freqncia a que o cristal oscila. Dois condensadores cermicos devem
ligar cada um dos pinos do cristal massa. Casos h em que cristal e
condensadores esto contidos no mesmo encapsulamento, tambm o caso do
ressonador cermico ao lado representado. Este elemento tem trs pinos com o
pino central ligado massa e os outros dois pinos ligados aos pinos OSC1 e OSC2
do microcontrolador. Quando projetamos um dispositivo, a regra colocar o
oscilador to perto quanto possvel do microcontrolador, de modo a evitar qualquer
interferncia nas linhas que ligam o oscilador ao microcontrolador.
Microcontroladores - PIC 12
MICROCONTROLADORES PIC EM C
2.5. Oscilador RC
Microcontroladores - PIC 13
MICROCONTROLADORES PIC EM C
Para ter um controle sobre o reset conveniente instalar um boto como se mostra
na figura.
Microcontroladores - PIC 14
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 15
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 16
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 17
MICROCONTROLADORES PIC EM C
Criar um projeto novo usando o assistente (Wizard), para isto clicar no menu
Project / Project Wizard .... como mostrado na seguinte figura.
Avanar
Microcontroladores - PIC 18
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 19
MICROCONTROLADORES PIC EM C
Incrementar algum arquivo existente no projeto em caso de ter. Para este curso por
enquanto no incrementaremos nenhum arquivo e clicaremos em avanar
diretamente.
Microcontroladores - PIC 20
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 21
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 22
MICROCONTROLADORES PIC EM C
At aqui o seu projeto esta vazio sem nenhum programa. O programa criado ainda
no esta associado ao projeto.
Com o mouse sobre Source Files clicar no boto direito do mouse, depois
clicar na opo Add Files.
Microcontroladores - PIC 23
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 24
MICROCONTROLADORES PIC EM C
#include <16f877A.h>
#use delay(clock=4000000, RESTART_WDT)
#fuses xt,nowdt,noprotect,put,brownout,nolvp,nocpd,nowrt
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte portd = 0x08
#byte porte = 0x09
#bit botao = portb.0
#bit led = portb.1
void main ()
{
set_tris_a(0b11111111);
set_tris_b(0b11111001);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b00000111);
porta=0x00;
portb=0x00;
portc=0x00;
portd=0x00;
porte=0x00;
while(TRUE)
{
RESTART_WDT();
if(!botao)
led = 1;
else
led=0;
}
Microcontroladores - PIC 25
MICROCONTROLADORES PIC EM C
#fuses xt,wdt,noprotect,put,brownout,nolvp,nocpd,nowrt
Configurao dos fusveis.
XT: O oscilador, da maioria dos PIC, externo, sem ele nada funciona.
Existem vrios tipos de osciladores como o RC composto por uma resistncia e um
capacitor e o cristal XT que mais preciso sendo tambm os mais caros.
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
Afeta como o compilador gerar cdigo para as instrues de entrada ou
sada que seguem. Esta diretiva tem efeito at que uma nova diretiva #use xxxx_IO
seja encontrado. Este mtodo rpido de configurao de configurao de I/O a
configurar corretamente a direo de I/O usando a instruo set_tris_X().
Microcontroladores - PIC 26
MICROCONTROLADORES PIC EM C
void main ()
A declarao main() especifica o nome de uma funo. No caso, a funo
main() padronizada na linguagem C e utilizada para definir a funo principal, ou
corpo principal do programa.
O sinal de abertura de chave { utilizado para delimitar o incio da funo e
o sinal de fechamento de chave } indica o final da funo. Na verdade, as chaves
delimitam o que chamamos de bloco de programa, ou bloco de cdigo.
set_tris_a(0b11111111);
set_tris_b(0b11111001);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b00000111);
Esta funo permite direcionar as I/O. Deve de ser usado com o comando
fast_io e quando as portas de I/O esto acessveis, para isto deve ser usada a
diretiva #BYTE para o acesso da porta. Cada bit no valor representa um pino. O
1(um) representa entrada e o zero sada.
Exemplo: SET_TRIS_B( 0x0F ); similar a SET_TRIS_B( 0b00001111 )
// B7,B6,B5,B4 are outputs
// B3,B2,B1,B0 are inputs
porta=0x00;
portb=0x00;
portc=0x00;
portd=0x00;
porte=0x00;
Inicializando as portas, todos os pinos das portas na execuo destas linhas
tomaro o valor de zero ou desligado.
while(TRUE)
Este um comando de controle utilizado na repetio de um determinado
bloco de instrues. Esse bloco ser repetido enquanto a avaliao da condio
especificada entre parnteses for verdadeira. No caso, a avaliao explicitamente
verdadeira (true).
O bloco de instrues que ser repetido aquele especificado dentro das
chaves que seguem o comando while.
if(!botao)
led = 1;
else
Microcontroladores - PIC 27
MICROCONTROLADORES PIC EM C
led=0;
O comando if (em portugus se) utilizado para avaliar a condio que esta
entre parnteses. Em caso de que esta condio seja verdadeira o comando
seguinte ser executado. Em caso de ser falsa (else) o comando depois da
instruo else ser executado. Neste exemplo o a varivel booleana boto esta
negada (!botao) quer disser se o boto estivesse em estado zero a condio ser
falsa e o led ser igual a 1. Em caso que o boto seja 1 a condio ser falsa e o
led ser igual a zero.
Microcontroladores - PIC 28
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 29
MICROCONTROLADORES PIC EM C
Exerccios 5.1:
1. Incremente a palavra Brasil depois da linha de programa while(TRUE) e
compile o projeto.
2. Em que linha se apresentou o erro?. Verifique a barra de indicao inferior na
janela do Mplab que mostra a linha e a coluna na qual se encontra o cursor.
3. Porque ao incrementar esta palavra provocou ao compilador o erro?
Microcontroladores - PIC 30
MICROCONTROLADORES PIC EM C
Exerccios 5.2:
1. Pressionar o boto Animate e anotar suas observaes. Para parar a
animao clicar no boto halt.
2. Clicar no boto Run e anotar suas observaes, que esta acontecendo?
3. Clicar vrias vezes o boto Step over e anotar suas observaes?
Microcontroladores - PIC 31
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 32
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 33
MICROCONTROLADORES PIC EM C
Agora o leitor deve estar preparado para simular o seu projeto com estmulos
de entrada.
Exerccios 5.3:
1) Pressionar o boto Step Over nos botes de controle de simulao e
verifique se a linha de comando depois da instruo if executada. Na
seguinte barredura estimule o varivel boto e verifique novamente a
execuo desta linha. Anote suas observaes, que esta acontecendo?
Microcontroladores - PIC 34
MICROCONTROLADORES PIC EM C
Exerccios 5.4:
1. Inserir na janela watch o byte portb em binrio e simular novamente o
programa observando detalhadamente os resultados.
Microcontroladores - PIC 35
MICROCONTROLADORES PIC EM C
void main ()
{
set_tris_a(0b11111111);
set_tris_b(0b11111011);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b00000111);
porta=0x00;
portb=0x00;
portc=0x00;
portd=0x00;
porte=0x00;
while(TRUE)
{
if(!BotaoLiga)
{
Motor1 = 1;
Lampada=1;
}
if(!BotaoDesliga)
{
Motor1 = 0;
Lampada=0;
}
}
}
Microcontroladores - PIC 36
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 37
MICROCONTROLADORES PIC EM C
/********************************************************
* CEFETES
* Prof: Marco Antonio
* Exemplo 1: Estrutura Bsica de um programa em C
* Materia: Microcontroladores
* Data: Agosto 2006
********************************************************/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* DEFINIO DAS VARIVEIS INTERNAS DO PIC *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <16f877A.h> // microcontrolador utilizado
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configuraes para gravao *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Constantes internas *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de constantes facilita a programao e a manuteno.
//Este programa no utiliza nenhuma constante de usurio
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Declarao dos flags de software *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de flags ajuda na programao e economiza memria RAM.
//Este programa no utiliza nenhum flag de usurio
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definio e inicializao dos port's *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ENTRADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#bit BotaoSA14_b1 = portb.1
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Microcontroladores - PIC 38
MICROCONTROLADORES PIC EM C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configuraes do Microcontrolador *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void main ()
{
// configura CONFIG
setup_counters(RTCC_INTERNAL, WDT_2304MS);
// configura os TRIS
set_tris_a(0b00100000);
set_tris_b(0b00001111);
set_tris_c(0b10011001);
set_tris_d(0b00000000);
set_tris_e(0b00000000);
// inicializa os ports
porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte
HabLed =1;
HabBotao=1;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Loop principal *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
while(TRUE)
{
RESTART_WDT();
if(BotaoSA14_b1) // testa boto
Led0 = 1; // Se boto = 0, ento led = 1
else
Led0=0; // caso contrrio, led = 0
}
// FIM DO PROGRAMA
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Fim do Programa *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Microcontroladores - PIC 39
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 40
MICROCONTROLADORES PIC EM C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* DEFINIO DAS VARIVEIS INTERNAS DO PIC *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <16f877A.h> // microcontrolador utilizado
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configuraes para gravao *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Constantes internas *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Declarao dos flags de software *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de flags ajuda na programao e economiza memria RAM.
//Este programa no utiliza nenhum flag de usurio
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definio e inicializao dos port's *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ENTRADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#bit Botao7 = portb.1
#bit BotaoDesLiga = portb.2
#bit Botao9 = portb.3
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#bit HabLed = porta.4
#bit HabBotao = portb.6
Microcontroladores - PIC 41
MICROCONTROLADORES PIC EM C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configuraes do Microcontrolador *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void main ()
{
// configura CONFIG
setup_counters(RTCC_INTERNAL, WDT_2304MS);
// configura os TRIS
set_tris_a(0b00100000);
set_tris_b(0b00001111);
set_tris_c(0b10011001);
set_tris_d(0b00000000);
set_tris_e(0b00000000);
// inicializa os ports
porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte
HabLed =1;
HabBotao=1;//rb7
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Loop principal *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
while(TRUE)
{
RESTART_WDT();
if(Botao9) // testa boto
portd = 0b01101111;
if(Botao7) // testa boto
portd = 0b00000111;
if(BotaoDesLiga)
portd = 0b00000000; // caso contrrio, led = 0
}
// FIM DO PROGRAMA
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Fim do Programa *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Microcontroladores - PIC 42
MICROCONTROLADORES PIC EM C
Para voc poder manipular dados dos mais diversos tipos, necessrio poder
armazen-los na memria e poder referenci-los quando for preciso. para isso
que existem as variveis, que nada mais so do que um espao reservado na
memria, e que possuem um nome para facilitar a referncia. As variveis podem
ser de qualquer tipo visto nesta aula: int, char, float, double, etc.
Como o prprio nome diz, as variveis podem ter o seu contedo alterado durante a
execuo do programa, ou seja, o programador tem a liberdade de atribuir valores
ao decorrer da execuo.
O C tem 5 tipos bsicos: char, int, float, void, double. Destes no todos os tipos
fazem parte do compilador CCS. O double o ponto flutuante duplo e pode ser
visto como um ponto flutuante com muito mais preciso. O void o tipo vazio, ou
um "tipo sem tipo". A aplicao deste "tipo" ser vista posteriormente. Na seguinte
tabela observaremos os tipos de dados do compilador CCS.
6.3. OS MODIFICADORES
Microcontroladores - PIC 43
MICROCONTROLADORES PIC EM C
que no caso do compilador CCS cria uma varivel de apenas um bit. Uma
especificao long int criar uma varivel de 16 bits
Assim, um tipo de dados signed int pode representar valores entre -128 e
+127, em vez de 0 a 255.
Todos os tipos, exceto o Float, por defeito so unsigned; porem pode estar
precedido por unsigned ou signed. Na seguinte tabela mostramos alguns exemplos
de combinaes possveis dos tipos de dados do compilador CCS.
Intervalo
Tipo Num de bits
Inicio Fim
char 8 0 255
unsigned char 8 0 255
signed char 8 -128 127
int, int8, byte 8 0 255
unsigned int, unsignet byte 8 0 255
signed int, signed int 8 -128 127
long int 16 0 65.535
signed long int 16 -32.768 32.767
unsigned long int 16 0 65.535
Int32, unsigned int32 32 0 4.294.967.295
Signed int32 32 -2,147.483.648 2,147.483.647
float 32 3,4E-38 3.4E+38
Exemplos:
int id;
Microcontroladores - PIC 44
MICROCONTROLADORES PIC EM C
float aux;
unsigned int i;
char carac;
Onde tipo pode ser qualquer tipo vlido da linguagem C, e nome_da_variavel deve
ser um nome dado pelo programador, sendo o primeiro caractere uma letra ou um
"_", e os demais, letras, nmeros ou "_".
num _carac
peso Id_obj
aluno_1 AUX
1num -idade
$aux id@al
int n=12;
int n;
n=12;
num=i;
Microcontroladores - PIC 45
MICROCONTROLADORES PIC EM C
#include *****
int main()
{
int contador=0; //contador uma varivel local
num= 10;
printf("%d", n);
return 0;
}
Assim como as variveis locais, veremos as variveis globais com mais detalhes na
aula sobre funes.
6.7. Constantes
De maneira geral, qualquer tipo de dado pode ser utilizado para definir uma
constante, cabendo apenas ao programador representar o valor dela
adequadamente.
const valor1 = 10
const valor1 = -3
const valor1 = 13.24
const valor1 = c
const valor1 = CEFETES-Linhares
Bem, nesta aula voc aprendeu sobre os tipos de dados que a linguagem C pode
manipular. Tambm viu a forma de armazenar temporariamente estes dados, com o
Microcontroladores - PIC 46
MICROCONTROLADORES PIC EM C
Exerccios 6.1:
$num
-temp
_carac_
3aux
Microcontroladores - PIC 47
MICROCONTROLADORES PIC EM C
7. OPERADORES EM C
J aprendemos sobre a estrutura bsica de um programa em C, sobre os tipos de
dados que C pode manipular, sobre o que so variveis e constantes. Na aula de
hoje voc aprender a criar expresses em C com o uso de operadores, sejam
eles aritmticos, lgicos, relacionais, etc. Mostraremos vrios exemplos e
finalizaremos a aula com exerccios.
Ento, p na tbua!
n= 10;
ch= 'a';
fp= 2.51;
n= num;
n= (5+2)/4;
Atribuies mltiplas:
x = y = z = 20;
Como voc viu no ltimo exemplo acima, C tambm permite atribuies mltiplas
(como x = y = z = 20;). Neste caso, todas as variveis da atribuio (x, y e z)
recebem o valor mais direita (20).
Microcontroladores - PIC 48
MICROCONTROLADORES PIC EM C
Mais alta
- unrio
*/%
+-
Mais baixa
5+2*3-8/4
5+6-2
Microcontroladores - PIC 49
MICROCONTROLADORES PIC EM C
Este apenas um de vrios problemas que podem ser resolvidos com o uso do
operador %.
Os operadores relacionais so 6:
Operador Ao
< Menor que
<= Menor que ou igual
> Maior que
>= Maior que ou igual
== Igual
!= Diferente
int main()
{
int n; /* Declarao de uma varivel
inteira */
Tente fazer alguns testes com os outros operadores relacionais. Sei l, seja criativo!
Voc o programador... :)
Microcontroladores - PIC 50
MICROCONTROLADORES PIC EM C
Os operadores lgicos so 3:
Outro exemplo:
Maior
!
>, >=, <, <=
==, !=
&&
||
Menor
Os parnteses tambm podem ser usados para mudar a ordem de avaliao das
expresses, como no caso das expresses aritmticas.
++n;
Microcontroladores - PIC 51
MICROCONTROLADORES PIC EM C
ou depois da varivel:
n++;
Exemplo 1:
n= 5;
p= ++n;
printf("%d ",p); /* imprime na tela: 6 */
Exemplo 2:
n= 5;
p= n++;
printf("%d ",p); /* imprime na tela: 5 */
x+=10;
que igual a:
Microcontroladores - PIC 52
MICROCONTROLADORES PIC EM C
Operador Ao
& and ("e" lgico)
| or ("ou" lgico)
^ exclusive or ("ou exclusivo")
~ complemento de 1
>> deslocamento direita
<< deslocamento esquerda
Microcontroladores - PIC 53
MICROCONTROLADORES PIC EM C
Para saber como se comportam os operadores bit a bit, segue abaixo uma tabela
verdade dos operadores, com exceo dos operadores de deslocamento:
O operador & compara os dois operandos bit a bit e cada bit do resultado 1
somente quando os dois bits do operando for 1. Caso contrrio, 0.
O bits do resultado de uma operao | bit a bit s ser 1 quando um dos dois bits,
ou os dois, forem 1. Na operao ^ s ser 1 quando os bits dos operandos forem
diferentes. Se forem iguais (0^0 ou 1^1) ser 0.
x= 8; /* 8 em binrio 1000 */
y= 9; /* 9 em binrio 1001 */
x & y:
1000
1001
----
1000 => O resultado desta operao 8 (1000).
x | y:
1000
1001
----
1001 => O resultado desta operao 9 (1001).
x ^ y:
1000
1001
----
0001 => O resultado desta operao 1.
~x: 1000
----
Microcontroladores - PIC 54
MICROCONTROLADORES PIC EM C
~y: 1001
----
0110 => O resultado desta operao 6 (110).
Voc deve ter notado que deslocar um bit direita o mesmo que dividir o nmero
por 2. Deslocar 2 bits direita o mesmo que dividir o nmero por 4, e assim por
diante.
Microcontroladores - PIC 55
MICROCONTROLADORES PIC EM C
portas de alta impedncia especialmente problemtico, uma vez que o valor lgico
da porta poder oscilar continuamente entre nvel lgico alto e baixo.
Microcontroladores - PIC 56
MICROCONTROLADORES PIC EM C
Exemplos:
Para poder ter uma noo, de como poderia ser o circuito eletrnico,
apresentado o esquemtico deste. O motor no pode ser ligado diretamente
pelo PIC, por enquanto consideraremos que um Led (LMOTOR)representando o
Motor.
Microcontroladores - PIC 57
MICROCONTROLADORES PIC EM C
/********************************************************
* CEFETES
* Prof: Marco Antonio
* Exemplo 2: Controle de Nvel num tanque de gua
* Materia: MICROCONTROLADORES
* Data: Julho 2006 /Linhares
********************************************************/
#include <16f877A.h>
#use delay(clock=4000000, RESTART_WDT)
#fuses xt,nowdt,noprotect,put,brownout,nolvp,nocpd,nowrt
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
void main ()
{
set_tris_a(0b11111111);
set_tris_b(0b11110110);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b00000111);
porta=0x00;
portb=0x00;
portc=0x00;
portd=0x00;
porte=0x00;
while(TRUE)
{
if((!S1)&&(!S2))
LMotor =1;
if((S1)&&(S2))
LMotor = 0;
}
}
Microcontroladores - PIC 58
MICROCONTROLADORES PIC EM C
Exerccios 7.1:
a) 2+3*5 = 30
b) 5*2/2 = 5
c) 4+6-8/2 = 6
d) (-3)*4 = 12
a) 1 > 2
b) 2 >= 1
c) 3 != 3
d) 'c' == 'c'
4) Fazer um projeto para que a presso do vapor sempre permanea entre uma
faixa especfica (histerese), sabendo que a histerese do pressostato calibrada
no instrumento. Os nveis do tanque sempre devem de estar entre S1 e S2,
sabendo que a bomba 1 tem uma partida simples. V2 s abrira quando a
presso esteja entre os nveis de histereses determinado.
.
Ilustrao 32: Exerccio 7.4, controle de presso
Microcontroladores - PIC 59
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 60
MICROCONTROLADORES PIC EM C
8. TEMPORIZAO NO PIC
Esta funo criar cdigo para executar uma demora do tempo especificado.
O tempo especificado em milisegundos. Esta funo trabalha executando um
nmero preciso de instrues para causar a demora pedida.
O tempo de demora pode ser mais longo do que o pedido se uma interrupo
for chamada durante a espera do tempo. O tempo gastado na interrupo no
conta para o tempo de demora.
Exemplo 8.1:
conveniente observar que neste exemplo o watch dog timer esta ativado,
neste caso ser necessrio resetar o WDT para que o PIC no seja resetado e
comece a ser executada a primeira linha do programa. Para isto usada a funo
RESTART_WDT().
Alem da funo Delay, existem outras funes que ainda no foram vistas.
Trata-se das funes output_high(PIN_B0) e output_low(PIN_B0).
Microcontroladores - PIC 61
MICROCONTROLADORES PIC EM C
/********************************************************
* CEABRA
* Prof: Marco Antonio
* Exemplo 1: Pisca Pisca (Estrutura bsica de um programa)
* Matria: Microcontroladores
* Data: Julho 2006
********************************************************/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* DEFINIO DAS VARIVEIS INTERNAS DO PIC *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <16f877A.h> // microcontrolador utilizado
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configuraes para gravao *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definies para uso de Rotinas de Delay *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Constantes internas *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de constantes facilita a programao e a manuteno.
//Este programa no utiliza nenhuma constante de usurio
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Declarao dos flags de software *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de flags ajuda na programao e economiza memria RAM.
//Este programa no utiliza nenhum flag de usurio
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definio e inicializao dos port's *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
Microcontroladores - PIC 62
MICROCONTROLADORES PIC EM C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ENTRADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// As entradas devem ser associadas a nomes para facilitar a programao e
//futuras alteraes do hardware.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// AS SADAS DEVEM SER ASSOCIADAS A NOMES PARA FACILITAR A PROGRAMAO E
//FUTURAS ALTERAES DO HARDWARE.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configuraes do Microcontrolador *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void main ()
{
// configura CONFIG
setup_counters(RTCC_INTERNAL, WDT_2304MS);
// configura os TRIS
set_tris_a(0b11111111); // configurao dos pinos de I/O
set_tris_b(0b11111000);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b00000111);
// inicializa os ports
porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Loop principal *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
while(TRUE)
{
RESTART_WDT();
output_high(PIN_B0);
delay_ms(1000);
output_low(PIN_B0);
delay_ms(1000);
output_high(PIN_B1);
delay_ms(1000);
output_low(PIN_B1);
delay_ms(1000);
}
// FIM DO PROGRAMA
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Fim do Programa *
*************************************
Microcontroladores - PIC 63
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 64
MICROCONTROLADORES PIC EM C
Exemplo 8.2:
Vejamos neste exemplo como configurar o mdulo timer 0 para que uma
sada pisque a cada segundo. Neste caso o clock de 4 MHz e utilizado um
prescaler de 32, ento teremos uma freqncia de entrada no timer 0 de:
Fosc/(4*preEscala) = 4 000 000/(4*32) = 31250
Deste resultado podemos tirar uma concluso: a cada vez que o registro
TMR0 se incrementa em 1, passa na verdade um tempo de 1/31250 seg.
/********************************************************
* CEFETES
* Prof: Marco Antonio
* Exemplo 8.2: Pisca - Pisca, usando interrupo Timer 0
* Materia: Eletrnica Digital
* Data: Setembro 2005
********************************************************/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* DEFINIO DAS VARIVEIS INTERNAS DO PIC *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <16f877A.h> // microcontrolador utilizado
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configuraes para gravao *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Microcontroladores - PIC 65
MICROCONTROLADORES PIC EM C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definies para uso de Rotinas de Delay *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Constantes internas *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de constantes facilita a programao e a manuteno.
//Este programa no utiliza nenhuma constante de usurio
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Declarao dos flags de software *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de flags ajuda na programao e economiza memria RAM.
int conta;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definio e inicializao dos port's *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ENTRADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// As entradas devem ser associadas a nomes para facilitar a programao e
//futuras alteraes do hardware.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// AS SADAS DEVEM SER ASSOCIADAS A NOMES PARA FACILITAR A PROGRAMAO E
//FUTURAS ALTERAES DO HARDWARE.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configuraes do Microcontrolador *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#int_timer0
void trata_t0()
{
Microcontroladores - PIC 66
MICROCONTROLADORES PIC EM C
//HABILITA INTERRUPES
ENABLE_INTERRUPTS (GLOBAL | INT_TIMER0);
// configura os TRIS
set_tris_a(0b11111111); // configurao dos pinos de I/O
set_tris_b(0b11111000);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b00000111);
// inicializa os ports
porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Loop principal *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
while(TRUE)
{
RESTART_WDT();
}
// FIM DO PROGRAMA
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Fim do Programa *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Microcontroladores - PIC 67
MICROCONTROLADORES PIC EM C
Exerccios 8.1:
Como o quintal era grande pediu para usar um diodo lazer para
construir um sensor de barreira, s que o lazer no podia estar ligado
constantemente, devia ficar ligado o 10% do perodo a uma freqncia
de 1 KHz.
Para o receptor oriento trabalhar com uma resistncia LDR que tem
maior rea sensora.
O alarme no poderia disparar imediatamente ao ser cortada a
barreira, dever esperar segundo para ter certeza que se trata de
um ladro.
Boa sorte galera. Vocs tero que montar o projeto.
Microcontroladores - PIC 68
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 69
MICROCONTROLADORES PIC EM C
Uma entrada analgica de tenso para que possa entrar no CLP, PIC ou
computador precisa ser amostrada e convertida num valor numrico atravs de um
conversor A/D.
Microcontroladores - PIC 70
MICROCONTROLADORES PIC EM C
Ilustrao 36: Amostragem de um sinal com freqncia muito maior a frequencia de amostragem
Exerccios 9.1:
a) Sendo que o range de uma entrada analgica de um CLP de 0 a10V, e o
conversor tivesse uma resoluo de 10 bits. Qual seria o valor do nmero
resultante para uma entrada de 5 volts?
Microcontroladores - PIC 71
MICROCONTROLADORES PIC EM C
#device adc=10
Especifica ao compilar o nmero de bits da converso analgico digital
Microcontroladores - PIC 72
MICROCONTROLADORES PIC EM C
setup_adc (opes);
Esta funo configura o relojo para o conversor A/D. As opes so variveis
ou constantes inteiras de 8 bits. As opes variam de acordo com cada PIC e
podem ser encontradas no arquivo de cabealho de cada dispositivo. No caso do
Pic 16F877A encontramos:
ADC_OFF
ADC_CLOCK_DIV_2
ADC_CLOCK_DIV_4
ADC_CLOCK_DIV_8
ADC_CLOCK_DIV_16
ADC_CLOCK_DIV_32
ADC_CLOCK_DIV_64
ADC_CLOCK_INTERNAL
Ejemplo:
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel (1);
Sintaxe: set_adc_channel (canal)
Parmetros: canal o nmero do canal selecionado. O nmero do canal comea
com zero referente ao pino AN0.
Funo: Especifica o canal que ser usado para executar o prximo comando
READ_ADC. Verifique que passe um pequeno tempo antes de trocar de canal para
que possa ter maior exatido. O tempo varia em funo do valor da impedncia da
fonte de entrada. Em geral 10us so suficientes. No ser necessrio trocar de
canal antes de cada leitura se o canal no muda. Esta funo esta disponvel em
PICs com conversores A/D.
Exemplo:
set_adc_channel(2);
delay_us(10);
value = read_adc();
read_adc();
Sintaxe: value = read_adc ([mode])
Parmetros: mode um parmetro opcional. Se usado estes podem ser:
ADC_START_AND_READ (this is the default)
ADC_START_ONLY (starts the conversion and returns)
ADC_READ_ONLY (reads last conversion result)
Microcontroladores - PIC 73
MICROCONTROLADORES PIC EM C
Retorna: o valor da converso analgica digital para o caso do PIC 16F877A, retorna um valor de 16
bits.
Funo: Esta funo faz a leitura do valor digital do conversor analgico digital.
Examples:
setup_adc( ADC_CLOCK_INTERNAL );
setup_adc_ports( ALL_ANALOG );
set_adc_channel(1);
value = read_adc();
Exemplo 9.2:
Este programa foi feito com a inteno de servir como modelo para o
desenvolvimento de outros projetos.
EscNova = 5 * Converso/1023
/********************************************************
* CEFETES
* Prof: Marco Antonio
* Exemplo 4: Converso analgica digital
* Materia: Eletrnica Digital
* Data: Julho 2006
********************************************************/
Microcontroladores - PIC 74
MICROCONTROLADORES PIC EM C
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ENTRADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
float conversao = 0; // armazena o resultado da converso AD
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#bit LedTensaoBaixa = portb.0
#bit LedTensaoMedia = portb.1
#bit LedTensaoAlta = portb.2
void main()
{
// configura microcontrolador
setup_adc_ports (RA0_RA1_RA3_analog);//Configura Vdd e Vss como Vref
setup_adc (adc_clock_div_32);
setup_counters (rtcc_internal, WDT_2304MS);
set_adc_channel (1);
// configura os tris
set_tris_a(0b11011111); // configurao da direo dos pinos
de I/O
set_tris_b(0b00000000);
set_tris_c(0b11111101);
set_tris_d(0b00000000);
set_tris_e(0b00000100);
// inicializa os ports
porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte
Microcontroladores - PIC 75
MICROCONTROLADORES PIC EM C
if (conversao<=1)
LedTensaoBaixa = 1;
else
LedTensaoBaixa = 0;
if ((conversao<=4)&&(conversao>=1))
LedTensaoMedia = 1;
else
LedTensaoMedia = 0;
if ((conversao<=5)&&(conversao>=4))
LedTensaoAlta = 1;
else
LedTensaoAlta = 0;
}
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Fim do Programa *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Exerccios:
Microcontroladores - PIC 76
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 77
MICROCONTROLADORES PIC EM C
mA
Curva Caracterstica
20 do Sensor
4 VARIVEL
DO PROCESSO
0% 100% Nvel
4-20mA
4-20mA
LT
Tanque
CP
SET - POINT VARIVEL
Y0
MANIPULADA OU
DE CONTROLE
INVERSOR
WEG B1
Assuma que a fonte de corrente varivel esta instalada na entrada AN0 atravs de
uma resistncia de 250 ohms e que a sinal do PDT esta instalado na entrada AN1
tambm com uma resistncia de 250 ohms. A velocidade da bomba no variada
pelo uC, mas o controle de liga e desliga sim.
Microcontroladores - PIC 78
MICROCONTROLADORES PIC EM C
10.COMUNICAO SERIAL
Microcontroladores - PIC 79
MICROCONTROLADORES PIC EM C
Notem que neste frame existe um bit de start, 8 bits de dados, um bit de
paridade e um bit de parada. A paridade pode ser par ou mpar. Quando a paridade
par o bit de paridade gerado de modo que o nmero de 1s resultante na palavra
mais o bit de paridade sejam pares.
Por exemplo, se a palavra 10001010 est sendo transmitida, ou recebida, o
bit de paridade deve ser 1, para que o conjunto palavra + bit de paridade tenha
sempre um nmero par de 1s. Se a paridade usada for mpar o bit de paridade no
exemplo anterior ser zero.
No processo de transmisso assncrona, os dispositivos envolvidos no
processo de comunicao devem ter a mesma taxa de transmisso e recepo.
Microcontroladores - PIC 80
MICROCONTROLADORES PIC EM C
EXEMPLO:
Neste exemplo esta sendo usada uma entrada analgica de 0 a 5V e o seu
valor transferido atravs do RS232 a um computador. No computador pode-se
desenvolver um programa para poder trocar dados com o programa do PIC. Mas
tambm podemos usar o hiperTerminal que um acessrio do Windows para
comunicao serial. Basta ir a:
Iniciar\Programas\Acessrios\Comunicaes\Hiperterminal
O programa exige que o operador digite uma letra d para que o PIC possa
transmitir a informao.
/********************************************************
* CEABRA
* Prof: Marco Antonio
* Exemplo 4: Converso analgica digital e comunicao via RS232
* Matria: Eletrnica Digital
* Data: Outubro 2005
********************************************************/
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
Microcontroladores - PIC 81
MICROCONTROLADORES PIC EM C
void main()
{
// configura microcontrolador
setup_adc_ports (RA0_RA1_RA3_analog);//Configura Vdd e Vss como Vref
setup_adc (adc_clock_div_32);
setup_counters (rtcc_internal, WDT_2304MS);
set_adc_channel (1);
setup_vref(VREF_LOW|6);
// configura os tris
set_tris_a(0b11011111); // configurao da direo dos pinos
de I/O
set_tris_b(0b00000011);
set_tris_c(0b11111101);
set_tris_d(0b00000000);
set_tris_e(0b00000100);
// inicializa os ports
porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte
Exerccios:
1) Olhando o help do CCS explicar detalhadamente o programa feito no
exemplo.
2) Pesquisar e mostrar a diferencia entre o RS485 e RS232.
3) Montar o circuito do exemplo explicado neste captulo.
Microcontroladores - PIC 82
MICROCONTROLADORES PIC EM C
/********************************************************
* CEABRA
* Prof: Marco Antonio
* Exemplo 3: Controle de nvel num tanque
* Uma bomba acionada quando o tanque esta vazio
* e quando este esteja cheio, a bomba desliga. Dois sensores
* so instalados, sensor de tanque cheio e tanque vazio.
* Materia: Eletrnica Digital
* Data: Outubro 2005
********************************************************/
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ENTRADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// As entradas devem ser associadas a nomes para facilitar a programao e
//futuras alteraes do hardware.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// AS SADAS DEVEM SER ASSOCIADAS A NOMES PARA FACILITAR A
PROGRAMAO E
//FUTURAS ALTERAES DO HARDWARE.
Microcontroladores - PIC 83
MICROCONTROLADORES PIC EM C
void main ()
{
// configura CONFIG
setup_counters(RTCC_INTERNAL, WDT_2304MS);
// configura os TRIS
set_tris_a(0b11111111); // configurao dos pinos de I/O
set_tris_b(0b00000011);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b00000111);
// inicializa os ports
porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Loop principal *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
while(TRUE)
{
RESTART_WDT();
Microcontroladores - PIC 84
MICROCONTROLADORES PIC EM C
Exemplo4:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Programao em C - Recursos Bsicos de programao *
* Exemplo 4 *
* *
* CENTRO DE TREINAMENTO - MOSAICO ENGENHARIA *
* *
* TEL: (0XX11) 4992-8775 SITE: www.mosaico-eng.com.br *
* E-MAIL: mosaico@mosaico-eng.com.br *
**************************************
* VERSO : 1.0 *
* DATA : 05/06/2003 *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Descrio geral *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Microcontroladores - PIC 85
MICROCONTROLADORES PIC EM C
// Este software est preparado para ler quatro botes e tocar o buzzer com
//durao variavel conforme a tecla pressionada, alm de acender o led
//indicando a ltima tecla pressionada.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* DEFINIO DAS VARIVEIS INTERNAS DO PIC *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configuraes para gravao *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definies para uso de Rotinas de Delay *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Constantes internas *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de constantes facilita a programao e a manuteno.
#define t_filtro 20 // tamanho do filtro
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definio e inicializao das variveis *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//Neste bloco esto definidas as variveis globais do programa.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definio e inicializao dos port's *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#use fast_io(a)
Microcontroladores - PIC 86
MICROCONTROLADORES PIC EM C
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Declarao dos flags de software *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de flags ajuda na programao e economiza memria RAM.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ENTRADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// As entradas devem ser associadas a nomes para facilitar a programao e
//futuras alteraes do hardware.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// AS SADAS DEVEM SER ASSOCIADAS A NOMES PARA FACILITAR A
PROGRAMAO E
//FUTURAS ALTERAES DO HARDWARE.
Microcontroladores - PIC 87
MICROCONTROLADORES PIC EM C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tabela de Valores *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
byte const tabela[16] =
{16,32,32,48,64,80,96,112,128,144,160,176,192,208,224,240};
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Configurao do Microcontrolador *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// A rotina principal simplesmente limpa o WDT, pois toda a lgica do
// programa tratada dentro das interrupes.
void main()
{
// configura microcontrolador
setup_adc_ports (no_analogs);
setup_counters(rtcc_internal , rtcc_div_8);
setup_timer_2 (t2_div_by_16,per,1);
// configura os tris
set_tris_a(0b11011111);
set_tris_b(0b11110000);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b00000111);
// inicializa os ports
porta=(0b00000000);
portb=(0b00000000);
portc=(0b00000000);
portd=(0b00000000);
porte=(0b00000000);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Rotina principal *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Microcontroladores - PIC 88
MICROCONTROLADORES PIC EM C
#int_rtcc
void trata_int_tmr0(void)
{
set_tris_b(0b00001111); // configura os pinos como
entrada para testar os botes
delay_cycles(4); // aguarda 4 ciclos de mquina para a
estabilizao do portb
status_botoes = portb; // l o status dos botoes, salva
em varivel temporria
status_botoes = (status_botoes & 0x0f); // zera a parte alta do
registrador
set_tris_b(0b00000000); // configura os pinos como
sada para controle dos leds
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tratamento do Boto 1 *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
}
else
{ // boto 1 liberado
filtro1 = t_filtro; // inicia o filtro do boto 1
botao1_press = 0; // marca que o boto foi liberado
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tratamento do Boto 2 *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Microcontroladores - PIC 89
MICROCONTROLADORES PIC EM C
}
else
{ // boto 2 liberado
filtro2 = t_filtro; // inicia o filtro do boto 2
botao2_press = 0; // marca que o boto foi liberado
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tratamento do Boto 3 *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
}
else
{ // boto 3 liberado
filtro3 = t_filtro; // inicia o filtro do boto 3
botao3_press = 0; // marca que o boto foi liberado
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tratamento do Boto 4 *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
}
else
{ // boto 4 liberado
filtro4 = t_filtro; // inicia o filtro do boto 4
Microcontroladores - PIC 90
MICROCONTROLADORES PIC EM C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Atualiza Leds conforme botes pressionados *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
portb = status_leds; // atualiza os leds
if (status_leds == 0)
{
per = 0xff;
setup_timer_2 (t2_div_by_16,per,1);
disable_interrupts (INT_TIMER2);
buzzer = 0;
}
else
{
per = (tabela[status_leds]); // consulta tabela e inicializa
timer2.
setup_timer_2 (t2_div_by_16,per,1);
enable_interrupts (INT_TIMER2); // habilita interrupo de
timer2.
}
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Rotina de Tratamento de interrupo de TMR2 *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// Est interrupo s ir ocorrer quando alguma tecla estiver pressionada,
// o periodo de ocorrncia depende do boto ou da conbinao de botes
pressionados,
// ela ir inverter o pino de I/O do buzzer a cada interrupo.
#int_timer2
void trata_int_tmr2(void)
{
if (buzzer != 0) // o buzzer est ligado ?
{
buzzer = 0; // sim, ento desliga
}
else
{
buzzer = 1; // no, ento liga
}
}
Microcontroladores - PIC 91
MICROCONTROLADORES PIC EM C
/********************************************************
* CEABRA
* Prof: Marco Antonio
* Exemplo 4: Conversa analgica digital e comunicao va RS232
* Materia: Eletrnica Digital
* Data: Outubro 2005
********************************************************/
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
void main()
{
// configura microcontrolador
setup_adc_ports (RA0_RA1_RA3_analog);//Configura Vdd e Vss como
Vref
setup_adc (adc_clock_div_32);
setup_counters (rtcc_internal, WDT_2304MS);
set_adc_channel (1);
// configura os tris
set_tris_a(0b11011111); // configurao da direo dos
pinos de I/O
set_tris_b(0b00000011);
set_tris_c(0b11111101);
set_tris_d(0b00000000);
set_tris_e(0b00000100);
Microcontroladores - PIC 92
MICROCONTROLADORES PIC EM C
// inicializa os ports
porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte
Microcontroladores - PIC 93
MICROCONTROLADORES PIC EM C
Microcontroladores - PIC 94
MICROCONTROLADORES PIC EM C
/********************************************************
* CEABRA
* Prof: Marco Antonio
* Exemplo 5: Uso dos LCDs
* Materia: Eletrnica Digital
* Data: Setembro 2005
********************************************************/
#zero_ram
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#bit rs = porte.0 // via do lcd que sinaliza recepo de dados ou
comando
#bit enable = porte.1 // enable do lcd
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Rotina que envia um COMANDO para o LCD *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void comando_lcd(int caracter)
{
rs = 0; // seleciona o envio de um comando
portd = caracter; // carrega o portd com o caracter
enable = 1 ; // gera pulso no enable
delay_us(1); // espera 3 microsegundos
enable = 0; // desce o pino de enable
Microcontroladores - PIC 95
MICROCONTROLADORES PIC EM C
return; // retorna
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Rotina que envia um DADO a ser escrito no LCD *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void escreve_lcd(int caracter)
{
rs = 1; // seleciona o envio de um comando
portd = caracter; // carrega o portd com o caracter
enable = 1; // gera pulso no enable
delay_us(1); // espera 3 microsegundos
enable = 0; // desce o pino de enable
return; // retorna
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Funo para limpar o LCD *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void limpa_lcd()
{
comando_lcd(0x01); // limpa lcd
delay_ms (2);
return;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Inicializao do Display de LCD *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void inicializa_lcd()
{
comando_lcd(0x30); // envia comando para inicializar
display
delay_ms(4); // espera 4 milisengundos
Microcontroladores - PIC 96
MICROCONTROLADORES PIC EM C
return; // retorna
}
void main()
{
// configura microcontrolador
setup_adc_ports (no_analogs);
setup_counters (rtcc_internal, WDT_2304MS);
// configura os tris
set_tris_a(0b11011111); // configurao da direo dos
pinos de I/O
set_tris_b(0b00000011);
set_tris_c(0b11111101);
set_tris_d(0b00000000);
set_tris_e(0b00000100);
// inicializa os ports
// inicializa os ports
porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte
}
}
Microcontroladores - PIC 97