Você está na página 1de 227

O mundo dos microcontroladores - Microcontroladores PIC - Programao em C

com exemplos
Captulo 1: O mundo dos microcontroladores
A situao atual em matria de microcontroladores ocorreu graas ao desenvolvimento da tecnologia de fabricao de circuitos
integrados. Este desenvolvimento tem permitido construir as centenas de milhares de transistores num chip. Este foi um pr-requisito para o
fabrico de um microprocessador. Os primeiros microcomputadores foram feitas para adicion-los externo, como memria, linhas de I / O, os
temporizadores ou outros perifricos. O aumento na densidade de integrao possvel para criar um circuito integrado contendo o
processador e perifricos ambos. assim que foi desenvolvido o primeiro microcomputador em um nico chip, chamado microcontrolador
mais tarde.

1.1 Introduo
1,2, nmeros, nmeros ...
1.3 DETALHES IMPORTANTES
1,4 microcontroladores PIC

1.1 INTRODUO
Eletronicamente iniciantes acreditam que um microcontrolador igual a um microprocessador. Isso no verdade. Eles diferem uns dos
outros, em muitos aspectos. O primeiro e mais importante diferena a sua funcionalidade. Para utilizar o microprocessador em uma
aplicao real, que deve ser ligado com componentes tais como componentes de barramento de memria ou de transmisso de
dados.Embora o microprocessador considerado uma mquina de computao poderoso no est pronto para comunicao com
dispositivos perifricos conectados a ele. Para o microprocessador para se comunicar com um perifrico, voc deve usar circuitos
especiais. Por isso, foi no incio e esta prtica ainda est em vigor hoje.

Por outro lado, o microcontrolador projetado de modo que voc tenha todos integrados nos mesmos componentes do chip. No h
necessidade de outros componentes para a sua aplicao, pois todos os circuitos necessrios, que de outro modo correspondem aos
perifricos j esto construdos. Isso economiza tempo e espao necessrio para a construo de um dispositivo.

O que pode MICROCONTROLADORES?


Para compreender mais facilmente as razes para o enorme sucesso de microcontroladores, vamos prestar ateno ao seguinte
exemplo.Cerca de 10 anos atrs, projetando um dispositivo de controle eletrnico de um elevador de um edifcio de vrios andares foi muito
difcil, mesmo para uma equipa de peritos. Alguma vez voc j pensou sobre o que requisitos devem atender a um elevador simples? Como
lidar com a situao quando duas ou mais pessoas chamar o elevador ao mesmo tempo? O convite tem a prioridade? Como resolver
problemas de segurana, perda de energia, falha, abuso? O que acontece depois de resolver estes problemas bsicos uma concepo
meticulosa dispositivos apropriados usando um grande nmero de fichas processo especializado. Este processo pode demorar semanas ou
meses, dependendo da complexidade do dispositivo. Quando o processo estiver concludo, hora de projetar uma placa de circuito impresso
e montagem do dispositivo dispositivo.Un enorme! um outro trabalho difcil e demorado. Finalmente, quando tudo estiver terminado e
testado corretamente, e passou o momento crucial quando voc se concentrar, respire profundamente e ligue a fonte de alimentao.
Este geralmente o ponto em que o partido se torna um verdadeiro trabalho desde dispositivos electrnicos quase nunca funcionam
corretamente desde o incio. Prepare-se para muitas noites sem dormir, correes, melhorias ... e no se esquea de que ainda estamos
falando sobre como iniciar um elevador simples.
Quando o dispositivo se torne finalmente operacional perfeitamente e todos esto satisfeitos, e ser pago para o trabalho que ele tem feito,
muitas empresas esto interessadas em desenvolver seu trabalho. Claro, se voc tiver sorte, a cada dia vai lhe trazer uma oferta de emprego
de um novo investidor. No entanto, se voc precisa trabalhar em controlar os elevadores de um novo prdio com quatro andares, dos quais j
lida com seu sistema de controle. Voc sabe como proceder? Voc acha que talvez voc possa controlar as demandas de seus
clientes? Achamos que voc vai construir um dispositivo universal que pode ser usado em edifcios 4-40 andares, uma obra-prima da
eletrnica. Bem, mesmo se voc comea a construir uma jia eletrnico, o investidor vai esperarar porta da frente pedindo uma cmera no
elevador ou msica relaxante em caso de falha elevador. Ou um elevador com duas portas.
No entanto, a Lei de Murphy inexorvel e, certamente, voc no pode tirar vantagem, apesar de todos os esforos
desenvolvidos.Infelizmente, tudo o que foi dito at agora acontece na realidade. Isto o que "envolver-se em engenharia eletrnica"
realmente significa.Esta a forma como as coisas eram feitas a emergncia de microcontroladores projetados - pequeno, poderoso e
barato. Desde ento sua programao deixou de ser uma cincia, e tudo tomou outro rumo ...
O dispositivo eletrnico capaz de controlar um pequeno submarino, um guindaste ou um elevador como mencionado anteriormente, agora
incorporados em um nico chip. Microcontroladores de oferecer uma ampla gama de aplicaes e so normalmente apenas um pouco
explorado. Cabe a voc decidir o que voc deseja que o microcontrolador e carregar um programa com as instrues adequadas.Antes de
ligar o aparelho, aconselhvel verificar o seu funcionamento usando um simulador. Se tudo funcionar como deveria, incorporando o
microcontrolador no sistema. Se voc precisar alterar, melhorar ou atualizar o programa, faa isso. Quanto tempo? Para satisfao. Isso
pode ser feito sem qualquer problema.

Voc sabia que todas as pessoas podem ser classificadas em um dos 10 grupos, que esto familiarizados com o sistema numrico binrio e
aqueles que no esto familiarizados com ele. Se voc no entende o que significa que ainda pertence ao segundo grupo. Para alterar seu
status, leia o texto a seguir descreve brevemente alguns dos conceitos bsicos usados mais tarde neste livro (s para ter certeza que ns
estamos falando nos mesmos termos).

1,2, nmeros, nmeros ...


Matemtica uma cincia! Tudo to lgico e simples ... O universo de nmeros pode ser descrita com apenas dez dgitos. No entanto,
voc realmente tem que ser? Ser que precisamos exatamente esses 10 dgitos? Claro que no, apenas uma questo de hbito.Lembrese as lies da escola. Por exemplo, o que que o nmero 764 significa? Quatro unidades, seis dezenas e sete centenas. Muito
simples! Voc poderia expressar de uma forma mais desenvolvida? Claro que ele faz: 4 + 60 + 700. Ainda mais desenvolvido? Sim: 4 * 1 + 6
* + 10 7 * 100. Poderia este nmero olhar um pouco mais "cientfico"? A resposta sim mais uma vez: 4 * 100 + 101 + 6 * 7 * 102. O que isso
realmente significa? Por que usar exatamente esses nmeros 100, 101 e 102? Por que sempre o nmero 10? porque ns usamos 10
dgitos diferentes (0, 1, 2 ... 8, 9). Em outras palavras, porque usar o sistema de numerao na base 10, ou seja, o sistema decimal.

SISTEMA DE NUMERAO BINRIO


E se usssemos apenas dois nmeros 0 e 1? Se pudssemos dizer (1) ou negar (0) que algo existe. A resposta "nada de especial",
gostaramos de usar os mesmos nmeros da mesma maneira que usamos hoje, mas eles parecem um pouco diferente. Por exemplo:
11011010.Cuntas so realmente 11.011.010 pginas de um livro? Para entender isso, seguem a mesma lgica que no exemplo anterior,
mas na ordem inversa. Note-se que a aritmtica apenas dois dgitos 0 e 1, ou seja, o sistema de numerao na base 2 (sistema de
numerao binria).

Obviamente, este o mesmo nmero representado dois diferentes sistemas de numerao. A nica diferena entre estas duas
representaes reside no nmero de dgitos necessrios para introduzir um nmero. Dgito (2) usado para escrever o nmero 2 no sistema
decimal, enquanto dois dgitos (1 e 0) so usados para escrever esse nmero no sistema binrio. Agora voc concorda que existem 10
grupos de pessoas? Bem-vindo ao mundo da aritmtica binria! Voc tem alguma idia de onde ele usado?
Salvo em condies laboratoriais controladas rigorosamente, circuitos electrnicos mais complicados no pode especificar exactamente a
diferena entre dois valores (dois valores de tenso, por exemplo), se forem demasiado pequenos (menores do que alguns volts). O motivo
o rudo eltrico e fenmenos que ocorrem dentro do que chamamos de "ambiente de trabalho real" (exemplos desses fenmenos so
mudanas imprevisveis na tenso de alimentao, mudanas de temperatura, os valores do componente tolerncia etc. ...). Imagine um
computador que opera com nmeros decimais, tratando-as como se segue: 0 = 0 V, 1 = 5V, 10V 2 = 3 = 15V, 20V ... 4 = 9 = 45V!?
Algum disse baterias?
Uma soluo muito mais fcil uma lgica binria 0 indicando a ausncia de tenso, enquanto que 1 indica a presena de tenso.
simplesmente mais fcil de escrever 0 ou 1, em vez de "sem tenso" ou "sem tenso". Pela lgica zero (0) e lgica de um (1) rostos
perfeitamente eletrnicos e de fcil execuo todas as operaes aritmticas. Obviamente, ele realmente aplicado aritmtica eletrnica em
que todos os nmeros so representados com apenas dois dgitos e onde s importante saber se h tenso ou no. Claro, estamos
falando de eletrnica digital.

SISTEMA DE NUMERAO HEXADECIMAL


No incio do desenvolvimento dos computadores era bvio que as pessoas tinham dificuldade em trabalhar com nmeros binrios.Portanto,
um novo sistema de numerao, que utilizou 16 smbolos diferentes so estabelecidos. Ele chamado o sistema de numerao
hexadecimal. Este sistema composto de 10 dgitos que so utilizados para (0, 1, 2, 3, ... 9) e seis letras do alfabeto de A, B, C, D, E e F. O
que o objectivo da Esta combinao aparentemente estranho? Basta olhar para a forma como tudo na histria dos nmeros binrios se
encaixa perfeitamente para uma melhor compreenso do assunto.

O maior nmero que pode ser representado com 4 bits 1111. O nmero corresponde ao nmero 15 no sistema decimal. No sistema
hexadecimal esse nmero representado por apenas um dgito F o maior nmero de um dgito no sistema hexadecimal. Voc percebe a
utilidade destas equivalncias? O maior nmero escrito com oito dgitos binrios tanto o maior nmero de sistema hexadecimal de dois
dgitos. Note-se que um computador usa nmeros binrios de 8 dgitos. Talvez esta seja uma coincidncia?

BCD CODE
O cdigo BCD ( B inary- C Oded D ecimal - Cdigo binrio decimal) um cdigo binrio usado para representar nmeros decimais. Ele
usado para circuitos eletrnicos para se comunicar com perifricos usando o sistema de numerao decimal ou usando o sistema binrio
dentro "seu prprio mundo". composto de nmeros binrios de 4 dgitos que representam os dez primeiros dgitos (0, 1, 2, 3 ... 8, 9).Apesar
de quatro dgitos pode fazer 16 combinaes possveis no total, o cdigo BCD normalmente utilizada para o topo dez.

Sistemas de numerao CONVERSO


O sistema de numerao binrio utilizado por microcontroladores, o sistema decimal o que ns encontramos mais compreensvel,
enquanto o sistema hexadecimal tem um equilbrio entre os dois. Portanto, muito importante aprender como converter nmeros de um
sistema para outro nmero, por exemplo, como converter uma srie de zeros e uns de uma forma compreensvel para ns representao.

Convertendo binrio em nmeros decimais


Os dgitos em um nmero binrio tm diferente que depende de sua posio dentro do nmero que eles esto representando pesos. Alm
disso, cada dgito pode ser 1 ou 0, e o seu peso pode ser determinado facilmente por ter a sua posio a partir da direita. Para fazer uma
converso de um nmero binrio para decimal necessrio multiplicar os pesos com os dgitos correspondentes (0 ou 1) e adicionar todos
os resultados. A magia da converso de um nmero binrio em decimal faz maravilhas ... ter dvidas? Considere o seguinte exemplo:

Note que voc precisar usar apenas dois dgitos binrios para representar todos os nmeros decimais de 0 a 3. Portanto, para representar
nmeros 0-7 necessrio usar trs dgitos binrios para representar nmeros de 0 a 15-4 dgitos etc. Simplificando, o nmero pouco maior
que pode ser representado usando n dgitos obtida atravs da elevao da base 2 elevado potncia n. Em seguida, o resultado
subtrado de 1. Por exemplo, se n = 4:
2 4 - 1 = 16-1 = 15
Portanto, ao utilizar quatro dgitos binrios podem representar os nmeros decimais de 0 a 15, valores diferentes so 16 no total.

CONVERSO nmeros hexadecimais em decimais


Para fazer uma converso de um nmero hexadecimal para decimal, hexadecimal cada dgito deve ser multiplicado pelo nmero 16 levantou
para o valor de sua posio. Por exemplo:

CONVERSO nmeros hexadecimais para binrio


No h necessidade de qualquer clculo para converter um nmero hexadecimal em binrio. Os dgitos hexadecimais so simplesmente
substitudos pelos quatro bits apropriados. Uma vez que o dgito hexadecimal mximo equivalente ao nmero decimal 15, necessrio o
uso de quatro bits para representar um dgito hexadecimal. Por exemplo:

NMEROS DE MARCAO

O sistema de numerao hexadecimal, juntamente com sistemas binrios e decimais, so considerados os mais importantes para ns. fcil
de executar uma converso de qualquer nmero hexadecimal em binrio, que tambm fcil de memorizar. Sem No entanto, essas
converses pode causar confuso. Por exemplo, o que a frase realmente significa: "Voc precisa de 110 produtos em uma linha de
montagem"? Dependendo do sistema em questo (binrio, decimal ou hexadecimal), o resultado poderia ser de 6 272 110, ou produtos,
respectivamente. Portanto, para evitar mal-entendidos, diferentes prefixos e sufixos so adicionados diretamente para os nmeros. Ou $
prefixo 0x e sufixo h marca os nmeros no sistema hexadecimal. Por exemplo, o nmero hexadecimal 10AF pode ser escrita como: $ 10AF,
0x10AF ou 10AFh. Da mesma forma, os nmeros binrios obtido normalmente sufixo ou 0B%. Se um nmero no tem sufixo ou prefixo
considerado decimal. Infelizmente, esta forma de nmeros de discagem no padronizado, portanto, depende da aplicao particular.
O seguinte uma tabela comparativa com os valores de 0-255 nmeros representados em trs sistemas de numerao diferentes. Esta
provavelmente a maneira mais fcil de entender a lgica comum aplicado a todos os sistemas de numerao.

Os nmeros negativos
Como vimos, para introduzir um nmero negativo em matemtica, basta adicionar o prefixo "-" (sinal de menos). No entanto, na
programao, para concluir o processo de compilao, nmeros binrios so apenas virando as coisas mais complicadas. Apenas dois
dgitos so utilizados - 0 e 1, enquanto que todos os outros nmeros, smbolos e sinais so formados por combinaes destes dois dgitos.No
caso de nmeros negativos, a soluo o seguinte: Em nmeros negativos, o bit mais significativo (o bit mais esquerda) representa o sinal
do nmero (onde 0 positiva e uma negativa). No caso de um nmero de 8 bits para representar um valor numrico so apenas 7 bits de. De
acordo com este tipo de codificar o nmero 127 o maior nmero assinado positiva que pode ser representada com 8 bits.Alm disso, h
zero (0) positivo e negativo (ver quadro direita). A prxima pergunta : Como possvel saber o nmero ? Por exemplo, se colocarmos o
nmero 10000001, -1 ou 129? No se preocupe, que o compilador alas. Esta a razo pela qual as variveis so declaradas por escrever
o programa. Bem, que vamos discutir a seguir.

BIT
A teoria que um pouco a unidade bsica de informao ... Vamos esquecer por um momento e mostrar por que que, na prtica. A
resposta - nada especial de um bit um dgito binrio. Semelhante a um sistema decimal em que os dgitos de um nmero no tem o
mesmo peso (por exemplo, os dgitos no nmero 444 o mesmo, mas tem valores diferentes), o "significado" de um bit depende da posio
com nmero binrio. Neste caso, no faz sentido falar de unidades, centenas etc. em nmeros binrios, os dgitos so chamados o bit zero
(o primeiro bit para a direita), o primeiro bit (o segundo bit para a direita), etc. Alm disso, uma vez que o sistema utiliza apenas dois dgitos
binrios (0 e 1), o valor de um bit pode ser 0 ou 1.
No fique confuso se voc est um pouco com o valor de 4, 16 ou 64. Estes so os valores representados no sistema decimal.Simplesmente,
ns nos tornamos to acostumados a usar casas decimais que essas expresses tornaram-se comuns. Seria correto dizer por exemplo, "o
valor do sexto bit em qualquer nmero binrio equivalente ao nmero decimal 64". Mas somos todos humanos e velhos hbitos custam a
morrer. Alm disso, como ele soa "nmero um-um-um-zero-zero, ..."?

BYTE
Um byte constitudo por 8 bits colocados lado a lado. Se um bit um dgito, lgico que bytes representar nmeros. Todas as operaes
matemticas pode ser feito por meio deles, como por meio de nmeros decimais comuns. Semelhante a quaisquer dgitos numricos, os
dgitos de um byte no tm o mesmo significado. O bit mais esquerda tem a maior ponderao, de modo que chamado o bit mais
significativo (MSB). O bit mais direita tem o menor peso, por isso chamado o bit menos significativo (LSB). Uma vez que um byte de 8
dgitos podem ser combinados de diferentes maneiras 256, o maior nmero decimal que pode ser representada com um byte 255 (uma
combinao representa um zero).
A mordidela ou quarteto representa um byte metade. Dependendo metade o nmero em questo (esquerda ou direita), mordidelas so
chamados "alto" ou "baixo", respectivamente.

Voc provavelmente j pensou sobre como a eletrnica dentro de um circuito integrado digital, um microcontrolador ou
microprocessador.Como so os circuitos que executam operaes matemticas complicadas e tomar decises? Voc sabia que os seus
regimes, aparentemente complicadas consistem em apenas alguns elementos diferentes, chamados circuitos lgicos ou portas lgicas?

1.3 DETALHES IMPORTANTES


A operao desses elementos baseado nos princpios estabelecidos pelo matemtico britnico George Boole em meados do sculo 19 - ou
seja, antes da inveno da primeira lmpada! Em suma, a idia principal era expressar formas lgicas por meio de funes algbricas.Essa
idia logo se tornou um produto prtico, que mais tarde se tornou o que hoje conhecemos como circuito lgico AND (E), O (OR) ou NO
(NOT). O princpio de operao conhecida como lgebra booleana.

Circuitos Lgicos

Algumas instrues de programa usado por um microcontrolador em funo da mesma maneira como portas lgicas, mas sob a forma de
comandos. Abaixo, vamos explicar o princpio do seu funcionamento.

PORTA E (AND)

Uma porta lgica "Y" tem duas ou mais entradas e uma sada. Neste caso, a porta utilizada tem apenas duas entradas. Uma
lgica um (1) aparece na sua sada apenas se ambas as entradas (A e B) so transportados alta (1). A tabela direita a
tabela verdade que mostra a relao entre as entradas e sadas do porto. O princpio de funcionamento o mesmo quando o
porto tem mais do que duas entradas: a sada fornece um lgico um (1) apenas se todas as entradas so realizadas alta (1).

Qualquer outra combinao de tenses de entrada proporcionar uma lgica zero (0) na sua sada.Usado no programa, a
operao lgica E realizado por um programa de instrues, que falaremos mais tarde. Por agora s sei que a lgica do
programa e refere-se realizao deste tipo de operao sobre os bits correspondentes de dois registros diferentes.
PORTA O (OR)

De modo semelhante, a porta OU tambm tem duas ou mais entradas e uma sada. Se o porto tem apenas duas entradas, o
seguinte aplica-se: a sada fornece um lgico um (1), se uma ou outra entrada (A ou B) colocada em alta (1). Se a porta ou
ter mais de duas entradas, o seguinte aplica-se: A sada fornece um lgico um (1) se, pelo menos, uma entrada colocada em
alta (1). Se todas as informaes so lgica zero (0), a sada ser uma lgica zero (0), bem.

Em um programa, a operao lgica OR realizada da mesma maneira que a operao de Y.


PORTA NO (NO)
NO porta lgica tem uma entrada e uma sada, para que ele funciona de maneira muito simples. Quando um lgico zero (0) aparece na sua
entrada, a sada fornece um lgico um (1) e vice-versa. Isto significa que este porto inverte-se os sinais e, por isso, chamado investidores.

No programa da operao lgica no executada em um byte. O resultado um byte com os bits invertidos. Se os bits em um
byte considerado nmero, o montante investido um complemento a esse nmero. O complemento de um nmero o valor
que adicionado ao nmero de atingir o nmero de 8 dgitos binrios. Em outras palavras, a soma dos nmeros de 8 dgitos e
o seu complemento sempre 255.
PORTA XOR (OU exclusivo)

A XOR (OU exclusivo) um pouco complicado em comparao com os outros. Ele representa uma combinao de todas as
portas acima descritos. A sada fornece um lgico um (1) apenas se as suas entradas esto em diferentes estados lgicos.

No programa, esta operao muitas vezes usado para comparar dois bytes. O restante pode ser utilizado para o mesmo fim
(se o resultado for 0, os bytes so iguais). Ao contrrio do resto, a vantagem de esta operao lgica que possvel obter
resultados negativos.

RECORDS
Um registo ou uma clula de memria um circuito eletrnico que pode salvar o estado de um byte.

SFR REGISTRADORES
Ao contrrio de registros no tm funo especial e predeterminado, cada um microcontrolador tem um nmero de registradores de funes
especiais (SFR), com a funo de incumprimento por parte do fabricante. Os bits so ligados ao circuito interno do microcontrolador, tais
como temporizadores, conversores A / D, osciladores, etc., o que significa que manipular directamente a operao destes circuitos, ou
microcontrolador. Imaginem oito interruptores que lidam com a operao de um pequeno circuito dentro do microcontrolador. Os registos SFR
fazer exatamente o mesmo.

Em outras palavras, o bit de registo de estado definido dentro do programa, uma pequena cabea SFR regista dentro dos
circuitos do microcontrolador, estes circuitos so ligados aos pinos do microcontrolador usado para um dispositivo perifrico ...
Bom, depende voc.

De entrada / sada (E / S)
Para fazer com que um microcontrolador til, deve ser ligada a um dispositivo externo, que , a um perifrico. Cada microcontrolador tem um
ou mais discos (chamadas portas) conectados a pinos do microcontrolador. Por que eles so designados como entrada / sada?Porque voc
pode alterar a funo de cada pino que voc deseja. Por exemplo, voc quer que seu dispositivo para ligar e desligar os trs sinais de LEDs
e, simultaneamente, monitorar o estado lgico de cinco sensores ou botes. Uma das portas devem ser configurados de tal modo que
existem trs sadas (ligado aos LEDs) e cinco entradas (ligados aos sensores). Isto feito simplesmente por meio de software, o que
significa que a funo de qualquer pino pode ser alterado durante a operao.

Uma das caractersticas mais importantes do pino de entrada / sada (E / S) a corrente mxima que pode entregar / receber. Na maioria dos
microcontroladores corrente a partir de um pino que suficiente para disparar um LED ou outro dispositivo de corrente baixa (10-20mA). Os
mais pinos de E / S tem, quanto menor for a corrente mxima de um pino. Em outras palavras, todas as portas de E / S compartilham o atual
mximo indicado na folha de especificao tcnica do microprocessador.
Outra caracterstica importante que os pinos podem ter resistores pull-up. Estas resistncias conectar o pino para a tenso de alimentao
de energia positiva e seu efeito pode ser visto quando a configurao do pino como uma entrada ligada a um interruptor mecnico ou um
boto de presso. As ltimas verses dos microcontroladores tm resistores pull-up de software configurvel.
Cada porta de E / S est normalmente sob o controlo de um registo SFR especializado, o que significa que cada bit do presente registo
determina o estado do pino correspondente no microcontrolador. Por exemplo, escrever uma lgica 1 (um) a um bit do registrador de controle
(SFR), o pino da porta apropriado automaticamente configurado como uma sada. Isso significa que a tenso levou ao pino pode ser lido
como 0 ou 1 lgico. Caso contrrio, escrevendo 0 para registrar SFR, o pino da porta apropriado est configurado como uma sada. Sua
tenso (0V ou 5V) corresponde ao estado do bit apropriado de registro de porta.

MEMORY UNIT
A unidade de memria do microcontrolador usado para armazenar dados. A maneira mais fcil de explicar comparar um grande armrio
com muitas gavetas. Se voc verificar as gavetas claramente que fcil o acesso de qualquer dos seus contedos para ler a etiqueta na
parte frontal da gaveta.

De modo semelhante, cada endereo de memria corresponde a uma localizao da memria. O contedo de qualquer local
pode ser lido e voc pode acessar a dirigi-la. A memria pode ser escritos ou lidos na cidade.
Existem vrios tipos de memria dentro do microcontrolador:
Memria ROM (Read Only Memory) - Read Only Memory
A ROM usado para guardar permanentemente o programa que est sendo executado. O tamanho do programa que pode ser escrita
depende do tamanho da memria. Microcontroladores atuais normalmente usa endereamento de 16 bits, o que significa que eles so
capazes de enderear at 64KB de memria, ou seja, 65.535 locais. Por exemplo, se voc um novato, seu programa raramente excedem o
limite de vrias centenas de instrues. Vrios tipos de ROM.

ROM Mask (mascarado) - MROM


A ROM de mscara de um tipo de ROM cujo contedo definido pelo fabricante. O termo "mscara" o processo de fabrico, em que as
partes de chips so incorporados na mscara usada durante o processo de fotolitografia. No caso da produo de grandes sries, o preo
muito baixo. Esquea a idia de modificar ...

ROM OTP (One Time Programmable ROM) - one-time programmable ROM


A memria programvel one-time permite baixar um programa no chip, mas como seu nome, disse uma vez. Se um erro depois de baix-lo, a
nica coisa a fazer baixar o programa correto em outro chip detectado.

EPROM UV (Erasable Programmable ROM UV) - Erasable Programmable ROM ultravioleta

A encapsulao deste microcontrolador tem uma "janela" reconhecvel no topo. Isto permite expor a superfcie do chip de silcio
de luz ultravioleta e de eliminar completamente o programa em vrios minutos. Em seguida, voc pode baixar um novo
programa na mesma.
A instalao desta janela complicada, o que obviamente afecta o preo. Do nosso ponto de vista, infelizmente, negativa ...
Memria Flash
Este tipo de memria foi inventado nos anos 80 nos laboratrios da empresa INTEL, como forma desenvolvida de UV EPROM. Uma vez que
possvel escrever e apagar o contedo da memria virtualmente nmero ilimitado de vezes, microcontroladores com memria Flash so
ideal para estudar, experimentar e fabricao em pequena escala. Pela grande popularidade desta memria, a maioria so fabricados com
microconroladores tecnologia flash de hoje. Se voc estiver comprando um microcontrolador, esta definitivamente a escolha perfeita!

Memria RAM (Random Access Memory) - Memria de Acesso Aleatrio


Desligar a fonte de alimentao, o contedo da RAM perdido. Ela utilizada para armazenar temporariamente os dados e resultados
imediatos criados e utilizados durante o funcionamento do microcontrolador. Por exemplo, se o programa executa a adio (de qualquer
coisa) voc precisa ter um registro que representa o que chamado de "soma" na vida cotidiana. Para este fim, num dos registos da
memria RAM chamado de "montante" e usada para armazenar os resultados da adio.

EEPROM (ROM programvel apagvel eletricamente) - ROM programvel apagvel electricamente


O contedo da EEPROM pode ser alterado durante a operao (semelhante RAM), mas memorizado permanentemente aps a perda de
fornecimento de energia (semelhante ROM). Portanto, a EEPROM frequentemente utilizada para armazenar valores criadas durante a

operao, tm de ser armazenados de forma permanente. Por exemplo, se voc tiver criado uma chave eletrnica ou um alarme seria timo
para permitir que o usurio crie e digite uma senha para sua conta. Claro, a nova senha deve ser salvo por desligar a fonte de
alimentao. Nesse caso, uma soluo perfeita uma EEPROM do microcontrolador incorporado.

INTERRUPO
A maioria dos programas usam interrupes regulares durante a execuo do programa. O microcontrolador finalidade geralmente reagem
a mudanas no seu ambiente. Em outras palavras, quando algo acontece, o microcontrolador reage de alguma forma ... Por exemplo,
pressionando o boto no controle remoto, registros de microcontroladores e responde a mudana de comando de canal, aumentando ou
diminuindo o volume etc. Se o microcontrolador passar a maior parte do seu tempo verificando vrios botes de forma constante - horas,
dias, isso seria impraticvel.
Portanto, o microcontrolador "aprendeu um truque" durante a sua evoluo. Ao invs de continuar a verificar qualquer pino ou pouco, o
microconrolador deixa o seu "trabalho em espera" para "especialista" que reagir apenas quando acontece alguma coisa digna de nota.
O sinal que informa o processador central de cerca de um tal evento chamada interrupo.

UNIDADE DE PROCESSAMENTO CENTRAL (CENTRAL PROCESSADOR UNIT - CPU)


Como o seu nome sugere, este um aparelho que controla todos os processos dentro do microcontrolador. constituda por vrias unidades
menores, dos quais os mais importantes so:

Decodificador de instruo a parte que decodifica as instrues do programa e ativa outros circuitos com base
nesta. O "Conjunto de Instrues", que diferente para cada famlia de microcontroladores exprime as capacidades
deste circuito;
Unidade lgica aritmtica (unidade lgica aritmtica - ALU) realiza todas as operaes matemticas e lgicas
sobre os dados; e
Acumulador ou ficha de trabalho. um registo SFR intimamente relacionado com a operao da ULA. Ele usado
para armazenar todos os dados no qual executar alguma operao (adicionar, mover). Ele tambm armazena os
resultados prontos para processamento posterior. Um dos registos SFR, chamado Registro de Status (PSW), est
intimamente relacionado com a bateria. Ela mostra o "estado" de um nmero armazenado no acumulador (o nmero
maior ou menor do que zero, etc.) em qualquer dado momento.

BUS
O nibus composto por 8, 16 ou mais cabos. Existem dois tipos de nibus: nibus barramento de endereos e dados. O barramento de
endereos consiste em quantas linhas necessrias para memria endereo. Ele utilizado para transmitir o endereo de memria para a
CPU. O barramento de dados to largo como os dados neste caso de 8 bits ou linhas de largura. Ele utilizado para ligar todos os
circuitos dentro do microcontrolador.

COMUNICAO EM MASSA
A ligao em paralelo entre o microcontrolador e perifricos, atravs da entrada / sada uma soluo perfeita para distncias curtas - at
vrios metros. No entanto, em outros casos em que necessrio para estabelecer a comunicao entre dois dispositivos, em longas
distncias, no possvel a utilizao de uma ligao em paralelo. Em vez disso, a conexo serial utilizada.
Hoje, a maioria dos microcontroladores tm incorporado vrios sistemas diferentes para comunicao serial, como equipamento
standard.Qual destes sistemas ir ser utilizados num caso especfico depende de muitos factores, os mais importantes so:

Quantos dispositivos do microcontrolador tem a troca de dados?


Qual a velocidade de partilha de dados obrigatria?
O que a distncia entre os dispositivos?
Voc precisa transmitir e receber dados simultaneamente?

Um dos mais importantes em termos de comunicao serial o Protocolo de que as coisas devem ser estritamente observados. um
conjunto de regras obrigatrias que se aplicam aos dispositivos de interpretar corretamente os dados que eles trocam uns com os
outros.Felizmente, microcontroladores cuidar disso automaticamente, de modo que o trabalho do programador / usurio reduzida a escrita
e leitura de dados.

SERIAL VELOCIDADE DE TRANSMISSO


Velocidade de transmisso serial ( taxa de transmisso ) o termo utilizado para designar o nmero de bits transmitidos por segundo
[bps]. Note-se que este termo se refere a bits, no bytes! O protocolo tipicamente requer que cada byte transferido em conjunto com vrios
bits de controlo. Isso significa que um byte num fluxo de dados em srie pode consistir em 11 bits. Por exemplo, se a velocidade de
transmisso de srie de 300 bps para um mximo de 37 e um mnimo de 27 bytes podem ser transmitidos por segundo.
Os sistemas mais comumente usados de comunicao serial so:

I 2 C (circuito integrado Inter) - INTER-CIRCUITO INTEGRADO


Inter-circuito integrado um sistema para o intercmbio de dados seriais entre microcontroladores e especializada gerao de circuitos
integrados. usado quando a distncia entre eles curto (o receptor eo transmissor so geralmente na mesma placa de circuito
impresso). A ligao estabelecida por meio de duas linhas - um utilizado para transmitir dados, enquanto o outro usado para
sincronizao (sinal de relgio). Como mostrado na figura, um dispositivo sempre o principal (master - mestre), o que torna a abordar um
chip subordinado (escravo - escravo) antes do incio da comunicao. Assim microcontrolador 112 pode se comunicar com outros
dispositivos. Velocidade de transmisso de srie est geralmente 100 Kb / s (modo padro) ou 10 Kb / s (modo de transmisso baixa
velocidade). Recentemente, tem havido sistemas com velocidade de transmisso de srie 3.4 Mb / s. A distncia entre os dispositivos de
comunicao atravs do barramento I2C limitado a poucos metros.

SPI (Serial Peripheral Interface BUS) - barramento serial interface de perifricos


Um nibus de interface perifrica serial um sistema de comunicao serial que usa at quatro linhas (normalmente s so necessrios trs)
- para receber os dados, para transmitir dados para sincronizar e (opcional) para selecionar o dispositivo que ele se comunica. Esta a
ligao duplex total, o que significa que os dados so enviados e recebidos simultaneamente.
O dbito mximo de transmisso mais elevada do que no sistema de ligao I2C.

UART (Universal Asynchronous Receiver / Transmitter) - Universal Asynchronous Receiver-Transmitter


Este tipo de conexo assncrona, o que significa que uma linha especial para transmitir o sinal de relgio no usado. Em algumas
aplicaes este recurso crucial (por exemplo, enviar dados remotamente por RF ou luz infravermelha). Uma vez que apenas uma linha
usado para comunicao, tanto o receptor como o transmissor receber e enviar dados a mesma velocidade que foi pr-selecionado para
manter a sincronizao necessria. Este um modo simples para transmitir dados, pois representa basicamente uma converso de dados de
8 bits a partir de paralelo para srie. A taxa de transmisso no alta, at 1 Mbit / s.

OSC

Uniformes impulsos gerados pelo oscilador para permitir o funcionamento normal e sincronizada de todos os circuitos do
microcontrolador. O oscilador tipicamente configurada de modo que utilize um ressoador de cristal de quartzo ou de cermica
para a estabilizao de frequncia. Alm disso, ele pode funcionar como um circuito autnomo (tal como RC do oscilador).
importante dizer que as instrues do programa no so executadas taxa imposta pelo mesmo oscilador, mas vrias vezes

mais lento. Isso porque cada instruo executada em vrios ciclos do oscilador. Em alguns microcontroladores o mesmo
nmero de ciclos for preciso para executar todas as instrues, enquanto outros no o tempo de funcionamento o mesmo
para todas as instrues. Portanto, se o sistema utiliza a cristal de quartzo com uma frequncia de 20 MHz, o tempo de
execuo de uma instruo de programa de 50 ns, mas a 200, 400 ou 800 nS, dependendo do tipo de microcontrolador.

CIRCUITO DE ALIMENTAO
Devemos mencionar duas coisas merece ateno em relao ao microcontrolador fonte de alimentao do circuito:

Brown para fora uma condio potencialmente perigosa que ocorre quando o microcontrolador ou desligar se a
voltagem da fonte de alimentao para fora das margens devido ao rudo eltrico. Desde que o microcontrolador tem
vrios circuitos que operam em diferentes nveis de tenso, esse estado pode causar um comportamento
descontrolado. Para evitar isso, o microcontrolador normalmente tem um construdo para o circuito de reset marrom
para fora. O circuito repe o microcontrolador imediatamente se a tenso de alimentao cair abaixo do limite.
O pino de reset (reiniciar), muitas vezes rotulado MCLR (Master Clear Reset), serve para reiniciar o microcontrolador
externo atravs da aplicao de um (1) Software zero (0) ou um, dependendo do tipo de microcontrolador. Se o circuito
marrom para fora no incorporada, um circuito externo simples para redefinio de marrom para fora pode conectar o
pino MCLR.

Temporizadores / Contadores
O oscilador de cristal de quartzo microcontrolador usado para a operao. Embora no seja a soluo mais simples, h muitas razes para
us-lo. A frequncia do oscilador definido com preciso e muito estvel, por isso sempre gera pulsos da mesma largura, o que os torna
perfeitos para temporizao. Esses osciladores so usados em relgios de quartzo. Se voc precisa para medir o tempo decorrido entre dois
eventos, basta contar os impulsos gerados pelo oscilador. Isso exatamente o que faz o timer.

A maioria dos programas usam estes temporizadores eletrnicos em miniatura. Registos SFR so geralmente 8 ou 16 bits, cujo contedo
automaticamente aumentado com cada impulso. Uma vez que o registo est cheio, gerada uma interrupo!
Se o temporizador interno utiliza o oscilador de quartzo para o seu funcionamento, possvel medir o tempo entre os dois eventos (o valor do
registo, no momento de iniciar a medio T1, quando a medio terminado T2, o tempo decorrido Como resultado da subtraco T2 T1). Se os registros so aumentadas com os impulsos que vem da fonte externa, tal temporizador torna-se um contador.

Esta uma simples explicao do seu funcionamento. um pouco mais complicado na prtica.

COMO FAZER os temporizadores?


Na prtica, os impulsos gerados pelo circuito oscilador de quartzo so tomadas uma vez por ciclo da mquina directamente ou divisor, o
aumento do nmero no registador de cronometro. Se uma instruo (um ciclo de mquina) de quatro perodos do oscilador de quartzo, este
nmero ser alterada de um milho de vezes por segundo (cada microssegundos) para incorporar quartzo oscila a uma frequncia de 4 MHz.

fcil para medir intervalos de tempo curtos, tal como descrito acima (at 256 microssegundos, porque o maior nmero que pode conter
um registo). Esta desvantagem bvia pode ser superada de vrias maneiras: usando o oscilador mais lenta, atravs de registos com mais
bits, o divisor ou interrupo. As duas primeiras solues tm alguns pontos fracos, por isso recomendamos utilizar o divisor e / ou
interrupo.

Prescaler IN Use um timer OPERAO


Um divisor um dispositivo eletrnico usado para dividir a freqncia por um fator predeterminado. Isso significa que voc precisa para
realizar uma, duas, quatro ou mais pulsos na sua entrada para gerar um pulso na sada. A maioria dos microcontroladores tm construdo um
ou mais pr-scalers e sua taxa de diviso pode ser alterada no mbito do programa. O divisor utilizado quando necessrio medir a
perodos mais longos de tempo. Se o temporizador de vigilncia e partes temporizador de um divisor, no pode ser utilizado por ambos
simultaneamente.

INTERRUPO NO usar um timer OPERAO


Se o registro temporizador 8 de bits, o maior nmero que pode ser escrito nele 255 (em registros de 16 bits o nmero 65535). Se esse
nmero for excedido, o cronmetro reinicia automaticamente e contando comea novamente do zero. Isso chamado de estouro ou
estouro (overflow) . Permitido pelo programa, o excesso pode causar uma interrupo, o que abre possibilidades completamente novas.Por
exemplo, o estado de fichas usado para contar segundos, minutos ou dias, pode ser implementada de uma rotina de interrupo. Todo o
processo (excepto a rotina de interrupo) realizada internamente, permitindo que os circuitos principais do microcontrolador est a
funcionar correctamente.

A figura acima descreve a utilizao de uma interrupo na operao do temporizador. Para atribuir um divisor para a durao do
temporizador atrasos arbitrrios ocorrer com o mnimo de interferncia na execuo do programa principal.

CONTADORES
Se um temporizador fornecido pela entrada de impulsos, sendo o pino de entrada no microcontrolador, um contador ocorre. Ele ,
obviamente, o mesmo circuito eletrnico. A nica diferena que os impulsos de contagem so introduzidas pelo pino de entrada e a sua
durao (largura) no est definido. Por isso, eles no podem ser utilizados para a medio de tempo, mas utilizado para outros fins, por
exemplo: contar os produtos na linha de produo, o nmero de rotaes de um veio do motor, os passageiros etc. (Dependendo do sensor
utilizado.

Watchdog timer (watchdog)


O co de guarda um timer ligado a um oscilador RC totalmente independente dentro do microcontrolador.
Se o co de guarda est habilitado, cada vez que voc contar para o valor mximo no estouro de log ocorre um sinal de reset do
microcontrolador e a execuo do programa comear na primeira instruo gerada. O objetivo impedir que isso acontea usando o
comando apropriado.
A ideia baseia-se no facto de cada programa executado em vrias voltas, mais longo ou mais curto. Se as instrues redefinir o watchdog
timer so colocados em locais estratgicos do programa, outros comandos que so executados regularmente, funcionamento do co de
guarda no afetar a execuo do programa. Se por qualquer motivo (rudo eltrico freqente na indstria) contador de programa "presos"
dentro de um loop infinito, o valor do Registro continuaro a aumentar pelo watchdog timer atingir o valor mximo, o registro vai transbordar
e, Aleluia ocorre repartio!

A/D

Os sinais do mundo real so muito diferentes daqueles que "entende" o microcontrolador (zeros e uns), ento eles devem ser
convertidos para que o microcontrolador possa entender. Um conversor analgico-digital um circuito eletrnico destinado a
converter os sinais contnuos em nmeros digitais discretos. Em outras palavras, este circuito converte um nmero real em um
nmero binrio e envia para a CPU para processamento. Este mdulo utilizado para medir a voltagem no pino de entrada.
O resultado desta medio um nmero (valor digital) utilizada e processada mais tarde no programa.

Arquitetura interna
Todos os microcontroladores atuais usam um dos dois modelos bsicos de arquitetura chamado Harvard e von-Neumann .
Eles so duas formas diferentes de troca de dados entre a CPU ea memria.

Arquitetura Von Neumann-

Microcontroladores que usam arquitetura Neumann von- ter um nico bloco de memria e um barramento de dados de 8
bits. Como todos os dados so trocados atravs destes oito linhas, este canal est sobrecarregado, e comunicao em si
muito lento e ineficiente. A CPU pode ler um conjunto de dados de instruo ou de leitura / escrita de / para a memria. Os dois
processos no podem ocorrer simultaneamente uma vez que as instrues e dados de usar o mesmo barramento. Por
exemplo, se uma linha de programa diz que o registo de RAM chamado de "SUM" deve ser aumentado em um

(instruo: INCF SUMA), o microcontrolador ir:


1. Leia parte da instruo de programa que especifica o que deve fazer (neste caso a instruo para aumentar "INCF "
2. Leia a mesma instruo que especifica em que os dados devem ser executadas (neste caso o contedo do reg
"SUM")
3. Depois de ser aumentado, o contedo deste registo deve ser escrito no registro que foi lido (registro de endereos "SU
O mesmo bus de dados utilizado para todas estas operaes intermdias.

Arquitetura Harvard

Microcontroladores usando esta arquitetura tem dois barramentos de dados diferentes. Uma de 8 bits de largura e se conecta
a CPU com memria RAM. O outro consiste em vrias linhas (12, 14 ou 16) e ligado CPU e ROM. Portanto, a CPU pode ler
as instrues e executar acesso memria de dados ao mesmo tempo. Uma vez que todos os registos da RAM so de 8 bits
de largura, todos os dados dentro do microcontrolador so trocados a mesma largura. Durante o processo de programa de
escrita, apenas os dados de 8 bits so tratados. Em outras palavras, tudo o que voc pode mudar no programa e que pode
afetar de 8 bits. Todos os programas escritos para estes microcontroladores sero armazenados na ROM interna do
microcontrolador depois de ser compilado para cdigo de mquina. No entanto, essas localizaes ROM no tm 8, mas 12,
14 ou 16 bits. Adicionais 4, 6 ou 8 bits representam uma declarao que especifica o CPU o que fazer com os dados de 8 bits.
As vantagens deste projeto so:

Todos os dados do programa so um byte (8 bits) de largura. Como um barramento de dados utilizado para a leitura de
um programa tem mais linhas (12, 14 ou 16), ambos de instrues e os dados podem ser lidos simultaneamente
usando estes bits adicionais. Portanto, todas as instrues so executadas num nico ciclo, excepto as instrues de
salto so dois ciclos.
O fato de um programa (ROM) e dados temporria (RAM) so separadas, permitindo que o processador para executar
instrues dois simultaneamente. Simplificando, durante a leitura ou escrita RAM (que marca o fim de uma instruo),
a prxima instruo lida por outro nibus realizada.
Em microcontroladores que usam a arquitetura de von-Neumann , voc nunca sabe o quanto de memria um negcio
programa. Geralmente, a maioria das instrues do programa de ocupar duas posies de memria (um diz o que
deve ser feito, enquanto o outro contm infor maes sobre o qual os dados devem ser realizados). No entanto, esta
no uma frmula rgida comum, mas o caso. Em microcontroladores que usam uma arquitetura de Harvard, palavra
programa de nibus mais largo do que um byte, permitindo que cada palavra programa composto de uma instruo
e dados. Em outras palavras, uma localizao de memria - um programa de instrues.

INSTRUES DE JOGO

O nome coletivo para todas as instrues que podem entender o microcontrolador chamado conjunto de instrues . Quando
um programa conjunto, na verdade instrues especificadas na ordem em que devem ser executados est escrito. A principal
restrio o nmero de comandos disponveis. Fabricantes aceitar ou abordagens a seguir descritas:

RISC (Reduced Instruction Set Computer) - Computador com Set de instrues reduzido
Neste caso, a ideia que o microcontrolador executa apenas reconhece e operaes bsicas (somar, subtrair, cpia, etc ...) as operaes
mais complicadas so realizadas combinando-as (por exemplo, a multiplicao realizada atravs da realizao da adio sucessiva).
como tentar explicar a algum algumas palavras como chegar ao aeroporto em uma nova cidade. No entanto, nem tudo to escuro. Alm
disso, o microcontrolador muito rpido por isso no possvel ver todos os aritmticos "stunts" que executa. O usurio pode ver apenas o
resultado final de todas as transaces. Finalmente, no to difcil de explicar onde o aeroporto se as palavras certas so utilizadas, tais
como: direita, esquerda, etc. quilmetros

CISC (Complex Instruction Set Computer) - Computadores com um conjunto de instrues complexas
CISC se ope a RISC! Microcontroladores destinados a reconhecer mais de 200 instrues diferentes realmente pode fazer muitas coisas
em alta velocidade. No entanto, deve-se saber como utilizar todas as possibilidades oferecidas por uma lngua to rica, que nem sempre
to fcil ...

COMO ESCOLHER UM microcontrolador?


Bem, se voc um novato, e foi decidido a trabalhar com microcontroladores. Parabns pela escolha! No entanto, primeira vista, no fcil
escolher o microcontrolador mais adequado como parece primeira vista. O problema no a pequena gama de dispositivos para escolher,
mas muito pelo contrrio!
Antes de comear a projetar um dispositivo baseado em um microcontrolador, considere o seguinte: quantas entradas / linhas so
necessrias para o funcionamento, o dispositivo iria realizar outras operaes de ligar / desligar um rel, voc precisa de algum especializada
como o mdulo de comunicao srie A / D conversor etc. Quando voc tem uma imagem clara do que voc quer, o intervalo de seleco
muito reduzida, e ele est pensando sobre o preo. Ser que voc tem vrios dispositivos? Vrias centenas? Um milho? Enfim, agora
mais clara.
Se voc est pensando em todas essas coisas em primeiro lugar, tudo vai parecer um pouco confuso. Por essa razo, ir passo a passo.Em
primeiro lugar, escolher o fabricante, isto , a famlia de microcontroladores ofertas. Ento, aprender a trabalhar com um modelo
especfico. Basta aprender o que voc precisa para aprender, no de muitos detalhes. Resolver o problema especfico e uma coisa
surpreendente vai acontecer - ser capaz de lidar com qualquer modelo do mesmo fabricante ...
Mais ou menos, tudo parece andar de bicicleta: depois de vrias quedas inevitveis no incio, ser capaz de equilibrar e montar qualquer
bicicleta. Claro, ele nunca se esquece tanto ciclismo, e as habilidades de programao!

1,4 Microcontroladores PIC


O microcontrolador PIC desenvolvido pela Microchip Technology provavelmente a melhor opo se voc um novato. H vrias razes
que isso verdade ...
O verdadeiro nome desta microcontrolador PIC ( Peripheral Controller Interface ), conhecido como o PIC. Seu primeiro predecessor foi
criada em 1975 pela empresa General Instruments . Este chip chamado PIC1650 foi concebido para fins completamente diferentes. Dez anos
mais tarde, a adio de uma EEPROM, este tornou-se um circuito microcontrolador PIC real. Alguns anos atrs, a empresa Microchip
Technology fabricado a amostra 5000000000. Se voc estiver interessado em aprender mais sobre isso, continue a ler.
Se voc estiver interessado em aprender mais sobre isso, basta manter a leitura.
A idia principal deste livro fornecer as informaes necessrias para que o usurio seja capaz de usar microcontroladores em prtica
depois de l-lo. Para evitar explicaes pesados e histrias interminveis sobre as caractersticas teis de diferentes microcontroladores,
este livro descreve o funcionamento de um determinado modelo que pertence "classe mdia alta". PIC16F887 - poderoso o suficiente
para ser digno de ateno e simples o suficiente para ser usado por qualquer pessoa. Assim, os captulos seguintes descrevem esse
microcontrolador em detalhes e tambm se referem a toda a famlia PIC.

Famlia

ROM
[Kb]

RAM
[byte
s]

Pine
s

Freqnc
ia
de
clock.
[MHz]

Entrad
as
A/D

Resolu
o
do
convers
or A / D

Comparad
ores

16/08
bit
temporizad
ores

Comunica
o Serial

Sad
as
PWM

Outro
s

Arquitetura do low-end 8-bit palavra de instruo 12-bit


PIC10FXXX

0.37
5-,75

16-24

6-8

4-8

0-2

0-1

1x8

PIC12Fxxx

0,751,5

25
38

4-8

0-3

0-1

1x8

EEPRO
M

PIC16Fxxx

0,753

25134

1444

20

0-3

0-2

1x8

EEPRO
M

PIC16HVX
XX

1,5

25

1820

20

1x8

VDD =
15V

Arquitetura de mdio porte de 8 bits instruo palavra de 14 bits


PIC12Fxxx

1,753,5

64128

20

0-4

10

1-2 x 16 8 1
x

0-1

EEPRO
M

PIC12HVX
XX

1.75

64

20

0-4

10

1-2 x 16 8 1
x

0-1

PIC16Fxxx

1,7514

64368

1464

20

0-13

8 ou 10

0-2

1-2 x 16 8 1
x

I2C
SPI
USART

0-3

PIC16HVX
XX

1,753,5

64128

1420

20

0-12

10

2 x 8 x 1 16

I2C
SPI
USART

0-3

0-2 x 2-03
agosto x 16

USB2.0
CAN2.0
I2C
SPI
USART

0-5

USB2.0
Ethernet
I2C
SPI
USART

2-5

I2C
SPI
USART

Arquitetura de high-end 8-bit palavra de instruo de 16 bits

PIC18FXXX

4128

256 3936

1880

PIC18FXXJ
XX

8128

1024 3936

28100

40 - 48

10-16

10

0-2 x 2-03
agosto x 16

PIC18FXXK
XX

8-64

768 3936

28 44

64

10-13

10

1 x 8 3 x 16

32-48

4-16

10 ou 12

Todos os microcontroladores PIC usam uma arquitetura de Harvard, o que significa que a sua memria de programa est ligado CPU por
mais de 8 linhas. H microcontroladores de 12, 14 e 16 bits, dependendo da largura do barramento. A tabela acima mostra as principais
caractersticas destas trs categorias.
Como voc pode ver no grfico na pgina anterior, exceto "16 bits monstros" PIC e PIC 24FXXX 24HXXX - todos os microcontroladores so
arquitetura Harvard de 8 bits e pertencer a um dos trs grupos. Portanto, dependendo do tamanho da palavra programa so primeira,
segunda e terceira categoria de microcontroladores, ou seja, microcontroladores 12, 14 ou 16 bits. Desde que tm similares de ncleo 8 bits,
todos usam o mesmo conjunto de instrues e "esqueleto" bsico de hardware ligado a unidades perifricas ou menos.
Microcontroladores PIC com palavras de 14 bits programa parece ser a melhor escolha para iniciantes. Aqui est o porqu ...

INSTRUES DE JOGO
O conjunto de instrues para o 16F8XX microcontrolador inclui 35 instrues no total. A razo para um nmero to pequeno de instrues
reside no arquietectura RISC. Isto significa que as instrues so bem optimizada do ponto de vista da velocidade de funcionamento, da
simplicidade da arquitectura e do cdigo de compacidade. A desvantagem da arquitetura RISC esperado programador que aborda estas
instrues. Claro, isso s relevante se a linguagem de programao assembler usado. Este livro refere-se programao em alto nvel
linguagem C, o que significa que a maioria do trabalho foi feito por outra pessoa. Assim, s voc tem que usar instrues relativamente
simples.

TEMPO DE EXECUO DE INSTRUES


Todas as instrues para executar em um ciclo. As nicas excees podem ser instrues de desvio condicional ou instrues que alteram o
contedo do contador de programa. Em ambos os casos, dois ciclos de relgio so requeridos para a execuo da instruo, enquanto o
segundo ciclo executado como um NOP ( No Operation ). Instrues de ciclo composto por quatro ciclos de clock. Se um oscilador de 4

MHz usado, o tempo nominal para a execuo da instruo 1S. Quanto a instrues de desvio, o tempo de execuo da instruo
2S.
Conjunto de instrues de microcontroladores PIC 14 bits:
INSTRUO

DESCRIO

OPERAO

B ANDEIRA

CLK

Instrues para a transmisso de dados


K MOVLW

Mova literal para W

k -> w

MOVWF f

Mover o contedo de W af

W -> f

MOVF f, d

Mover o contedo de moda

f -> d

CLRW

Exclua o contedo da W

0 -> W

CLRF f

Exclua o contedo da f

0 -> f

Swapf f, d

Mordidelas de swap em f

f (7: 4), (3: 0) -> f (3: 0), (7:


4)

1, 2

1, 2

Logic - instrues aritmticas


K addlw

Adicionar literal para W

W + K -> W

C, CC, Z

ADDWF f, d

Adicionar o contedo de W f

W + f -> d

C, CC, Z

K SUBLW

Subtrair W a partir literal

kW -> W

C, CC, Z

SUBWF f, d

Subtrair W de f

fW -> d

C, CC, Z

K ANDLW

E W com literal

W e K -> W

ANDWF f, d

E W com f

W e F -> d

K IORLW

Inclusive OR W com literal

W ou k -> W

IORWF f, d

Inclusive OR W com f

W ou f -> d

1, 2

XORWF f, d

OU exclusivo W com literal

XOR k W -> W

1, 2

K XORLW

OU exclusivo W com f

W XOR f -> d

INCF f, d

Adicionar uma af

f + 1 -> f

1, 2

DECF f, d

Subtrair 1 af

f-1 -> f

1, 2

RLF f, d

F Rodar para a esquerda atravs de carry

1, 2

RRF f, d

F Gire para a direita atravs carry

1, 2

COMF f, d

Complemento f

1, 2

f -> d

1, 2

1, 2

1, 2

Instrues orientadas por bit


BCF f, b

Defina como 0 bit de registro b f

0 -> f (b)

1, 2

BSF f, b

Bit definido como 1 log b f

1 -> f (b)

1, 2

Instrues de controle de programa


BTFSC f, b

Salta se pouco b f log 0

Ir se f (b) = 0

1 (2)

BTFSS f, b

Salta se pouco b Reg. f 1

Ir se f (b) = 1

1 (2)

DECFSZ f, d

F diminuio a 1. Salta se o resultado for


0

f-1 -> D saltar se Z = 1

1 (2)

1, 2, 3

INCFSZ f, d

F aumento para 1. Salta se o resultado


1

f + 1 -> D saltar se Z = 0

1 (2)

1, 2, 3

GOTO k

Ir para um endereo

k -> PC

CHAMADA k

Chamar um sub-rotina

PC -> TOS, k -> PC

RETORNO

Retornando de uma sub-rotina

TOS -> PC

K RETLW

Retorno com literal em W

k -> W, TOS -> PC

RETFIE

A interupcin retorno

TOS -> PC, 1 -> GIE

Outras instrues
NOP

Nenhuma operao

TOS -> PC, 1 -> GIE

CLRWDT

Reinicie o watchdog timer

0 -> WDT, 1 -> TO, 1 -> PD

TO, PD

SLEEP

Coloque em repouso

0 -> WDT, 1 -> TO, 0 -> PD

TO, PD

* 1 Se um registro de E / S for alterada, o valor utilizado ser o valor apresentado nos pinos do microcontrolador.
*

Se

instruo

executada

em

TMR

registrar

se

* 3 Se a instruo executada em TMR registo e se d = 1, o prescaler sero apagados.

1,

prescaler

sero

apagados.

Arquitetura dos microcontroladores PIC de 8 bits. Quais destes pertencem aos mdulos do microcontrolador vai depender do tipo de
microcontrolador.

Captulo 2 - A programao de microcontroladores


Voc certamente sabe que no suficiente apenas para conectar o microcontrolador para ligar os outros componentes e uma fonte de
energia para faz-lo funcionar, certo? Temos de fazer mais. Voc precisa programar o microcontrolador. Se voc acha que complicado,
voc est errado. Todo o procedimento muito simples. Basta ler o texto para entender o que queremos dizer.

2.1 linguagens de programao


CARACTERSTICAS PRINCIPAIS 2.2 MikroC
2.3 TIPOS DE DADOS MikroC
2.4 Variveis e constantes
2,5 OPERADORES
2.6 As estruturas de controle
TIPOS DE DADOS AVANADA 2.7
2.8 FUNES
2.9 RECURSOS de pr-processamento
2.10 mikroC PRO para PIC
2.11 PROGRAMAO DE USAR O PIC mikroC PRO para PIC

2.1 linguagens de programao

O microcontrolador executa o programa carregado na memria flash.Este chamado o cdigo executvel compreende uma
srie de uns e zeros, aparentemente sem sentido. Dependendo da arquitetura do microcontrolador, as palavras de cdigo
binrio constitudo por 12, 14 ou 16 bits de largura. Cada palavra interpretado pelo processador como uma instruo para
ser executada durante o funcionamento do microcontrolador. Todas as instrues que o microcontrolador pode reconhecer e
executar so chamados coletivamente conjunto de instrues. Como mais fcil de trabalhar com o sistema de numerao
hexadecimal, o cdigo executvel frequentemente representado como uma srie de nmeros hexadecimais chamado cdigo
hexadecimal. Microcontroladores PIC, nas palavras do programa de 14 bits de largura, o conjunto de instrues tem 35
instrues diferentes.

Assembly Language

Como o processo de escrever cdigo executvel foi consideravelmente rdua, por isso, foi criada a primeira linguagem de
programao chamada Assembler (ASM). Aps a sintaxe bsica de assembler, que era mais fcil escrever e entender o
cdigo. As instrues de montagem consistem de abreviaturas significativas e cada instruo corresponde a uma localizao
da memria. Um programa chamado compila assembler (traduz) instrues em linguagem de montagem em cdigo de
mquina (cdigo binrio).
Programa Heste compila instruo por instruo sem otimizao. Como pode controlar em detalhe todos os processos postos em prtica
dentro do chip, esta linguagem de programao ainda popular.

Vantagens de linguagens de programao de alto nvel


Apesar de todos os lados bons, linguagem assembly tem algumas desvantagens:

Mesmo uma transao no programa escrito em conjunto consiste em vrias direes, tornando-se muito longas e
pesadas.
Cada tipo de microcontrolador tem seu prprio conjunto de instrues que um programador precisa saber para
escrever um programa
Um programador tem de saber o hardware do microcontrolador para escrever um programa

Programa escrito em C (O mesmo programa compilado para cdigo assembly):

Linguagens de programao de alto nvel (Basic, Pascal, C, etc.) foram criados com a finalidade de superar as desvantagens da
montadora. Em linguagens de programao vrias instrues de montagem seniores so substitudas por uma sentena. O programador no
tem que saber o conjunto de instrues ou recursos de hardware do microcontrolador utilizado. impossvel saber exatamente como cada
sentena executada de qualquer maneira, no importa. Embora voc sempre pode inserir no programa escrito em seqncia de
montagem.
Se voc j escreveu um programa para uma linguagem de montagem microcontrolador PIC, voc provavelmente sabe que a arquitetura
RISC carece de algumas instrues. Por exemplo, no existe nenhuma instruo apropriada para a multiplicao de dois nmeros. Claro
que, para cada problema h uma soluo e este no exceo, graas aritmtica que permite decompor operaes complexas em muitas
operaes simples. Neste caso, a multiplicao pode ser substitudo facilmente por adio sucessiva (axb = A + A + A + ... + a).Estamos no
incio de uma longa histria ... No se preocupe, quando usando uma dessas linguagens de programao, tais como alto nvel C, porque o
compilador automaticamente encontrar a soluo para este problema e similares. B para multiplicar nmeros, basta digitar a * b.

Linguagem C
A linguagem C tem todas as vantagens de uma linguagem de programao de alto nvel (descrito acima) e permite-lhe executar algumas
operaes em ambos os bytes e bits (em operaes lgicas, shift etc). Caractersticas C pode ser muito til ao programar
microcontroladores. Alm disso, padronizado C (padro ANSI), muito porttil, de modo que o mesmo cdigo pode ser usado muitas vezes
em diferentes projectos. Tornando-o acessvel a qualquer pessoa que conhece esta lngua, independentemente da utilizao prevista para o
microcontrolador. C uma linguagem compilada, o que significa que os arquivos de origem que contm o cdigo C traduzido em linguagem
de mquina pelo compilador. Todas estas caractersticas fizeram o C uma das linguagens de programao mais populares.

A figura acima um exemplo geral do que acontece quando compilar programa de uma linguagem de programao de alto nvel baixo.

CARACTERSTICAS PRINCIPAIS 2.2 MikroC


Aqui apresentamos os principais elementos da linguagem mikroC desenvolvido pela mikroElektronika. Esta linguagem muito semelhante ao
padro C, no entanto, em certos aspectos, que difere do padro ANSI em algumas caractersticas. Algumas destas diferenas esto
relacionadas com melhorias destinadas a facilitar a programao de microcontroladores PIC, enquanto outros so o resultado da limitao da
arquitectura de hardware do PIC. Aqui ns apresentamos caractersticas especficas de linguagem mikroC microcontroladores PIC
programao. O termo C usada para referir-se as caractersticas comuns das linguagens C e MikroC.

Este livro descreve uma aplicao muito especfica da linguagem de programao C utilizada no mikroC PRO para PIC. Neste caso, o
compilador for utilizado para microcontroladores PIC programao.

FASES DE COMPILAO
O processo de compilao envolve vrias etapas e executado automaticamente pelo compilador. Por uma compreenso bsica de como
ele pode ser til para entender o conceito de linguagem mikroC.
O arquivo de origem contm o cdigo que voc escreve em mikroC para programar o microcontrolador. O pr-processador pelo compilador
utilizada automaticamente quando o processo de compilao. O compilador procura directivas de pr-processador (que sempre comeam
com '#') no cdigo e modificar o cdigo-fonte em conformidade com as directivas. Nesta fase, eles so conduzidos incluso arquivo, macro
definio e constantes, etc., o que facilita o processo. Mais tarde, vamos descrever estas polticas em detalhe. O analisador (parser) remove
todo o cdigo informaes inteis (comentrios, espaos). Em seguida, o compilador traduz o cdigo em um arquivo binrio chamado
arquivo .mcl. O ligante (linker) recupera todas as informaes necessrias para executar os arquivos externos e os agrupa em um nico

arquivo (.DBG). Alm disso, um projeto pode conter mais de um arquivo de origem e o programador pode usar funes pr-definidas e
agrupadas em arquivos chamados bibliotecas. Finalmente, o gerador hex produz um arquivo hex. Este o ficheiro a ser carregado para o
microcontrolador.

Todo o processo de compilao que inclui todos os passos acima chamado de "construo" .

PROGRAMA DE ESTRUTURA
A principal idia de escrever um programa em C para "quebrar" um problema maior em vrios pedaos menores. Suponha que voc
precise escrever um programa para o microcontrolador para medir a temperatura e exibir os resultados em um LCD. O processo de medio
realizado por um sensor de temperatura que converte a tenso. O microcontrolador utiliza o conversor A / D para converter a tenso (valor
analgico) de um nmero (valor digital), que ento enviado para o LCD por vrios condutores. Consequentemente, o programa dividido
em quatro partes, cada uma das quais corresponde a uma ao especfica:
1. Habilitar e configurar o A / D construdos;
2. Medir o valor analgico;
3. Calcular temperatura; e
4. Enviar os dados no formato apropriado para o LCD;

Linguagens de programao como de alto nvel C permitir-lhe para resolver este problema com facilidade para escrever quatro
funes a serem executadas ciclicamente nonstop.
A ideia geral a de dividir o problema em vrios pedaos, cada um dos quais pode ser escrito como uma nica funo. Todos
os programas escritos em mikroC conter pelo menos uma chamada na funo main () entre chaves {} instrues a serem
executadas. Esta a primeira funo a ser executada no incio da execuo do programa. As outras funes pode ser
chamado na funo principal. Em outras palavras, podemos dizer que a funo main () obrigatria, enquanto outros so
opcionais. Se voc no tiver escrito um programa em C, voc provavelmente vai encontrar tudo isso confuso. No se preocupe,
aceit-lo como para agora e mais tarde entender a sintaxe.

E agora, o seu primeiro programa 'real'! A figura mostra a estrutura do programa, apontando as partes onde .

Como escrever cdigo em C muito importante. Por exemplo, C difere maisculas de minsculas, assim que a funo main () no pode
escrever main () ou Main (). Alm disso, observe que duas linhas de cdigo dentro da funo termina com um ponto e vrgula. Em C todas as
sentenas devem terminar com um ponto e vrgula ';', para que o compilador pode isolar e traduzi-los em cdigo de mquina.

REVISES
Os comentrios so partes do programa usado para esclarecer as instrues do programa ou fornecer mais informaes. O compilador
ignora os comentrios e no compilado para cdigo executvel. Simplificando, o compilador capaz de reconhecer caracteres especiais
utilizados para designar onde os comentrios de incio e fim e no faz nada se o texto entre eles durante a compilao. Dois tipos de tais
personagens. Alguns designar as longas observaes que abrangem vrias linhas marcadas pela sequncia de programa especial /*...*/,
enquanto outros designar as breves comentrios que se encaixam em uma nica linha //. Embora os comentrios no podem afectar a
execuo do programa, eles so to importantes quanto qualquer outra parte do programa. Aqui est o porqu ... Muitas vezes necessrio
para melhorar, modificar, atualizar, simplificar um programa ... possvel interpretar at mesmo programas simples sem usar o comentrio.

2.3 TIPOS DE DADOS MikroC


Na linguagem C, os dados tem um tipo, ou seja, cada um dos dados utilizados no programa deve ter um tipo especificado. Isso permite que o
compilador possa saber o tamanho dos dados (nmero de bytes necessrios na memria) e sua representao. Existem vrios tipos de

dados que podem ser utilizados na linguagem de programao mikroC dependendo do tamanho dos dados e a gama de valores. A tabela
mostra a gama de valores que os dados podem ter, quando utilizada na sua forma bsica.
TIPO
DADOS

DE

TAM AN H O
DE BITS)

DESCRI O

(NMERO

F AI X A D E V AL O R E S

char

Texto (caracteres)

de 0-255

int

Valores inteiros

16

-32.768-32.767

float

Valores de ponto flutuante

32

de 1,17549435082
6,80564774407 10 38

10

-38

double

Valores em dupla
ponto flutuante

32

de 1,17549435082
6,80564774407 10 38

10

-38

preciso

de

* Devido s limitaes impostas pelo hardware do microcontrolador, impossvel alcanar uma maior preciso dos dados como o tipo
float. Portanto, o tipo double equivale a float no mikroC.
Pela adio de um prefixo (qualificador) para qualquer tipo de dados inteiro ou natureza, a gama de valores possveis alterado e o nmero de
bytes de memria necessria. Por padro, o tipo de dados int so assinados, enquanto o caractere no estejam assinados. O qualificador
assinado (a assinatura) que indica que os dados podem ser positivo ou negativo. Unsigned prefixo indica que os dados podem ser apenas
positivo. Note-se que o prefixo opcional.
TIPO DE D ADOS
char

int

TIPO
DE
PREFIXO

D ADOS

T AM A N H O
BITS)

(NMERO

DE

F AI X A D E VAL O R E S

signed char

de -128 a 128

unsigned int

16

0 a 65535

short int

de 0-255

signed short int

de -128 a 127

long int

32

de 0-4294967295

signed longo int

32

de-2.147.483.648
2.147.483.647

Integer (int)
Um inteiro um nmero sem parte fracionada que pode ser expressa nos seguintes formatos:

Hexadecimal (base 16) nmeros que comeam com 0x (ou 0X). Inteiros hexadecimais constitudos por algarismos (09) e / ou as letras (A, B, C, D, E, F). Por exemplo: '0x1A'.
Decimal (base de 10): o nmero de dgitos o (0-9). O primeiro dgito no pode ser 0. Neste formato, voc pode digitar
o sinal de nmero ('+' ou '-'). Por exemplo: 569, -25, 1500.
Octal (base 8): os nmeros correspondem base de 8 usando apenas 8 dgitos (0-7). Inteiros Octal comeando com 0.
Por exemplo: '056'.
Binrio: quando um inteiro comea com 0b (ou 0B) so representadas como uma srie de bits ('0' e '1'). Por exemplo:
0B10011111

0x11 // equivalente hexadecimal para decimal 17


11
// formato decimal
-152 decimal formato //
011
// equivalente octal do decimal 9
0b11 // binrio para decimal equivalente 3

Tipo de ponto flutuante (float)


O ponto float usado para nmeros reais com ponto decimal. Tipo de dados do float pode ser representado de diversas maneiras. Uma coisa
sempre flutuador consign (assinado).

0.
// = 0.0
-1,23
-1,23 // =
23.45e6 // = 23,45 * 10 ^ 6
2e-5
// = 2.0 * 10 ^ -5
3E + 10
// = 3.0 * 10 ^ 10
.09E34
// = 0,09 * 10 ^ 34

Tipo personagem (char)


O tipo char considerado como um todo pelo compilador. No entanto, normalmente usado para dados de caracteres. Um tipo de dados de
caracteres colocada entre aspas e um caractere ASCII codificado.

59
// todo
'p' // ASCII carter 'p'
Uma seqncia de caracteres chamado string (string). Strings so colocados entre aspas duplas, por exemplo:

"Pressione o boto RA0"

2.4 Variveis e constantes


Definies
Uma varivel um objeto nomeado pode conter dados que podem ser modificados durante a execuo do programa. Em C, as variveis tm
o tipo, o que significa que necessrio especificar o tipo de dados que atribudo a uma varivel (int, float etc.). As variveis so
armazenados na memria RAM e o espao de memria que ocupa (em bytes) que depende do seu tipo.

/ * Duas linhas de programa consecutivo. Na primeira linha do programa


a varivel definido * /
int a = 1000; // varivel int equivalente a 1000
a = 15;
// igual a 15
Uma constante tem as mesmas caractersticas que uma varivel, exceto que seu valor atribudo no pode ser alterado durante a execuo
do programa. Ao contrrio de variveis, as constantes so armazenados na memria flash do microcontrolador para salvar o mximo de
espao RAM. O compilador reconhece o nome eo prefixo const. Em mikroC, o compilador reconhece automaticamente o tipo de uma
constante de dados, por isso no necessrio especificar melhor o tipo.

/ * Duas linhas de programa consecutivo * /


const A = 1000 // o valor da constante A definido como
A = 15;
// Error! Voc no pode alterar o valor da constante
Cada varivel ou constante deve ter um identificador que a distingue de outras variveis e constantes. Referem-se aos exemplos de cima, e
A so identificadores.

Regras de nomeao
Em mikroC, identificadores pode ser to longo como voc quer. No entanto, existem vrias restries:

Os identificadores podem incluir qualquer um dos caracteres alfabticos AZ (AZ), os dgitos 0-9 eo caractere
sublinhado '_'. O compilador sensvel diferena entre maisculas e minsculas. Os nomes de funes e variveis,
muitas vezes so escritos em letras minsculas, enquanto nomes de constantes so capitalizados.
Identificadores no pode comear com um dgito.
Os identificadores podem no corresponder s palavras-chave em lngua mikroC, porque so palavras reservadas para
o compilador.

O compilador mikroC reconhece 33 palavras-chave:


M I K R O C - P AL AVR A S - C H AVE
absolut

dados

se

retorno

typedef

asm

omisso

em linha

rx

typeid

em

excluir

int

sfr

typename

carro

fazer

io

curto

Unio

bocado

nico

longo

assinado

no assinado

bool

mais

mutvel

tamanho de

uso

pausa

enum

namespace

esttico

virtual

caso

explcito

operador

struct

vazio

captura

extern

org

interruptor

voltil

carbonizar

falso

pascal

modelo

enquanto

classe

flutuador

privado

ESTA

cdigo

para

protegido

jogar

const

amigo

pblico

verdadeiro

continuar

v para

registrar

tentar

Exemplos de identificadores vlidos e invlidos:

temperatura_V1
// OK
Presso
// OK
no_corresponder
// OK
dat2string
// OK
SUM3
// OK
_vtexto
// OK
7temp
// NO - voc no pode comear com um nmero
% ms_alto
// NO - no pode conter caracteres especiais
se / / NO - no pode coincidir com uma palavra-chave
j23.07.04
// NO - no podem conter caracteres especiais (ponto)
nome da varivel // NO - no pode conter em branco

Declarao da varivel
Cada varivel deve ser declarada antes de ser usado no programa. Uma vez que as variveis so armazenados na memria RAM,
necessrio reservar espao para a passagem (um, dois ou mais bytes). Ao escrever um programa, voc sabe o tipo de dados que voc
deseja usar e que tipo de dados esperados como resultado de uma operao, enquanto o compilador no sabe. No se esquea que o
programa lida com as variveis com os nomes dados. O compilador reconhece-los como nmeros na memria RAM sem saber o seu
tamanho e formato. Para melhorar a capacidade de leitura de cdigo, as variveis so declarados, muitas vezes, no incio das funes:

<Type> varivel;
Voc pode declarar mais de uma varivel de uma s vez, se eles tm o mesmo tipo.

<Type> variable1, variable2, variavel3;


Para alm do nome e tipo, as variveis so atribudos valores iniciais muitas vezes apenas ao lado de sua declarao. Este no um passo
obrigatrio, mas "uma questo de moralidade". Ele parece com o seguinte:

unsigned int peso; // declara uma varivel chamada peso


peso = 20;
// Atribua o valor 20 para a varivel peso
Um mtodo mais rpido chamado de instruo de inicializao (atribuio de valores iniciais):

unsigned int peso = 20; // peso declarado e seu valor de 20


Se vrias variveis com o mesmo valor inicial atribudo, o processo pode ser simplificado:

unsigned int weight.1 = weight2 = weigh3 = 20;


int valor_inicial = un_mnimo_de_petrleo = 0;

Tenha cuidado para no declarar a mesma varivel novamente dentro da mesma funo.
Voc pode editar o contedo de uma varivel, atribuindo um novo valor como muitas vezes quiser
Quando voc declarar uma varivel, sempre pensar sobre os valores que a varivel deve conter durante a execuo do
programa. No exemplo acima, no weight1 ser representado por um nmero decimal com ponto ou um nmero com
um valor negativo.

Declarando Constantes
Semelhante s variveis, as constantes devem ser declaradas antes de serem utilizados no programa. Em mikroC, no obrigatrio para
especificar a constante de declarar tipo. Alm disso, a constante deve ser inicializado no momento em que forem declarados. O compilador
reconhece constantes por seu prefixo const usado na instruo. Duas instrues a seguir so equivalentes:

const int MNIMO = -100; // Declare constante MNIMO


const MNIMO = -100;
// Declare MNIMO constante
Constantes podem ser de qualquer tipo, incluindo cadeias:

const T_MAX = 3.260E1;


// ponto flutuante constante T_MAX
const I_CLASS = 'A';
// carter constante I_CLASS
const Message = "Pressione o boto esquerdo"; // seqncia de mensagem constante

Constantes de enumerao so um tipo especial de constantes inteiras que torna mais compreensvel quando a atribuio de nmeros
ordinais ao programa constante. Por defeito, o valor de 0 para a primeira constante nas cintas atribudo automaticamente o valor 1 para o
segundo, o valor de 2 para o terceiro, etc.

enum {fornecedores gua, leo, CLORO}; // GUA = 0; OIL = 1; CLORO = 2


Voc pode inserir diretamente o valor de uma constante na lista de enumeraes. O aumento parado por atribuir um valor a um elemento
de matriz, em seguida, ele reinicia a partir do valor atribudo. Veja o seguinte exemplo:

enum {fornecedores gua, leo = 0, cloro}; // GUA = 0; Diesel = 0; CLORO = 1


Constantes de enumerao so usados como segue:

int Velocidad_de_ascensor
enum {motor_de_ascensor parar, iniciar NORMAL, MXIMA};
Velocidad_de_ascensor = NORMAL; // Velocidad_de_ascensor = 2

Definir novos tipos de dados


A palavra-chave typedef permite criar facilmente novos tipos de dados.

typedef unsigned int positivo; // positivo um sinnimo para o tipo int sem sinal
positivo a, b;
// Variveis tipo positivo b so
a = 10;
// Varivel igual a 10
b = 5;
// varivel B equals 5

Escopo de variveis e constantes


Uma varivel ou constante reconhecida pelo compilador com base no seu identificador. Um identificador sem sentido se o compilador
pode reconhecer. O escopo de uma varivel ou constante a gama de programa em que o identificador no tem sentido. O mbito
determinado pelo lugar em que uma varivel ou constante declarada. Tentando acessar uma varivel ou constante fora seus resultados de
escopo em um erro. Uma varivel ou constante invisvel fora do seu mbito. Todas as variveis e constantes que usamos em um programa
deve ser declarado no incio do cdigo. As variveis e constantes pode ser global ou local. Uma varivel global declarado no cdigo-fonte,
fora todas as funes, enquanto uma varivel local declarada dentro do corpo da funo ou dentro de um aninhada em um bloco de funo.

A variveis globais que voc pode acess-los a partir de qualquer parte do cdigo, mesmo funes no interior desde que seja declarado.O
mbito de uma varivel global limitada pelo final do ficheiro de origem que tem sido declarada.
O escopo de variveis locais limitado pelo bloco entre chaves {} em que so declarados. Por exemplo, se eles so declarados no incio do
corpo da funo (como na funo principal ) o seu mbito , do ponto de declarao e final dessa funo. Referem-se ao exemplo anterior. A
variveis locais declaradas no main () no pode acess-los a partir do Funcin_1 e vice-versa.

Um bloco composto um grupo de declaraes e afirmaes (que podem ser tambm blocos) entre chaves. Um bloco pode ser uma funo,
uma estrutura de controlo, etc. Uma varivel declarada dentro de um bloco so considerados local, isto , "existe" apenas dentro do
bloco. No entanto, as variveis declaradas fora do mbito ainda so visveis.
Embora a constante no pode ser alterado no programa, siga as mesmas regras como variveis. Isso significa que eles so visveis dentro
do bloco com exceo de constantes globais (declarada fora de qualquer funo). As constantes so declarados normalmente no Cdigo fora
de qualquer funo (como variveis globais).

Classe de armazenamento
Classes de armazenamento so usados para definir o escopo e durao variveis, constantes e funes dentro de um programa. MikroC
pode ser usado em diferentes tipos de armazenamento:

auto uma classe de armazenamento padro para as variveis locais, por isso raramente utilizado. Ele utilizado
para definir uma varivel local tem a hora local. A classe de armazenamento automtico no pode ser usado com
variveis globais.

esttica uma classe de armazenamento padro para variveis globais. Ele especifica que a varivel visvel dentro
do arquivo. Uma varivel local declarada com o prefixo esttico pode acess-los no arquivo de origem (ou seja,
comportam-se como variveis globais).
extern : A palavra-chave externo utilizado quando o programa composto por diferentes ficheiros de origem. Isso
permite que voc use uma varivel, uma constante ou uma funo declarada em outro arquivo. Claro que, para
compilar e vincular esse arquivo corretamente, ele deve ser includo em seu projeto. Nos exemplos seguintes, o
programa consiste em dois ficheiros: File_1 e File_2 . O File_1 usa uma varivel e uma funo declarada em File_2 .

Arquivo 1:

extern int cnt;


// cnt varivel visvel no File_1
extern void Ol (); // Funo Ol () pode ser usado em File_1
void main () {
PORTA = cnt ++;
Ola ();
}

// Qualquer alterao na File_1 cnt ser visvel em File_2


// Funo Ol () pode ser chamado a partir daqui

Arquivo 2:

int cnt = 0;
void Ola ();
void Ola () { // Alteraes que afetam
.
// cnt em File_1 so visveis aqui
.
.
}

2,5 OPERADORES
Um operador um smbolo que denota uma aritmtica, lgica ou que determinada operao. Simplificando, vrias operaes aritmticas e
lgicas so realizadas por operadores. H mais de 40 operaes disponveis na linguagem C, mas, no mximo, 10-15 deles na prtica
usada. Cada operao realizada em um ou mais operandos que pode ser varivel ou constante. Alm disso, cada operao
caracterizada pela prioridade de execuo e associamento.

Operadores aritmticos
Operadores aritmticos so usados em operaes aritmticas e sempre retornam resultados numricos. Existem dois tipos de operadores,
unrio e binrio. Ao contrrio de operaes unrias que so executadas em um operando, operaes binrias so realizadas em dois
operandos. Por outras palavras, dois nmeros so necessrios para executar uma operao de binrio. Por exemplo: a + b ou a / b.
OPERADOR

OPERAO

Adio

Subtrao

Multiplicao

Diviso

Resto da diviso

int a, b, c; // declara trs inteiros a, b, c


a = 5;
// Inicializar para
b = 4;
// Inicializar b
c = a + b; // C = 9
% 2 C = C;
// c = 1. Esta operao muitas vezes usado
para buscar // paridade. Neste caso, o
resultado 1 // o que significa que a varivel
// um nmero impar
Operadores de atribuio
Existem dois tipos de alocao na linguagem C:

Operadores simples atribuir valores s variveis utilizando o carter comum '='. Por exemplo: a = 8
Atribuies compostos so especficas para a linguagem C consistem em dois caracteres, como mostrado na tabela
direita. Eles so usados para simplificar a sintaxe e permitir uma execuo mais rpida.
EXEMPLO

OPERADOR

Expresso

Equivalente

+=

a+8=

a=a+8

-=

um - 8 =

a=a-8

*=

a*=8

a=a*8

/=

um / 8 =

A=A/8

%=

a = 8%

a = a 8%

int a = 5; // declarar e inicializar a varivel para


a + = 10;
// a = a + 10 = 15
Operadores de incremento e decremento
As operaes de incremento e decremento 1 so indicados por "++" e "-". Esses personagens podem preceder ou seguir uma varivel. No
primeiro caso (x ++), a varivel x ser incrementado em uma unidade, antes de ser utilizada na expresso. Caso contrrio, a varivel vai ser
utilizada na expresso antes de ser aumentado em 1. O mesmo se aplica para a operao decremento.
OPERADOR

EXEMPLO
Para ++

++

Varivel "a" aumentado em 1

a ++
--b

int
a =
c =
b =

DESCRI O

Varivel "a" diminudo por um

B--

a, b, c;
b = 5;
1 + a ++; // c = 6
c + a ++
// b = 7 + 6 = 13

Operadores relacionais
Os operadores relacionais so usados em comparaes, a fim de comparar dois valores. Em mikroC, se uma expresso for avaliada como
falsa (false), o operador retorna 0, enquanto que se a orao for avaliada como verdadeira (true) retorna 1. Isto usado em expresses como
"se a expresso avaliada como verdadeira ento ... '
OPERADOR

DESCRIO

EXEMPLO

CONDIO DA VERDADE

>

maior do que

b>

se b maior do que um

>=

maior ou igual

a> = 5

Se uma for maior do que ou igual a 5

<

menos que

<B

Se uma for menor do que b

<=

inferior ou igual

a <= b

Se uma for inferior ou igual a b

==

como

a == 6

Se um igual a 6

!=

desigual do que

um! = b

se uma desigual a b

int prop;
int var = 5;
prop = var <10; // expresso for avaliada como verdadeira, prop = 1
Operadores lgicos
H trs tipos de operaes lgicas em C: Y (E) lgico ou (OR) lgicas e negao - NO (NOT) lgico. Os operadores lgicos retornar true
(lgica 1) se a expresso avaliada diferente de zero. Caso contrrio, retornar false (lgica 0) se a expresso avaliada zero. Isto muito
importante porque as operaes lgicas so geralmente realizada em expresses, e no sobre as variveis (nmeros) indivduos no
programa. Portanto, as operaes lgicas referem-se a veracidade de toda a expresso.
Por exemplo: 1 && 0 igual a (expresso verdadeiro) && (expresso false)
O resultado 0, ou seja - False em ambos os casos.
OPERADOR

FUNO

&&

||

NO

OPERADORES DE BITS DE GESTO


Ao contrrio das operaes lgicas realizados sobre os valores ou expresses, o bit operaes de movimentao so realizadas sobre os
bits de um operando. Eles esto listados na tabela a seguir:
OPERADOR

DESCRIO

EXEMPLO

R E S U LTAD O

Um complemento

a=b~

b=5

a = -5

<<

Desvio esquerda

a = b << 2

b = 11110011

a = 11001100

>>

Deslocamento para a direita

a = b 2 >>

b = 11110011

a = 00011110

&

E pedaos de manuseio lgicos

c=a&b

um
11100011
b = 11001100

O lgica para bits de manipulao

c=a|b

um
11100011
b = 11001100

Exor pedaos de manipulao lgica

c=a^b

um
11100011
b = 11001100

c = 11000000
c = 11101111
c = 00101111

Note-se que o resultado da operao de deslocamento para a direita, dependendo do sinal da varivel. Se o operando aplicado a uma
varivel no assinado ou positivo, zeros so inseridos no espao vazio criado pelo deslocamento. Se aplicada a um nmero inteiro com sinal
negativo, que ir introduzir a 1 para manter o sinal correto da varivel.

COMO USAR OS OPERADORES?

Alm dos operadores de atribuio, dois operadores no deve ser escrito ao lado do outro.
x *% 12; // essa expresso ir gerar um erro

Cada operador tem a sua prioridade ea associatividade como mostra a tabela:


Similar aritmtica expresses, operadores so agrupados por meio de suportes. Primeiro as expresses entre
parnteses so calculadas. Se necessrio, voc pode usar vrios suportes (aninhados).

PRIORIDADE
Alto

OPERADORES

A S S O C I ATI V I D A D E

() [] ->.

da esquerda para a direita

! ~ ++ - + (Unidade) - (unidade) * & Ponteiro Ponteiro

direita para a esquerda

* /%

da esquerda para a direita

+ -

da esquerda para a direita

<>

da esquerda para a direita

<< = >> =

da esquerda para a direita

==! =

da esquerda para a direita

&

da esquerda para a direita

da esquerda para a direita

da esquerda para a direita

&&

da esquerda para a direita

Solta

int
a =
b =
res
res

||

direita para a esquerda

?:

direita para a esquerda

= + = - = * = / = / = & = ^ = | = = <=>

da esquerda para a direita

a, b, res;
10;
100;
= a * (a + b); // 1100 Resultado =
= a * a + b;
// resultado = 200

DADOS taxa de converso


Algumas operaes envolvem a converso de dados. Por exemplo, se dividir dois valores inteiros, existe uma alta possibilidade de que o
resultado no um nmero inteiro. O MikroC executa a converso automtica quando necessrio.
Se dois operandos de tipos diferentes so utilizados em uma operao aritmtica, o tipo de operando a prioridade mais baixa se torna
automaticamente o tipo de operando com a prioridade mais alta. Os principais tipos de dados so colocados de acordo com a seguinte
hierarquia:

AutoConversion tambm realizada em operaes de cesso. O resultado da expresso do lado direito do operador de atribuio se torna
sempre o tipo da varivel no lado esquerdo do operador. Se o resultado uma espcie de prioridade mais elevada, ela descartada ou
arredondado para coincidir com o tipo de varivel. Ao converter dados reais em um nmero inteiro, sempre os nmeros depois do ponto
decimal so descartados.

int x;
// A varivel x atribudo o tipo inteiro (um nmero inteiro)
x = 3;
// A varivel x recebe o valor 3
x + = 3,14; // O valor 3,14 adicionado varivel x para
executar a operao // atribuio
/ * O resultado da adio de 6 em vez de 6,14, como esperado.
Para obter o resultado desejado sem excluir os nmeros que se seguem
ponto decimal, voc deve declarar x como um ponto flutuante. * /
Para fazer uma converso explcita antes de escrever uma expresso ou uma varivel que voc deve especificar o tipo de faixas de renda
operacional.

duplo distncia, tempo, velocidade;


distncia = 0,89;
tempo = 0,1;
velocidade = ( int ) (a / b); // c = (int) = 8,0 8,9
velocidade = (( int ) a) / b; // c = 0 / 0,1 = 0,0

2.6 As estruturas de controle


Estruturas condicionais
As condies so ingredientes comuns de um programa. As condies permitem executar uma ou mais declaraes dependendo de validade
de uma expresso. Por outras palavras, 'Se a condio (...) prende, deve ser (...). Caso contrrio, se a condio no for cumprida, deve ser
(...) ' . Operandos condicional else if- e interruptor so usados em operaes condicionais. Uma sentena condicional pode ser seguido por
uma nica instruo ou um bloco de instrues a serem executadas.

Operador condicional if-else


O operador se pode ser usado sozinho ou associado com o operador da outra (if-else) .
Exemplo operador se :

se (expresso) operao;

Se o resultado da expresso entre parnteses for verdadeira (diferente de 0), a operao executada eo programa continua a execuo.Se
o resultado da expresso falsa (0), a operao no realizada imediatamente e continua a execuo do programa.
Como mencionamos, a outra forma combina tanto o operador e se outra pessoa:

se (expresso) operation1 mais operation2;


Se o resultado da expresso verdadeira (diferente de 0) realizado operation1 , de outra forma realizada operation2 . Depois de realizar
uma das operaes, o programa continua a execuo.
A sentena if-else parece com o seguinte:

se (expresso)
operation1
mais
operation2
Se operation1 ou operation2 feita, escrever uma lista de instrues entre chaves. Por exemplo:

se (expresso) {
... //
... operation1 //
...} //
mais
operation2
O operador if-else pode ser substitudo para o operador condicional "?":

(Expression1)? expression2: expression3


Se o valor de expresso1 no 0 (verdadeiro), o resultado de toda a expresso equivalente ao resultado de Expresso2 . Caso contrrio,
se expresso1 0 (falso), o resultado de toda a expresso equivalente ao resultado da expression3 . Por exemplo:

= mximo (a> b)? a: b // A varivel mximo atribudo o


valor // mais varivel (b)
Mudar de operador
Ao contrrio do julgamento if-else que seleciona entre duas opes no programa, o operador comutador permite escolher entre vrias
opes. A sintaxe da chave :

interruptor (selector) // Selector do tipo char ou int


{
caso CONSTANT1:
operation1 // O grupo de operadores que so executados se
...
// selector e CONSTANT1 so equivalentes
quebrar ;
caso constant2:
operation2 operadores // O grupo vai se
...
// selector e constant2 so equivalentes
quebrar ;
...
default :
operacin_esperada // O grupo de operadores que executam se
...
// nenhum equivalente constante selector
pausa ;
}
A operao de comutao realizada como se segue: O selector executada em primeiro lugar e comparado com CONSTANT1. Se forem
iguais, as declaraes que pertencem a esse bloco sero executados at que a palavra-chave ruptura ou o fim do funcionamento do
interruptor. Se no corresponder, o interruptor comparado com o constant2. Se forem iguais, as declaraes que pertencem a esse bloco

sero executados at que a palavra-chave pausa etc. Se o seletor de no corresponder a nenhuma constantes, operaes aps o operador
padro, eles sero executados.
Tambm possvel comparar uma expresso com um grupo constante. Se ele corresponde a qualquer deles, as operaes apropriadas
sejam executadas:

interruptor (dias) . // Os dias de variveis um dia


{
// necessrio para determinar se ele um dia da semana ou no
case1: Case2: case3: case4: case5: LCD_message = "Dia til"; break ;
Case6: case7: LCD_message = 'Weekend'; break ;
default : LCD_message_1 = 'Escolha um dia da semana'; break ;
}
A chave de palavra C 'break' pode ser usado em qualquer bloco. Usando 'break', voc pode sair de um bloco que o final obrigatria no foi
cumprido. Ele pode ser utilizado para terminar um ciclo infinito, ou para forar um ciclo para terminar mais cedo do que o normal.

LOOP
Muitas vezes necessrio repetir alguma operao algumas vezes no programa. Um conjunto de comandos que se repetem chamado de
um loop de programa. Execute muitas vezes, que o tempo que o programa vai ficar no loop depende das condies de sair do loop.

While Loop
O loop enquanto ele se parece com o seguinte:

while (expresso) {
comandos
...
}
Os comandos so executados repetidamente (o programa continua no loop) at que a expresso torna-se falsa. Se a expresso for falsa, na
entrada do lao, em seguida, o circuito no vai ser executado e o programa ir continuar a partir do final do ciclo, enquanto.
Um tipo especial de loop de programa um loop infinito. Ele formado se a condio permanece inalterada dentro do loop. A execuo
simples neste caso, porque o resultado sempre verdadeiras chaves (1 = true), o que significa que o programa continua no mesmo loop:

while (1) { // Em vez de "while (1)", voc pode escrever "while (true)"
...
// Expresses entre chaves ser executada
...
// repetidamente (loop infinito)
}

Para loop
O circuito for semelhante que se segue:

for (expresin_inicial; expresin_de_condicin; cambiar_expresin) {


operaes
...
}
A execuo desta sequncia de programa semelhante ao lacete enquanto , excepto que neste caso o processo de especificao do valor
inicial (inicializao) realizada na declarao. O expresin_ inicial especifica a varivel de loop inicial, mais tarde em comparao com
expresin_ de_condicin antes de entrar no loop. As operaes inseridos no ciclo forem executados repetidamente e depois de cada iterao
o valor dos aumentos expresin_inicial de acordo com a cambiar_expresin regra. A iterao continua at que o expresin_de_condicin se
torna falsa.

for (k = 0; k <5; k ++) // A varivel k aumentado 5 vezes (1 a 4) e


operao
expresso // sempre que a operao repetida
...
A operao ser executada cinco vezes. Em seguida, verifique ele valida que a expresso k <5 falso (aps 5 iteraes k = 5) e o programa
vai sair do loop.

Do-while
Loop do-while semelhante ao seguinte:

Do

operao
while (cambiar_condicin);
Expresso Cambiar_condicin executado no final do ciclo, o que significa que a operao executada pelo menos uma vez,
independentemente se a condio verdadeira ou falsa. Se o resultado no 0 (verdadeiro), o procedimento repetido.
Os exemplos seguintes so equivalentes. Esta parte do cdigo exibe "Ol" em um LCD 10 vezes com um atraso de um segundo. Observe
que, neste exemplo predefinidos funes, que so encontrados em livrarias compilador usado mikroC PRO para PIC . No entanto
aconselhamos a no tentar entend-los em detalhe. Seu comportamento geral dentro do loop explicado atravs de comentrios.

i = 0; // Inicializar o contador
while (i <10) {
// Condio
Lcd_Out (1,3, "Ol"); // Display "Ol" no LCD
delay_ms (1000);
// Delay 1000 ms
Lcd_Cmd (_LCD_CLEAR);
// Limpar LCD
delay_ms (500);
// Delay 500ms
i ++;
// contador incrementado
}
for (i = 0; i <10; i ++) {
// inicializao, condio, aumentar
Lcd_Out (1,3, "Ol");
// Display "Ol" no LCD
delay_ms (1000);
// Delay 1000 ms
Lcd_Cmd (_LCD_CLEAR);
// Limpar o visor LCD
delay_ms (500);
// Atraso 500ms
}
i = 0;
// Inicializar o contador
for {
Lcd_Out (1,3, "Ol");
// exibe "Ol" no LCD
delay_ms (1000);
// Delay 1000 ms
Lcd_Cmd (_LCD_CLEAR);
// Clear LCD
delay_ms (500);
// 500ms de atraso
i ++;
// contador incrementado
}
while (i <10);
// Condio

Declaraes de salto
ACRDO RUPTURA
s vezes voc precisa parar e sair de um loop dentro do seu corpo. A instruo break pode ser usado dentro de qualquer loop (enquanto,
para, fazer enquanto) eo interruptor tambm declaraes. Nestes declarao do intervalo usado para sair das demonstraes interruptor
caso, se a condio for verdadeira. Neste exemplo, "Waiting" pisca na tela LCD at que o programa detecta uma lgica no pino PORTA 0.

while (1) { // loop infinito


if (PORTA.F0 == 1)
// Verificar se o estado lgica do pino da porta 0
break;
// PORTA 1; se igual, sair do loop
Lcd_Out (1.3, "Wait"); // Display "em espera" no LCD
delay_ms (1000);
// Delay 1000 ms
Lcd_Cmd (_LCD_CLEAR);
// Clear LCD
delay_ms (500) ;
// Atraso 500ms
}
ACRDO CONTINUAR
A instruo continue colocou dentro de um loop usado para ignorar uma iterao. Ao contrrio da instruo break, o programa permanece
dentro do loop e as iteraes continuar.

// Se x = 7, uma diviso pode ocorrer por 0.


// Continue usado aqui para evitar esta situao.
x = 1;
while (x <= 10) {
if (x == 7) { // salto x = 7 para evitar a diviso por 0
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1.3, "A diviso por 0");
Delay_ms (1000);
x ++;
continue ; // Aps essa linha, saltar para a instruo while com x = 8
}
a = 1 / (X-7); // Esta diviso vai gerar um erro se x = 7

/ * Muitas operaes podem ocorrer aqui * /


Lcd_Out (1.3, "A diviso OK"); // Colocar esta mensagem no LCD
Delay_ms (1000);
x ++;
}
ACRDO GOTO
A instruo goto permite que voc faa um salto absoluto para outro ponto no programa. Esse recurso deve ser usado com cautela, pois sua
execuo pode causar um salto incondicional ignorando todos os tipos de limitaes de nidificao. O ponto de destino identificado por um
rtulo usado como um argumento para a instruo goto. Uma marca um identificador vlido seguido por dois pontos (:).

...
se (CO2_sensor) Goto ar condicionado; //
...
// faz saltar para a linha de programa
// Ar Condicionado
...
Ar condicionado:
//
// se a concentrao de CO2 muito alto
...

Se se verificar que o valor


// CO2_sensor varivel = 1

A partir daqui segue a parte do cdigo a ser executado


// no ambiente

TIPOS DE DADOS AVANADA 2.7


PAIS
Uma matriz uma lista de elementos do mesmo tipo, colocados em localizaes contguas de memria. Cada elemento referenciado por
um ndice. Para declarar uma matriz, voc deve especificar o tipo de seus elementos (chamado tipo de matriz), o seu nome eo nmero de
elementos entre colchetes. Todos os elementos de uma matriz ter o mesmo tipo.

tipo_de_matriz nombre_de_matriz [n_de_elementos];


Os elementos da matriz so identificados por sua posio. Em C, o ndice varia de 0 (o primeiro elemento de uma matriz) a N-1 (N o
nmero de elementos de uma matriz). O compilador tem que "saber" quantas posies de memria deve ficar em declarar uma matriz. O
tamanho de uma tonalidade no pode ser uma varivel. Portanto, voc pode usar dois mtodos:

Mtodo 1 //
int exibio [3]; // display de matriz Declarao capaz de conter trs inteiros
Mtodo 2 //
const dgito = 5;
carvo Matriz_nueva [dgitos]; // matriz Declarao Matriz_nueva
// capaz de conter cinco inteiros
Uma matriz pode ser inicializado ao declarar, ou mais tarde no programa. Em ambos os casos, este passo realizado atravs da utilizao
chaves:

int array_1 [3] = {} 10,1,100;


Para ler ou modificar um elemento da matriz no exemplo anterior, basta apontar o seu ndice entre colchetes:

/ * Presume-se que tenham sido previamente declarados como um inteiro * /


a = array_1 [0]; // A varivel atribudo o valor do membro da matriz
// ndice 0 (a = 10)
array_1 [2] = 20; // Estados array_1 matriz [2] modificado (novo valor 20)

O programa a seguir altera a ordem dos elementos em uma matriz. Note-se que o ndice pode ser expresso por variveis e operaes
bsicas.

vazio main () {
const MUESTRAS_DE_AGUA = 4; // valor da constante MUESTRAS_DE_AGUA 4
int i, temperatura; temperatura i // variveis so do tipo int
int profunidad_de_sonda [MUESTRAS_DE_AGUA] = {} 24,25,1,1987; // Tudo
// Membro da profundidade matriz
sonda // eles so do tipo int
for (i = 0; i <(MUESTRAS_DE_AGUA / 2); i ++) { // loop executado duas vezes
profundiad_de_sonda temp = [i];
// temporrio usado para armazenar um valor
temporariamente //
profundiad_de_sonda [i] = profundiad_de_sonda [MUESTRAS_DE_AGUA-1-i];
profundiad_de_sonda [MUESTRAS_DE_AGUA-1-i] = temperatura;
}
// Aqui: profundidad_de_sonda [MUESTRAS_DE_AGUA] = {} 1987,1,25,24
}

Bidimensional matrizes
Alm das matrizes unidimensionais que podem ser interpretados como uma lista de valores, a linguagem C permite declarar arrays
multidimensionais. Nesta parte iremos descrever matrizes apenas duas dimenses, tambm chamados de tabelas ou matrizes. A matriz
bidimensional declarada, especificando o tipo de dados de matriz, o nome da matriz eo tamanho de cada dimenso.

tipo_de_matriz nombre_de_matriz [number_of_rows] [nmero_de_columnas];


A declarao deste number_of_rows e nmero_de_columnas matriz representam o nmero de linhas e colunas de uma tabela que
consistem, respectivamente. Consulte a matriz bidimensional seguinte:

int Tabela [3] [4]; // Quadro definido para ter trs filas e quatro colunas
Esta matriz pode ser representada sob a forma de uma tabela.
table [0] [0]

mesa [0] [1]

mesa [0] [2]

mesa [0] [3]

mesa [1] [0]

mesa [1] [1]

mesa [1] [2]

mesa [1] [3]

Tabela [2] [0]

Tabela [2] [1]

Tabela [2] [2]

Tabela [2] [3]

Semelhante a unidimesionales matrizes, possvel atribuir valores para os elementos de uma linha de declarao mesa. A atribuio deve
ser feito linha por linha, como no exemplo a seguir. Como observado anteriormente, esta matriz tem duas linhas e trs colunas:

int Tabela [2] [3] = {{{7,7,19 3,42,1}}};


A matriz acima pode tambm ser representada na forma de uma tabela de valores:
3

42

19

PONTEIROS
Um ponteiro uma varivel para receber um endereo. Um ponteiro "aponta" para um local de memria, referenciada por um endereo.Em
C, o endereo de um objecto pode ser obtido atravs de um operador & unitria. Para ter acesso ao contedo da memria numa direco
especfica (tambm chamado objecto pontiagudo), um operador indirecta (*) utilizado.

'& N' o endereo da localizao "n" de memria.


'* (& N)' o contedo do endereo '(& n)', ou de 'n'.
Para declarar um ponteiro, voc deve especificar o tipo da varivel apontou:

tipo_de_variable * ponteiro;
Nesta fase, os pontos de ponteiro mi_puntero para o valor armazenado na posio de memria, ou seja, para um valor desconhecido.Ento,
a inicializao altamente recomendado:

ponteiro = & varivel,


Agora, ponteiro contm o endereo da varivel .
Para acessar o contedo da varivel apontada, voc deve usar '*'. O exemplo a seguir mostra o contedo da memria, dependendo da ao
tomada pelo ponteiro.

Os ponteiros so muito teis para o gerenciamento de matrizes. Neste caso, um ponteiro utilizado para apontar para o primeiro elemento
de uma matriz. Devido ao facto de que possvel executar operaes bsicas de pointer (ponteiro aritmticas), fcil gerir os elementos de
uma matriz.
Note-se a diferena entre '* v + 1' e '* (v + 1)' no exemplo a seguir:

short int volt [3] = {0,5,10},


short int * v;
v = & (volts [0]);
// v volts contm o endereo [0]
* (v + 1) = 2;
Volt // [1] = 2
volts [2] * = v + 1;
// separador [2] = 1 (Tabela [0] + 1)
* (v + 2) = * (v + 1);
// volts [2] = 2
v ++;
// v contm o endereo Volt [1]
* v = 1;
// Volt [1] = 1

Os ponteiros tambm podem ser declaradas com o prefixo 'const'. Neste caso, o seu valor no pode ser modificado
aps a inicializao, semelhante a uma constante.
Ao contrrio de C, o mikroC no suporta alojamento dinmico.

ESTRUTURAS
Ns j vimos como agrupar os elementos em arrays. No entanto, quando se utiliza este mtodo de todos os elementos devem ser do mesmo
tipo. Usando estruturas, possvel agrupar diferentes tipos de variveis sob o mesmo nome. As variveis dentro de uma estrutura
chamado os membros da estrutura. As estruturas de dados so declaradas usando a seguinte sintaxe:

struct {nombre_de_estructura
tipo1_de_miembro1 member1;
tipo2_de_miembro2 member2;
tipo3_de_miembro3 Member3;
..
};
No possvel inicializar variveis na declarao da estrutura de dados:

struct gerador {
int tenso;
carvo animal crrego;
};

Voc pode ento definir objetos chamados "turbina" no cdigo. Cada um desses trs objetos (turbinas) atribudo 'atual' e 'voltagem' as
variveis.

struct geradores turbina_1, turbina_2, turbina_3;


Para acessar as variveis, voc deve usar o '.

turbina_3.voltaje = 150;
turbina_3.corriente = 12;
Claro, gosto de usar ponteiros, ele ainda permite que voc execute operaes atravs de operadores, e as declaraes definidas nas partes
anteriores.
Se voc est familiarizado com a linguagem C, lembre-se que mikroC no suporta a inicializao dos membros da estrutura atravs das
teclas. Por exemplo, 'conjunto_1 = {15,' m '};' retorna um erro em mikroC.

2.8 FUNES
Uma funo uma sub-rotina que contm uma lista de decises a tomar. A idia principal dividir um programa em vrias partes usando
essas funes para resolver o problema inicial com mais facilidade. Alm disso, as funes nos permitem usar as habilidades eo
conhecimento de outros programadores. A funo executada cada vez que chamado dentro de outra funo. Em C, um programa
contm, pelo menos, uma funo, a funo principal (), embora o nmero de funes geralmente maior. Ao usar o cdigo de funo tornase mais curto em funo pode ser chamado tantas vezes quanto necessrio. Em C, o cdigo consiste geralmente em muitas funes.No
entanto, se o seu programa muito curto e simples, voc pode escrever todas as frases dentro da funo principal.

Funo principal
O main () funo principal como uma funo especfica est sendo executado na inicializao. O programa termina quando a execuo
desta funo concluda. O compilador reconhece automaticamente esta funo e voc no pode cham-lo por outra funo. A sintaxe desta
funo a seguinte:

anular principal ( vazio ) {


/ * O primeiro vazio significa retornos principais nenhum valor. O segundo
'Vazio' meios recebe nenhum valor. Note-se que o compilador
tambm suporta a seguinte sintaxe: 'main ()' ou 'void main () "ou
'Main (void)' * /
..
/ * --- --- Digite o seu programa aqui * /
.
};
Isto significa que f uma funo que leva um nmero real x como um parmetro e retorna 2 * x.
A mesma funo em C semelhante que se segue:

flutuador f ( flutuador x, flutuador y) // flutuante variveis x e y podem ser utilizados em f


{
flutuar r;
// declarar r para armazenar o resultado
r = 2 * x - y; // armazena o resultado do clculo em r
retorno r;
// retorna o valor de r
}
Cada funo deve ser declarado corretamente interpret-la corretamente durante o processo de compilao. A declarao contm os
seguintes elementos:

Tipo de resultado (valor retornado): tipo do valor de retorno de dados


Nome Funo: um identificador que torna possvel chamar uma funo.
Declarao de parmetro parece com a declarao de regulao varivel (por exemplo: float x). Cada parmetro uma
varivel, constante, ponteiro ou matriz precedida pelo tipo de dados tag. Eles so usados para passar informaes
para a funo a ser chamada. Os diferentes parmetros so separados por vrgulas.
Bloco de funes do corpo de declaraes dentro de chaves

Uma funo parecida com esta:

result_type function_name ( tipo argument1, tipo argument2, ...)


{
Julgamento;
Julgamento;
...
voltar ...
}
Note-se que uma funo no precisa de parmetros (main () por exemplo), mas devem estar em parnteses. Caso contrrio, a funo
compiladora interpretar mal. Para deixar claro, voc pode substituir o espao em branco entre colchetes pela palavra-chave vazio: main
(void).

VALOR DE RETORNO
A funo pode retornar um valor (no obrigatrio), utilizando a palavra-chave de retorno. Chegando em troca, a funo avalia um valor
(pode ser uma expresso) e retorna para a linha de programa a partir do qual ele foi chamado.

retornar r;
// Retorna o valor de r no
retorno (2 * x - y); // Retorna o valor da expresso 2 * x
A funo no pode retornar mais de um valor, mas pode retornar um ponteiro ou uma estrutura. Tenha cuidado ao usar matrizes e
ponteiros. O exemplo que se segue um erro tpica:

int * reversa ( int * guia) // Esta funo deve retornar uma matriz r
{
// cujo contedo em ordem inversa com
respeito matriz // guia
int r [DIM]; // Declarando uma nova matriz chamada r
int i;
para (i = 0; i <DIM; i ++)
// loop que copia o contedo do guia em r
r [i] = separador [DIM-1-i]; // para inverter a ordem
retornar r; // Retorna o valor r
}
Na verdade, o compilador atribui memria para armazenar variveis funo inverter apenas durante a execuo. Uma vez concluda a
execuo inversa , a localizao de memria para a varivel io matriz e r no reservada. Isto significa que o endereo contm os valores
ior [] livre para entrar em novos dados. Especificamente, a funo retorna apenas o valor de r & [0], de modo que apenas o primeiro
elemento da aba de matriz armazenada na memria. Os outros locais de memria, tais como & separador [1], e guia [2], etc.Eles sero
considerados pelo compilador como espaos em branco, ou seja, eles esto prontos para receber os novos valores.
Para aceder a esta funo, passar a matriz r [] como um parmetro (ver parmetros de passagem subseo).
A funo pode conter mais de uma instruo de retorno. Neste caso, a execuo do primeiro instruo de retorno, a funo retorna o valor
correspondente ea execuo da funo pra.

flutuar abs ( flutuador x, flutuador y) // Retorna o valor absoluto de 2 * x


{
se ((2 * x - y)> = 0)
retorno (2 * x - y);
outra coisa
retorno (-2 * x + y);
}
Se a funo no retorna um valor, a palavra vazio deve ser utilizado como uma espcie de resultado na declarao. Neste caso, a
declarao de retorno no deve ser seguido por qualquer expresso. Pode ser omitido tal como no exemplo que se segue:

vazio wait_1 ( sem assinatura int a)


{
cnt ++;
// incrementar um cnt variveis globais
delay_ms (a); // Executando o delay_ms funo
}
// Note que no retorna nada delay_ms

DECLARE prottipos de funo

Para utilizar uma funo, o compilador deve estar ciente de sua presena no programa. Ao programar em C, os programadores normalmente
primeiro escrever a funo main () e, em seguida, funes adicionais. Para dizer ao compilador da presena de funes adicionais, est
obrigado a declarar os prottipos de funes no incio do programa antes da funo main () . Um prottipo de funo compreende:

tipo de resultado
nome da funo
tipos de parmetro
um ponto e vrgula (;)

O prottipo da funo principal no precisam ser declaradas.

flutuar f ( flutuador , flutuador );


/ * No necessrio escrever os nomes dos parmetros. Este prottipo
informa o compilador: o programa usar a funo f,
utilizando dois parmetros de tipo float e retorna o resultado do tipo
flutuar. * /

Chamar funes de
Enquanto um prottipo funo definida e declarada, ele pode ser usado na parte culquier programa. No entanto, como a funo principal
"raiz" do programa, que pode no ser posta em qualquer parte do programa. Para executar uma funo, voc precisa escrever o seu nome e
os parmetros associados. Veja os exemplos a seguir:

flutuador resultado, a, b; // resultado, a, b, o tempo deve coincidir com os tipos


definidos //
int tempo = 100;
// a declarao de funes f wait_1
a = 10,54;
b = 5,2;
resultado = f (a, b);
// executar a funo f usando parmetros a e b
// O valor de retorno atribudo ao resultado varivel
pausa_1 (tempo);
// executar a funo pausa_1 atravs da varivel tempo
funcinX ();
// executar a funo funcinX (sem parmetros)
Quando voc chamar uma funo, o programa salta para a funo chamado, executa-lo, em seguida, retorna para a linha a partir da qual ele
foi chamado.

Passando parmetros
Ao chamar uma funo, voc vai passar os parmetros. Em C, h duas maneiras de passar parmetros para uma funo.
O primeiro mtodo, chamado de "passagem por valor ' o mais fcil. Neste caso, os parmetros podem ser considerados como variveis
locais da funo. Quando voc chamar uma funo, o valor de cada parmetro copiado para um novo espao de memria alocada para a
execuo da funo. Uma vez que os parmetros so considerados variveis locais pelo compilador, seus valores podem ser modificados
dentro da funo, mas suas modificaes no permanecer na memria aps a execuo da funo concluda.
Observe que a funo retorna um valor, no uma varivel. Alm disso, cpias dos valores dos parmetros so criadas, de modo que os seus
nomes na funo F podem ser diferentes dos parmetros utilizados no principal () . A principal desvantagem da "etapa por o valor ' a nica
interaco que tem uma funo com o resto do programa o valor de retorno de um resultado (ou modificao de variveis globais).
O outro mtodo, chamado de "passo por endereo" permite-lhe ultrapassar este problema. Em vez de enviar o valor de uma chamada de
funo varivel, voc deve enviar o endereo de memria do valor. Em seguida, a chamada de funo ser capaz de modificar o contedo
de este local de memria.

// Funo 'sort'ordena os membros da matriz por valor ascendente


// E retorna o valor mximo membro com
int tipo ( int *); // funo prottipo
const SIZE = 5; // Nmero de membros para encomendar
vazio main () {
int mximo, a entrada [TAMANHO] = {} 5,10,3,12,0; // Declarao de variveis na matriz
mximo = sort (entradas);
// chamada de funo e atribuir a mxima
/ / valor para a varivel mximo
}

int tipo ( int * seqncia) {


int i, temp, r;
// Declarao de variveis
de r = 1;
// Flag bit indica que ele tornou-se uma permutao
enquanto (r = 0) {
// ficar no loop at a bandeira reinicializao
r = 0;
// Marcar redefinir
para (i = 0; i <tamanho-1; i ++) {
// Compare e oredenar membros
// array (dois a dois)
se (sequncia [i]> sequncia [i + 1]) {
temp = seqncia [i];
seqncia [i] = seqncia [i + 1];
seqncia [i + 1] = temperatura;
r = 1; // Tem havido um bit sinalizador permutao
definido como um //
}
}
}
retornar seqncia [TAMANHO-1]; // Retorna o valor do ltimo membro
} // que , simultaneamente, o membro com o valor mximo
Neste exemplo, por meio de uma funo que executou duas operaes: Sortes membros da matriz por valor asdendente e retorna o valor
mximo.
Para usar uma matriz para uma funo, necessrio atribuir o endereo para o pai (ou o primeiro membro). Veja o seguinte exemplo:

flutuar mtodo_1 ( int []);


flutuar mtodo_2 (int *);

// Declarao de funo prottipo Mtodo_1


// Declarao de funo prottipo Mtodo_2

const NMERO_DE_MEDICIONES = 7; // Nmero de membros da matriz


vazio main ()
{
duplo Average1, average2; // variveis Declarao Average1
e average2 //
int tenso [NMERO_DE_MEDICIONES] = {7,8,3,5,6,1,9}; // Declarao da
matriz // tenso
Average1 = mtodo_1 (tenso & [0]); // parmetro funo o endereo
do primeiro membro //
average2 = mtodo_2 (tenso); // parmetro funo o endereo de
matriz //
}
//
float mtodo_1( int voltaje[])
// Iniciando o mtodo_1 funo
{
int i, soma;
// Declarao de variveis i e soma locais
para (i = 0; i <NMERO_DE_MEDICIONES; i ++) // Calcular o valor mdio da tenso
soma + = tenso [i];
// Voc pode usar * (tenso + i) ao invs de tenso [i]
retorno (soma / NMERO_DE_MEDICIONES);
}
//
float mtodo_2 ( int * tenso) funo // Principal mtodo_2
{
int i, soma;
// Declarao de variveis i e soma locais
para (i = 0; i <NMERO_DE_MEDICIONES; i ++) // Calcular o valor mdio da tenso
soma + = * (voltagem + i);
// Pode utilizar tenso de [i] em vez de * (voltagem
+ i)
retorno (soma / NMERO_DE_MEDICIONES);
}
As funes 'mtodo_1' e 'mtodo_2' so totalmente equivalentes. Ambos devolver o valor mdio do 'tenso []' matriz. Depois de declarar o
endereo do primeiro elemento pode ser escrita como 'tenso' ou '& tenso [0]'.

2.9 RECURSOS de pr-processamento

O pr-processador um programa que processa o cdigo antes de passar pelo compilador. Ele opera sob o controle das linhas de comando
chamadas directivas de pr-processador. Directivas de pr-processamento so colocados em cdigo fonte, normalmente no incio do
processo. Antes de atravessar o compilador, o cdigo fonte examinada pelo pr-processador que detecta e executa todas as directivas de
pr-processador. Pr-processamento diretivas seguir uma regra sintaxe especial, comeando com um smbolo "#" e no necessitam de ponto
e vrgula no final (;).

Directivas de pr-processador
A tabela a seguir contm um conjunto de pr-processamento diretivas freqentemente usados:
Directivas de pr-processador pode ser dividida em trs categorias:
D I R E C T I VAS

C AR ACTERSTICAS

#include

Define uma substituio de macro

#undef

Remove um nome de definio de macro

#define

Especifica um arquivo para ser includo

#ifdef

Teste de definio de macro

#endif

Especifique o final de #if

#ifndef

Testar se uma macro no definida

#if

Compilar condies de teste

#else

Especifica alternativas quando #if teste falhar

#elif

Especifica alternativa quando so necessrias mais de duas condies

Definies de macro
Incluses de arquivo
Controle Compilation

Agora, apresentamos apenas as directivas de pr-processador usado com mais freqncia. No entanto, no necessrio conhecer todos
eles para microcontroladores programa. Basta ter em mente que o pr-processador uma poderosa ferramenta para programadores
avanados em C, especialmente para controlar a compilao.

Directivas pr-processamento para definir macros


Usando macros voc pode definir constantes e executar funes bsicas. Substituio de macro um processo em que um identificador de
programa substitudo por uma cadeia de caracteres pr-definido. O pr-processador substitui cada ocorrncia do identificador no cdigofonte para uma string. Aps a substituio, o cdigo ser compilado normalmente.
Isto significa que a sintaxe do cdigo substitudo deve respeitar mikroC. A ao ocorre atravs da directiva '#define'.

#define PI 3,14159 // Substituio simples, PI ser substitudo por


// O valor 3,14159 em todas as partes do programa
Voc tambm pode usar os parmetros para substituies mais complexas:

#define VOLUME (D, H) (((D / 2) * (D / 2) * PI)) * H // Macro com parmetros


Em seguida, no cdigo, a seguinte declarao:

Tanque_1 = VOLUME (dimetro, altura);


substitudo por:

Tanque_1 = (((Dimetro / 2) * (Dimetro / 2) * PI) * Altura;


Atravs da directiva #undef possvel remover uma definio de macro nome. Isso especifica que a substituio que definido acima no ir
mais ocorrer no cdigo a seguir. Isso til quando voc quiser restringir a definio de apenas uma parte especfica do programa.

TANQUE #undef // Remover a definio da macro VOLUME


INCLUSO DE ARQUIVOS
O pr-processador diretiva #include copiar um arquivo especfico no cdigo-fonte. O cdigo includo deve observar a sintaxe do C para ser
compilado corretamente.

H duas maneiras de escrever estas directivas. No primeiro exemplo, somente o nome de arquivo for especificado, ento o pr-processador
ir procurar no arquivo de incluso. No segundo exemplo, o caminho completo est especificado, de modo que o ficheiro ser includo
directamente (este mtodo mais rpido).

#include <filename>// nome do arquivo especificado somente


#include "C: \ caminho \ nombre_de_archivo.h"
local especificado //
// exacto do ficheiro

2.10 mikroC PRO para PIC


Como vimos, existem vrias diferenas entre as lnguas mikroC e ANSI C. Neste captulo vamos apresentar as caractersticas especficas de
ordem mikroC para facilitar a programao de microcontroladores PIC.

Registros de funo especial de acesso (SFR)


Como todos os microcontroladores, a famlia PIC tem registos de funo especiais (SFR). Para programar um PIC, voc precisa acessar
esses registros (para ler ou a escrever sobre eles). Usando o compilador mikroC PRO para PIC possvel aceder a qualquer
microcontrolador SFR em qualquer lugar no seu cdigo (a SFR so considerados como variveis globais) sem declar-lo antes. Os
registradores de funes especiais so definidos em um arquivo externo e includo no compilador (arquivo .def). Este arquivo contm toda a
programao de microcontroladores PIC SFR.

TRISB = 0; // todos os pinos da porta so configurados como sadas PORTB


PORTB = 0; // todos os pinos PortB so definidos como 0

ACESSO AOS bits individuais


O compilador mikroC PRO para PIC permite acessar bits individuais de variveis de 8 bits por nome ou posio no byte:

INTCON.B0 = 0;
// Definir a 0 o bit 0 do registro INTCON
ADCON0.F5 = 1;
// Definir a 1 bit 5 de Registo ADCON0
INTCON.GIE = 0; // Definir a 0 o bit de interrupo (GIE)
Para aceder a um nico bit, que pode ser usado "FX" e ".BX '(o smbolo X representa um nmero inteiro de 0 a 7 que representa a posio
de bit).

TIPO SBIT
Se voc declarar uma varivel que corresponde a um pouco de SFR, use o tipo sbit . Uma varivel do tipo sbit se comporta como um
ponteiro e deve ser declarado como uma varivel global:

sbit Botn_PARADA em PORTA.B7; // definido Botn_PARADA


...
vazio main () {
// Qualquer alterao na Botn_PARADA afetar PORTA.B7
...
// Qualquer alterao na PORTA.B7 afetar Botn_PARADA
}
Neste exemplo, o Botn_PARADA uma varivel declarada pelo utilizador, enquanto PORTA.B7 (bit 7 de PORTA) ser reconhecido
automaticamente pelo compilador.

TAXA DE BITS
O mikroC PRO para PIC fornece um tipo de dados bit que pode ser usado para declarar variveis. Ele no pode ser usado na lista de
argumentos, ponteiros e valores de retorno de funes. Tambm no possvel declarar e inicializar uma taxa de bits varivel na mesma
linha. O compilador determina o bit em um dos registros disponveis para armazenar variveis.

bit bf;
// taxa de bits varivel vlido
pouco * ptr;
. // bit tipo invlido varibale
// No h ponteiros para uma varivel do tipo bit
bit bg = 0; // ERROR; instruo de inicializao no permitido
bit bg;
bg = 0;
// instruo de inicializao e vlido

ASM inserir cdigo IN C


s vezes, o processo de escrever um programa em C requer as partes escritas em cdigo de montagem. Isso permite que voc execute as
partes complicadas do programa de uma forma definida com preciso em um perodo de tempo preciso. Por exemplo, quando exigido que

os impulsos muito curtos (de alguns microssegundos) aparecem periodicamente num pino microcontrolador. Em tais casos, a soluo mais
simples seria usar o cdigo Assembler no programa parte que controla a durao do impulso.

Um ou mais instrues de montagem so incorporados no programa escrito em C, utilizando o comando asm :

asm
{
instrues de montagem
...
}
Escrito em cdigo assembly pode usar constantes e variveis previamente definidas em C. Claro que, como todo o programa escrito em C,
as suas regras se aplicam a declarar essas constantes e variveis.

unsigned char mximo = 100; // Declare variveis: mximo = 100


asm
{
// Incio do assembly de cdigo
MOVF mxima, W
// W = mximo = 100
...
}
// Fim do cdigo assembler

Funo de interrupo
Uma interrupo pra a execuo normal de um programa para executar operaes especficas. Uma lista de instrues a serem executadas
deve ser escrito dentro de uma determinada funo chamada de interrupo () . A sintaxe de uma interrupo no mikroC se parece com o
seguinte:

vazio interrupo () {
cnt ++;
// Quando uma interrupo ocorre
// cnt incrementado por 1
PIR1.TMR1IF = 0; // Defina como 0 bit TMR1IF
}
Ao contrrio de funes padro que no necessrio declarar o prottipo da funo de interrupo () . Alm disso, a execuo desta funo
no faz parte da execuo do programa regular, no deve ser chamado a partir de qualquer parte do programa (ele ser executado
automaticamente, dependendo das condies que voc definiu no programa). No prximo captulo, vamos dar uma explicao clara da
execuo e definio de sub-rotinas de interrupo.

BIBLIOTECAS
Voc provavelmente j reparou que nos exemplos anteriores usamos algumas funes como 'delay_ms' 'LCD_out' 'LCD_cmd' etc. Estas
funes so definidas nas bibliotecas contidas em compilador mikroC .

Uma biblioteca um cdigo compilado escrita em mikroC acima, que contm um conjunto de variveis e funes. Cada biblioteca tem um
propsito especfico. Por exemplo, a biblioteca contm visor LCD funes na tela LCD enquanto C_math fornece algumas funes
matemticas.
Antes de utilizar qualquer um deles no programa, necessrio informar o compilador para marc-los na lista de bibliotecas do compilador
existentes. Se o compilador encontra uma funo desconhecida durante a execuo do programa, ele ir primeiro procurar a sua declarao
marcado livrarias.

Para alm das bibliotecas existentes, voc pode criar bibliotecas e, em seguida, us-los no programa. O processo de criao de bibliotecas
esto descritas em detalhe na ajuda ( Ajuda compilador).
O compilador mikroC inclui trs tipos de bibliotecas:
- ANSI bibliotecas padro C:
LIBRARIA

DESCRIO

ANSI C Library Ctype

Usado principalmente para testes ou para converter dados

ANSI C biblioteca de matemtica

Usado para a matemtica de ponto flutuante

ANSI C Library stdlib

Ele contm recursos de bibliotecas padro

ANSI C biblioteca de Cordas

Utilizado para realizar operaes de cordas e manipulao de memria

- Bibliotecas Diversos:
LIBRARIA

DESCRIO

Biblioteca boto

Usada para desenvolver projetos

Biblioteca de Converso

Usado para converter tipos de dados

Sprint Biblioteca

Usado para formatar dados com facilidade

PrintOut Biblioteca

Usado para formatar e imprimir os dados

Biblioteca Tempo

Utilizado para os clculos de tempo (formato tempo UNIX)

Trigonometria Biblioteca

Usados para implementar funes trigonomtricas bsicas

Setjmp Biblioteca

Usado para saltos de programa

- Bibliotecas para o hardware:


LIBRARIA

DESCRI O

ADC Biblioteca

Usado para o funcionamento do A / D

CAN Biblioteca

Usado para operaes com o mdulo CAN

CANSPI Biblioteca

Usado para operaes com o mdulo CAN externa (MCP2515 e MCP2510)

Biblioteca Compact Flash

Usado para operaes com cartes de memria Compact Flash

EEPROM Biblioteca

Usado para operaes com EEPROM embutida

EthernetPIC18FxxJ60 Biblioteca

Usado para operaes com o mdulo Ethernet integrado

Memria flash de Biblioteca

Usado para operaes com a memria flash onboard

Graphic Biblioteca LCD

Usado para operaes com grfico mdulo LCD com resoluo de 128x64

I2C Biblioteca

I utilizado para operaes com o mdulo de comunicao serial I2C construdo

Teclado Biblioteca

Utilizado para operaes de teclado (botes 4x4)

Lcd Biblioteca

Usado para operaes com o LCD (2x16 caracteres)

Code Library Manchester

Usado para comunicao utilizando o cdigo de Manchester

Multi Card Media Library

Usado para operaes com cartes de mdia flash MMC

Uma biblioteca Wire

Usado para operaes com os circuitos de comunicao serial usando um fio

Expanso da porta da biblioteca

Usado para operaes com extensor de porta MCP23S17

PS / 2 Biblioteca

Usado para operaes com padro PS / 2 para teclado

PWM Biblioteca

Usado para operaes com o mdulo de PWM construdo

RS-485 Biblioteca

Usado para operaes com mdulos usando comunicao serial RS485

I2C Software Library

Usado para simular a comunicao I2C com software

SPI Software Library

Usado para simular o software de comunicao SPI

Software UART Biblioteca

Usado para simular o UART software de comunicao

Biblioteca de som

Utilizado para gerar sinais de udio

SPI Biblioteca

Usado para operaes com o mdulo SPI construdo

Biblioteca Ethernet SPI

SPI usado para a comunicao com o mdulo Ethernet (ENC28J60)

SPI Graphic Biblioteca LCD

Usado para comunicao SPI de 4 bits com grfico LCD

Biblioteca LCD SPI

Usado para comunicao SPI com o LCD de 4 bits (2x16)

SPI LCD8 Biblioteca

Usado para comunicao SPI 8-bit com LCD

SPI T6963C Graphic Biblioteca LCD

Usado para comunicao SPI com grfico LCD

UART Biblioteca

Usado para operaes com o mdulo UART construdo

USB Hid Biblioteca

Usado para operaes com o mdulo USB construdo

2.11 PROGRAMAO DE USAR O PIC mikroC PRO para PIC


Nas sees anteriores, apresentamos a lngua mikroC, projetado especificamente para programar o PIC. Agora, o que ns analisamos
suficiente para comear a programao, hora de apresentar o software usado para desenvolver e editar os projetos. Este software
chamado Ambiente de Desenvolvimento Integrado (Integrated Developement Environment - IDE) e inclui todas as informaes necessrias
para desenvolver projetos (editor, depurador etc.) ferramentas. Por extenso, IDE chamado s vezes um compilador. Nesta seo vamos
ensinar-lhe o bsico que voc precisa saber para comear a desenvolver o seu primeiro projeto usando o IDE mikroC mikroC PRO para PIC.
Alm de todas as caractersticas comuns de qualquer IDE, mikroC PRO para PIC contm a arquitetura de informao do PIC (registos,
mdulos de memria, operao de circuitos particulares etc.) para compilar e gerar um arquivo lido por um microcontrolador PIC
microcontroladores. Tambm inclui ferramentas especficas para microcontroladores PIC programao.
O processo de criao e execuo de um projeto contm os seguintes passos:

1.
2.
3.
4.
5.

Criar um projeto (nome do projeto, as configuraes do projeto, dependncias entre os arquivos)


Edio de um programa
Compilar o programa e correo de erros
Depurao (executar o passo a passo programa para garantir que as operaes desejadas so executados).
Programa de um microcontrolador (carregar o ficheiro hex gerado pelo compilador para o microcontrolador usand
programador PICflash ).

INSTALAR mikroC PRO para PIC


Primeiro de tudo, voc deve instalar o compilador (com IDE) no PC. A instalao do mikroC PRO para PIC semelhante instalao de
qualquer programa do Windows. Todo o procedimento realizado atravs de assistentes (assistentes de instalao):

Basta seguir as instrues e clique em seguida, OK, Next, Next ... Em geral, o mesmo procedimento, mas a ltima opo: 'Voc quer
instalar PICflash v7.11 programador'. O que este software? Que discutiremos mais tarde. Por agora, s sei que um software autnomo
usado para carregar o programa para o microcontrolador.
Mais uma vez: Em seguida, OK, Next, Next ...

Quando a instalao PICflash estiver concluda, o sistema operacional ir pedir para instalar software similar, software para agendar um
grupo especial de microcontroladores PIC que operam em modo de baixa energia (3,3 V). Pule esta etapa ...
O ltimo passo - a instalao do driver (driver)!

Clique em Sim.
Um driver um programa que permite que o sistema operacional para se comunicar com um perifrico. Neste caso, este o sistema de
desenvolvimento de dispositivo programador (hardware).

O controlador a instalar depende do sistema operacional utilizado. Selecione o sistema operacional apropriado (sistema operacional) usado
(abrindo a pasta) e iniciar o controlador de instalao. Mais uma vez, seguida, OK, Next, Next ... bem, tudo est instalado para iniciar a
programao!

CARACTERSTICAS PRINCIPAIS mikroC PRO para PIC


Quando voc inicia o IDE para PIC mikroC PRO, pela primeira vez, ir aparecer uma janela como mostrado abaixo:

Infelizmente, uma descrio detalhada de todas as opes disponveis nesta IDE nos levaria muito tempo. Ento, vamos descrever apenas o
mais importante da mikroC PRO para PIC. De qualquer forma, para mais informaes clique no boto Ajuda (Help) [F1].

GERENCIAMENTO DE PROJETOS
Antes de comear a escrever cdigo, voc deve criar um projeto. Um programa no compilador mikroC PRO para PIC no um arquivo fonte
autnoma, mas parte de um projeto que inclui um cdigo hexadecimal, cdigo de montagem, cabealho e outros arquivos. Alguns deles so
obrigados a compilar o programa, enquanto outros so criados durante a compilao. Um arquivo com .mcppi permite abrir qualquer um
desses projetos.
Para criar um projeto, basta selecionar a opo Projeto / New Project , e assistente aparecer automaticamente. O que ento? Siga as
instrues ...

GERENTE DE PROJETO (Project Manager)


Depois de criar o projeto, voc pode gerenciar todos os arquivos que ele contm usando a janela Project Manager. Basta clicar com o boto
direito do mouse em uma pasta e selecione a opo que voc precisa para seu projeto.

Configuraes do projeto (criao de projectos)


Ao compilar um projeto, o compilador gera o arquivo hex para ser carregado para o microcontrolador. Estes ficheiros ser diferente, que
depende do tipo do microcontrolador, bem como o efeito da compilao. Por conseguinte, necessrio ajustar alguns parmetros de projetos
usando a janela Configuraes do projeto .

Dispositivo (Dispositivo):
Ao selecionar o tipo de microcontrolador permite que o compilador para usar arquivo de definio de extrato (ficheiro.def) associado. O
arquivo de definio contm um microcontrolador informaes especficas dos seus registos SFR, seus endereos de memria e algumas
variveis especficas para esse tipo de programao de microcontroladores. obrigatrio para criar um arquivo .hex compatvel.

Oscilador (oscilador):
Voc deve especificar a velocidade de funcionamento do microcontrolador. Claro que, este valor depende do oscilador utilizado. O
compilador precisa compilar as rotinas, que exigem informaes de tempo (por exemplo delay_ms funo). Mais tarde, o programador
precisa desta informao tambm. A velocidade de funcionamento seja configurado de modo a permitir que o oscilador interno do
microcontrolador operado a uma frequncia seleccionada.

Construir / Tipo Debugger:


Todo o processo de compilao (edifcio) consiste de anlise sinttica (parsing), compilando, ligando (ligando) e gerar arquivos
hexadecimais. O tipo de compilao permite que voc ajuste o modo de compilao. Dependendo do modo seleccionado diferem ficheiros
gerados carregados no microcontrolador.
Solte : Ao escolher esta opo, o compilador no pode afectar mais a execuo do programa aps a compilao. O programa a ser
carregado para o microcontrolador no ir ser modificado de qualquer maneira.
ICD debug : Ao escolher esta opo, aps a concluso do processo de compilao e carregado o programa na memria do microcontrolador,
o compilador permanece ligado ao microcontrolador atravs do cabo USB e do programador, e pode ainda afectar o seu funcionamento. O
arquivo hex gerado contm dados adicionais que permitem o funcionamento do depurador de gs. Uma ferramenta chamada mikroICD (InCircuit Debugger - Debugger em circuito) pode executar passo a passo e fornecer acesso ao contedo atual de todos os registros de um
programa microcontrolador real.
O simulador de no utilizar os dispositivos reais para simular o funcionamento do microcontrolador, de modo que algumas operaes no
pode ser reproduzida (por exemplo, interrupo). De qualquer forma, mais rpido para depurar um programa usando um simulador.Alm
disso, nenhum dispositivo de destino no necessrio.
Note que voc pode alterar as configuraes a qualquer momento durante o programa editado. No se esquea de recompilar e
reprogramar o dispositivo depois de alterar uma definio.

BIBLIOTECA gestor (editor de biblioteca)


O compilador tem de conhecer todas as dependncias do seu arquivo de origem em mikroC para compilar corretamente. Por exemplo, se as
bibliotecas fazem parte de seu projeto, voc deve especificar qual deles so usados.
Bibliotecas contm um grande nmero de pronto para usar funes. Livrarias mikroC proporcionar muitas facilidades para escrever
programas para microcontroladores PIC. Abra o Gerenciador de biblioteca , e marca que voc deseja usar no programa. Ao verificar uma
biblioteca, ele automaticamente adicionado ao projeto e ligada durante a compilao. Assim, no h necessidade de incluir as bibliotecas
manualmente no seu cdigo-fonte arquivos atravs pr-processador diretiva #include .

Por exemplo, se seu programa usa um LCD no h necessidade de escrever novas funes como selecionar a biblioteca Lcd, voc pode
usar pronta a usar LCD (Lcd_Cmd, LCD_Init ...) funes de biblioteca no seu programa. Se esta biblioteca no est selecionada na janela
Biblioteca Manager, sempre que voc tentar usar uma funo da biblioteca de LCD, o compilador ir relatar um erro. Uma descrio de cada
biblioteca est disponvel quando voc clica com o boto direito sobre seu nome e selecionar a opo Ajuda.

Editar e compilar programas


Cdigo Editor (editor de cdigo)
O processo de programas de edio deve ser feita dentro da janela principal do IDE chamado Editor de cdigo. Ao escrever o programa no
se esquea dos comentrios. Os comentrios so muito importantes para refinar e melhorar o programa. Alm disso, embora o compilador
no tem restries de formatao, voc deve sempre seguir as mesmas regras de edio (como nos exemplos fornecidos neste livro). Como
no existem limitaes de tamanho, no hesite em usar os espaos em branco para tornar o cdigo mais legvel.

Ao escrever um programa, no espere para terminar de escrever o programa para compilar. Compilar o cdigo em uma base regular com a
finalidade de corrigir erros de sintaxe muito mais. Alm disso, voc pode compilar o seu programa cada vez que a elaborao de uma nova
funo, bem como testar o seu comportamento ao usar o modo de depurao (ver seco seguinte) est concluda. Assim, mais fcil para
solucionar erros de programa para no "tomar um caminho errado" para escrever o seu programa. Caso contrrio, voc ter que editar todo o
programa.

CDIGO EXPLORER (EXPLORER CODE)


A janela Code Explorer permite que voc localize funes e procedimentos dentro de grandes programas. Por exemplo, se voc pesquisar
uma funo usada no programa, basta clicar duas vezes sobre o seu nome nesta janela, eo cursor ser automaticamente posicionado sobre
a linha apropriada no programa.

Compilando e corrigir erros


Para compilar o cdigo, clique na opo Build no menu Project. Na verdade, todo o projeto foi compilado, e se a compilao foi bem
sucedida, os arquivos de sada (ASM, hex etc.) sero gerados. A compilao foi bem sucedida se no for encontrado nenhum erro.Durante o

processo de compilao muitas mensagens que so exibidas na janela de mensagens gerado. Estas mensagens consistir em informao,
e o aviso de erro. Cada erro encontrado est associada sua linha de programa e descrio.
Como um erro em seu cdigo pode gerar muito mais erros, simplesmente tentar corrigir o primeiro erro na lista e, em seguida, recompilar seu
programa. Em outras palavras, aconselhvel para corrigir erros, um por um.

No exemplo anterior, h dois erros e um aviso: falta um ponto e vrgula e um aviso de declarao de varivel informa que o tipo de retorno da
funo ausente principal .
A compilao permite que voc corrigir o seu programa, resolvendo todos os erros em mikroC. Quando todos os erros so resolvidos, o
programa est pronto para ser carregado para o microcontrolador. No entanto, sua tarefa ainda no est terminado, porque no sabe se seu
programa funciona como esperado ou no.

Depurar o programa
A depurao um passo muito importante, pois permite que voc teste o programa aps uma compilao com sucesso, ou corrigir bugs
descobertos enquanto o programa est em execuo. Como vimos, existem duas maneiras de depurao: um depurador software que
simula o funcionamento do microcontrolador (modo padro) e hardware depurador (mikroICD), que l diretamente o contedo da memria do
microcontrolador. O processo de purificao o mesmo, independentemente do modo escolhido. No caso de escolher a opo CID de
depurao , o programa deve ser carregado para o microcontrolador que antes depurar.
Para iniciar a depurao, clique na opo Iniciar depurador de menu Run . O editor de cdigo ser ligeiramente modificada automaticamente
e aparece uma janela chamada Assista Valores . O princpio da purificao baseado em executar o passo a passo e controlar o teor de
registos e os valores das variveis do programa. Assim, voc pode verificar o resultado de um clculo e ver se algo inesperado
aconteceu. Quando voc executar o programa passo a passo, voc pode facilmente localizar problemas.
Durante um programa de depurao que vai ser mudado, assim que voc deve sempre recompilar o programa aps cada correo, e
reiniciar o depurador para ver o que foi alterado.

Comandos do depurador
Existem vrios comandos disponveis para a depurao do cdigo:

Step Into - Executa uma instruo. Quando a instruo uma chamada para uma rotina, o depurador ir saltar para a
rotina e parar depois de executar a primeira instruo dentro da rotina.
Step Over - uma instruo executada. Quando a instruo uma chamada para uma rotina, o depurador no vai
fazer um salto para a rotina, mas toda a rotina executado. O depurador pra na primeira instruo aps a chamada
para a rotina.
Run To Cursor - O programa executado para a linha onde est o cursor.
Saia - outras instrues dentro da rotina executado. O depurador pra imediatamente ao sair da rotina.

Breakpoints (Pontos de Interrupo)


Os pontos de interrupo tornar o processo de depurao de programas de forma mais eficiente, uma vez que permitem a execuo do
programa a toda a velocidade e parar automaticamente em uma linha especfica (ponto de interrupo). Isto muito til, permitindo que voc
verifique apenas as partes crticas do programa e no perder tempo tentando toda a linha de programa por linha. Para adicionar ou remover
um ponto de interrupo basta clicar sobre a linha apropriada no lado esquerdo do editor de cdigo, ou pressione [F5]. Uma pequena janela

chamada pontos de interrupo mostra onde os pontos de interrupo so. Note que as linhas designados como pontos de interrupo esto
marcados em vermelho.
A linha est atualmente em execuo est marcada em azul. Voc pode ler o contedo de registros e variveis selecionadas na janela
Valores de Vigia a qualquer momento. Para executar o programa a partir da seo de linha onde o cursor at o ponto de ruptura, utilize o
comando Run / Pause Debugger.

RELGIO valores da janela


O software depurador e hardware tm a mesma funo de monitorar o estado dos registos durante a execuo do programa. A diferena
que o depurador software simula a execuo do programa em um PC, enquanto o depurador ICD (hardware depurador) usa um
microcontrolador real. Qualquer alterao no estado lgico do pino indicada no registo (porto) apropriado. Como a janela Valores de Vigia
permite que voc monitore o status de todos os registros, fcil verificar se um pino zero ou um. A ltima alterao marcada em
vermelho na janela Valores de Vigia. Isso permite que voc localize a alterao na lista de variveis e registros durante a depurao.

Para visualizar esta janela voc precisa selecionar a opo Exibir / Debug Windows / Assista Valores . Depois, voc pode fazer uma lista de
registros / variveis que voc deseja monitorar e como exibi-los.

CRONMETRO (TIMER)
Se voc quiser saber quanto tempo leva um microcontrolador para executar uma parte do programa, selecione a opo Run / Ver
Cronmetro. como mostrado na figura direita uma janela aparece. Como um trabalho timer? Isso uma brisa ... O tempo que leva um

comando (passo para, passar por cima, executar / pausar etc.) para executar o depurador medido e exibido na janela Cronmetro
automaticamente. Por exemplo, programado para executar um programa, o tempo para executar a ltima etapa etc.

Programar o microcontrolador
Se voc tiver resolvido todos os erros em seu cdigo e acha que seu programa est pronto para uso, o prximo passo carregado para o
microcontrolador. O programador PICflash utilizado para esta finalidade. Ele uma ferramenta desenhada para a programao de todos os
tipos de microcontroladores PIC. composto de duas partes:

A parte de hardware utilizada para introduzir um cdigo hexadecimal (o programa a ser carregado para o
microcontrolador) e para programar o microcontrolador usando nveis especficos de tenso. Durante a programao,
um novo programa gravado na memria flash do microcontrolador, enquanto o programa anterior automaticamente
eliminado.
O software se encarrega de enviar o programa (arquivo hex) para o hardware do controlador atravs de um cabo
USB.A interface do usurio deste software acessvel a partir de IDE quando voc clica na opo de menu
Ferramentas mE_Programmer ou pressione [F11]. Portanto, possvel modificar algumas configuraes do
programador e controlar o funcionamento da parte de hardware (Load, Escrever, verificar ...).

O microcontrolador pode ser reprogramada sempre que necessrio.

OUTRAS FERRAMENTAS COMPILER


O mikroC PRO para PIC fornece ferramentas que simplificam o processo de escrever o programa. Todas estas ferramentas esto no menu
Ferramentas. Na prxima seo, vamos dar uma breve descrio de todos eles.

USART TERMINAL
O USART terminal de um substituto para o padro do Windows HyperTerminal. Ele pode ser usado para controlar o funcionamento do
microcontrolador, que utiliza a comunicao USART. Tais microcontroladores so construdas em um dispositivo de destino e ligado ao
conector RS232 no PC atravs de um cabo serial.
A janela do terminal USART tem opes para configurar os dados de comunicaes e ecr de srie enviadas / recebidas.

EDITOR EEPROM
Ao selecionar a opo Editor de EEPROM a partir do menu Ferramentas, aparece uma janela como mostrado na figura a seguir. Isto como
a memria EEPROM do microcontrolador funciona. Se voc quiser alterar o seu contedo depois de carregar o programa para o
microcontrolador, este o caminho certo para faz-lo. O novo contedo de dados de um tipo especfico (char, int ou double), primeiro voc
deve selecion-lo, digite o valor no campo Editar valor e clique em Editar. Em seguida, clique no boto Salvar para salv-lo como um
documento com extenso .hex. Se a opo Use EEPROM no Projeto est ativo, os dados so automaticamente carregados para o
microcontrolador durante a programao.

JANELA ASCII CARTA


Se voc precisa para representar numericamente um caractere ASCII, selecione a opo tabela ASCII a partir do menu Ferramentas. Uma
tabela aparece, como mostrado na figura abaixo. Voc provavelmente sabe que cada tecla do teclado associado a um cdigo (cdigo
ASCII). Como voc pode ver, os personagens que representam os nmeros tm valores diferentes. Por esta razo, o programa de instrues
para exibir o nmero 7, num LCD no exibir este nmero, mas o equivalente da instruo BEL. Se voc enviar o mesmo nmero que um
personagem para um LCD, voc obter o resultado desejado - nmero 7. Portanto, se voc quiser exibir um nmero sem fazer um carter
prprio, necessrio adicionar o nmero 48 a cada dgito em que o nmero apresentado.

EDITOR DE SETE SEGMENTOS


Um editor de sete segmentos permite determinar facilmente o nmero para colocar em uma porta de sada, a fim de exibir um smbolo
desejado. Naturalmente, subentende-se que os pinos de porta deve ser ligado a exibir segmentos de forma adequada. Basta colocar o cursor
em qualquer segmento de exibio e clique sobre ele. O nmero ser exibido imediatamente introduzir o programa.

LCD CUSTOM personagem (PERSONAGENS LCD definido pelo usurio)


Alm dos caracteres convencionais, o microcontrolador pode tambm apresentar os caracteres criada pelo programador. Ao selecionar a
ferramenta carter personalizado LCD, um trabalho pesado de criar funes para o envio de cdigo apropriado para um monitor que ser
evitada. Para criar um smbolo, clique sobre os pequenos quadrados na janela de carter personalizado LCD, em seguida, selecione a
posio e linha e clique no boto Gerar. O cdigo adequado aparecer em outra janela. No h necessidade de pressionar mais. Cpia para
rea de transferncia (copiar para o clipboard) - Paste (colar) ...

GERADOR BITMAP para o grfico de LCD


O gerador de bitmap para um LCD grfico uma ferramenta indispensvel se voc escrever o programa usando o visor LCD (GLCD). Esta
ferramenta permite que voc exiba um mapa de bits com facilidade. Selecione Ferramentas / janela GLCD Bitmap Editor aparece opo
apropriada. Para usar, selecione o tipo de exibio de usar e carregar um bitmap. O bitmap deve ser monocromtica e ter a resoluo
apropriada da tela (128 x 64 pixels neste exemplo). O procedimento o mesmo que no exemplo anterior: Copiar para rea de
transferncia ...

Um cdigo gerado usando ferramentas para controlo do LCD e GLCD exibe contm as funes da biblioteca de LCD. Se usado no
programa, no se esquea de verificar a caixa de seleo prxima a esta biblioteca na janela Biblioteca Manager. Assim, o compilador ir
reconhecer essas funes corretamente.

Captulo 3: microcontrolador PIC16F887


O PIC16F887 um produto conhecido da Microchip empresa. Ele tem todos os componentes disponveis na maioria dos microcontroladores
modernos. Por causa de seu baixo preo, uma vasta gama de aplicaes, de alta qualidade e disponibilidade, uma soluo perfeita aplicar
para controlar vrios processos na indstria, em dispositivos de controle de mquina para medir variveis de processo, etc. Algumas de suas
principais caractersticas esto listadas abaixo.

3.1 RECURSOS BSICOS PIC16F887


SFR 3.2 registro principal
3.3 portos de entrada / EXIT
TIMER 3.4 TIMER0

3.5 Timer1
3.6 Timer2
3.7 CCP MDULOS
3.8 mdulos de comunicao serial
3.9 Mdulos analgicos
3,10 relgio oscilador
3.11 EEPROM
3.12 REINICIAR! Blackout, escurecimento parcial ou rudos?

3.1 RECURSOS BSICOS PIC16F887

Arquitetura RISC
o

O microcontrolador tem apenas 35 instrues diferentes

Todos so instrues de ciclo uni exceto o ramo

Freqncia de operao 0-20 MHz

Alta preciso oscilador interno


o

Calibrao de fbrica

Faixa de freqncia de 8MHz para 31KHz selecionados por software

Fonte de alimentao de tenso de 2.0V a 5.5V


o

Consumo: 220uA (2.0V, 4MHz), 11uA (2,0 V, 32 KHz) 50nA (standby)

A poupana de energia em modo de suspenso

Brown-out Reset (BOR) com uma opo para controlar software

35 pinos de entrada / sada


o

alta fonte e dreno atual manipulando LED

resistncia pull-up individualmente programvel software

interrupo quando se muda o estado do pino

ROM tecnologia 8K FLASH


o

O chip pode ser re-programadas para 100.000 vezes

Opo de srie no circuito de programao


o

O chip pode ser programado mesmo embutido no dispositivo de destino.

256 bytes da EEPROM


o

Os dados podem ser gravados mais de 1.000.000 vezes

368 bytes de memria RAM

Um conversor A / D:
o

14 canais

Resoluo de 10 bits

3 temporizadores / contadores independentes

Watchdog timer

Mdulo comparador analgico


o

Dois comparadores analgicos

Tenso de referncia fixo (0.6V)

Referncia de tenso programvel no chip

Mdulo PWM construdo

Mdulo USART reforada


o

Suporta RS-485 de srie, RS-232 e LIN2.0

Deteco de transmisso Auto

Mestre Synchronous Serial Port (MSSP)


o

Ele suporta os modos SPI e I2C

DESCRIO DOS PINHOS


A maioria dos pinos do microcontrolador PIC16F887 so multi como mostrado na figura anterior. Por exemplo, o RA3 / AN3 / Vref + / C1IN +
alocao para o quinto pino do microcontrolador indica que ele tem as seguintes funes:

RA3 Terceiro entrada / sada digital da porta Um


Terceiro AN3 entrada analgica
Vref referncia de tenso positiva +
Entrada C1IN + positiva do comparador C1

A funcionalidade do pino mostrado acima muito til porque permite uma melhor utilizao dos recursos do microcontrolador, sem afectar o
seu funcionamento. Estas funes dos pinos no podem ser utilizados simultaneamente, mas pode ser alterado a qualquer momento durante
a operao.
As tabelas a seguir referem-se a 40 pinos DIP microcontrolador.

Unidade de processamento central (CPU)


De modo a explicar de forma clara e concisa, sem descrever profundamente o funcionamento da CPU, deixe de ser notado que a CPU
fabricado com a tecnologia RISC, porque este um factor importante para decidir qual o microcontrolador usar.
RISC um acrnimo derivado do Ingls Reduced Instruction Set Computer , que d as PIC16F887 duas grandes vantagens:

O CPU tem apenas 35 instrues simples. Podemos dizer que, a fim de programar outros microcontroladores em
linguagem assembly necessrio conhecer mais de 200 instrues
O tempo de execuo o mesmo para quase todas as instrues e demora cerca de 4 ciclos de relgio. A frequncia
do oscilador estabilizada por um cristal de quartzo. Ir instrues e ramificao levar oito ciclos de clock para
executar. Isto significa que se a velocidade de funcionamento do microcontrolador de 20 MHz, o tempo de execuo
de cada instruo ser 200ns, isto , o programa ser executado 5million instrues por segundo!

MEMRIA
O PIC16F887 possui trs tipos de memria: ROM, RAM e EEPROM. Como cada um tem as funes, caractersticas e organizao
especfica, vamos apresent-los separadamente.

ROM MEMRIA
A ROM usado para armazenar programa permanente que est sendo executado. por isso que muitas vezes chamado de "memria de
programa". O PIC16F887 tem 8 KB ROM (total de 8192 lugares). Como a ROM feita com a tecnologia Flash, o seu contedo pode ser
alterado para fornecer tenso de programao especial (13V).
No entanto, no necessrio explicar em detalhes, uma vez que por um programa especial no computador e um dispositivo eletrnico
simples chamado programador automaticamente.

EEPROM
Similar memria de programao, o contedo da EEPROM memorizado permanentemente, desligando a fonte de alimentao. No
entanto, ao contrrio da ROM, o contedo da memria EEPROM pode ser alterada durante o funcionamento do microcontrolador. a razo
pela qual essa memria (256 locais) perfeito para guardar permanentemente alguns resultados criados e utilizados durante a execuo do
programa.

RAM

a terceira e mais complexa parte da memria do microcontrolador. Neste caso, ele composto por duas partes: registos de uso geral e os
registradores de funes especiais (SFR). Todos esses registros so divididos em quatro bancos de memria que ns discutiremos mais
tarde neste captulo.
E mbora os dois conjuntos de registros so repostos desligando a fonte de alimentao, tambm so fabricados da mesma maneira e se
comportar de forma semelhante, as suas funes tm muitas coisas em comum.

Registos de uso geral


Os registradores de propsito geral so usados para armazenar dados temporrios e os resultados criados durante a operao. Por exemplo,
se o programa realiza a contagem (de produtos em uma linha de montagem), necessrio ter um registro que representa o que ns
chamamos todos os dias "soma" de vida. Como o microcontrolador no criativo, necessrio especificar a direo de um registo de
propsito geral e atribuir essa funo. Voc deve criar um programa simples para aumentar o valor deste registo por 1 depois de cada
produto passou atravs do sensor.
Agora, o microcontrolador pode executar o programa como eles sabem o que e onde a soma de ser aumentado. Da mesma forma, cada
varivel de programa ser pr-atribuir qualquer um dos registos de uso geral.

/ * Nesta sequncia, a varivel no valor recorde aumentada cada vez que voc
tomar uma (1) entrada lgica pino RB0. * /
...
se (PORTB.0 = 1) // Verifique se o pino RB0 uma
soma ++;
// Se o valor da varivel aumentada de um
...
// Se no, o programa sai do comando if
...

Registradores de funes especiais (SFR)


Os registradores de funes especiais tambm fazem parte da RAM. Ao contrrio dos registos de uso geral, a sua finalidade prdeterminado durante o processo de fabrico e no pode ser alterado. Como os bits so ligados aos circuitos individuais sobre o chip
(conversor A / D, o mdulo de comunicao srie, etc.), qualquer alterao do seu contedo directamente afecta o funcionamento do
microcontrolador ou de qualquer dos circuitos.
Por exemplo, o registo ADCON0 controla a operao do conversor A / D. Ao alterar os bits do pino da porta definido como a entrada do
conversor, a hora de incio da converso e da velocidade de converso determinada.
Outra caracterstica dessas posies de memria que eles tm nomes (de ambos os registos e os seus bits), o que simplifica o processo de
escrever um programa. Como a linguagem de programao de alto nvel que voc pode usar a lista de todos os registros com os seus
endereos exatos, basta especificar o nome de registro para ler ou alterar o seu contedo.

// Nesta sequncia, o contedo dos registos e TRISC PORTC ser modificado


...
TRISC = 0x00
// uma lgica zero (0) escrito no registo TRISC (todos os
// pinos da porta so configurados como sadas PORTC)
PORTC = 0b01100011
// mudana de estado lgico de todos os pinos do porto PORTC
...
Bancos de memria RAM
A memria RAM dividida em quatro bancos. Antes de acessar um registro ao escrever um programa (para ler ou alterar o seu contedo),
voc precisa selecionar o banco que contm esse registro. Mais tarde vamos tentar dois bits do registo STATUS usado para seleo de
banco. Para simplificar a operao, a SFR frequentemente utilizados tm o mesmo endereo em todos os bancos, permitindo o acesso a
eles facilmente.

Trabalhando com os bancos pode ser difcil se voc escrever um programa em linguagem assembly. Usando a linguagem de programao
de alto nvel como compilador C, como mikroC PRO para PIC , basta digitar o nome do registro. A partir desta informao, o compilador
seleciona banco necessrio. Adequado para instrues de seleco bancrias sero incorporadas no cdigo durante a compilao. At
agora voc s ter usado linguagem assembly e esta a primeira vez usando o compilador C, certo? uma notcia maravilhosa, no acha?

BATERIA
Uma parte da memria RAM utilizada como uma pilha de oito registos de 13 bits. Antes de o microcontrolador est definida para executar
um sub-rotina (instruo CALL) ou quando uma interrupo ocorre, o endereo da primeira instruo seguinte a ser executada colocado na
pilha (empilhados), ou de um dos registos. Graas a isso, aps a execuo de uma sub-rotina ou uma interrupo, o microcontrolador "sabe"
quando a continuar a execuo do programa. Este endereo suprimido (que aparece) depois de voltar para o programa, uma vez que no
necessrio guardar, proporcionando automaticamente esses locais da pilha para utilizao futura.
Deve-se ter em mente que os dados so empilhadas circular. Isto significa que depois de se empilhar oito vezes, o valor de tempo
armazenados nona pelo empilhamento de dados substitudo primeiro. A dcima vez que voc empilhar, o valor armazenado pelo
empilhamento segundo dados de tempo substitudo etc. Assim, os dados sobrescritos no podem ser recuperados. Alm disso, o

programador no pode acessar esses registros para leitura / gravao. Sem bit de status para indicar o estado de estouro de pilha ou
underflow. Por esta razo, devemos ser particularmente cuidadosos ao escrever um programa.
Vamos faz-lo em mikroC ...

/ * Quando entrar ou sair da instruo de montagem do programa, o compilador


ele no vai salvar os dados no banco ativo atualmente RAM. Isso significa
que nesta seo programa de seleo banco depende dos registos SFR
utilizado. Retornando para a seo de programa escrito em C, os bits de controle
RP0 e RP1 deve devolver o estado em que estavam antes da execuo de cdigo
linguagem assembly. Neste exemplo, o problema resolvido, usando o
SaveBank auxiliar varivel que salva o estado destes dois bits * /
saveBank
// (bits
asm {
...
...
...
}
STATUS &
Situao
...
...

= STATUS & 0b01100000; // Salva o estado do RP0 e RP1 pedaos


5 e 6 do registo STATUS)
// Incio do seqncia de montagem
// cdigo assembler
// Fim da seqncia de montagem
= 0b10011111; // Bits RP0 e RP1 retornar seu estado original
A | = saveBank;

Interrupes do sistema
Aparecendo uma solicitao primeira coisa interrupo do microcontrolador est executando a instruo atual aps o processo de execuo
do programa pra. Como resultado, o endereo de memria do programa em curso automaticamente empilhar e o endereo padro (prdefinidos pelo fabricante) escrito para o contador de programa. A localidade em que o programa continua a execuo chamado de vetor
de interrupo. Para o microcontrolador PIC16F887 0x0004h nesta direco. Como se mostra na figura abaixo local que contm o vector
de interrupo ignorada durante a execuo do programa regular.
Uma parte do programa a ser executado quando um pedido de interrupo chamado rotina de interrupo. Sua primeira instruo no vetor
de interrupo. O tempo que demora a executar esta sub-rotina e como ser depende da habilidade do programador, bem como a fonte de
interrupo. Alguns microcontroladores ter mais de um vetor de interrupo (cada solicitao de interrupo tem seu vetor), mas neste caso
s existe um. Por conseguinte, a primeira parte apresenta a rotina de interrupo para detectar a fonte de interrupo.
Finalmente, reconhecendo a origem da interrupo e terminar de executar a rotina de interrupo atinge a instruo
microcontroladorRETFIE , tomar a direco da pilha e continua a execuo do programa a partir de onde parou.

mikroC reconhece uma rotina de interrupo a ser executada como a funo de interrupo vazio () . O corpo da funo, ou seja, a
rotina de interrupo deve ser escrito pelo utilizador.

void interrupcao () { // rotina de interrupo


cnt ++;
// interrupo varivel provoca cnt ser incrementado por 1
}

Usando os registros SFR

Suponha que voc j comprou um microcontrolador e tem uma boa idia de como usar ... A lista de registos SFR e seus pedaos
longa.Cada controla o processo. No geral, parece que uma tabela de controle grande com um grande nmero de instrumentos e
switches. Agora que voc est preocupado sobre como aprender sobre todos eles? improvvel, mas no se preocupe, voc no
precisa! Os microcontroladores so to poderosas que parecem supermercados: eles oferecem tanto para baixar os preos e voc apenas
toc-lo escolher o que voc precisa. Portanto, selecione o campo no qual voc est interessado e analisar apenas o que voc
precisa. Quando entender completamente a operao do hardware, examine os gerentes de registros para controlar SFR (geralmente eles
so poucos).
Como todos os dispositivos possuem um tipo de sistema de controle de microcontrolador tem suas "alavancas" com os quais voc deve estar
familiarizado com o de ser capaz de us-los corretamente. Naturalmente, ns estamos falando sobre os registos SFR a partir do qual o
processo de programao comea e onde termina.

SFR 3.2 registro principal


O que se segue descreve a SFR principal registra PIC16F887 microcontrolador. Os bits de cada cadastre-se controlar os diferentes circuitos
dentro do chip, por isso no possvel classific-los em grupos especiais. Por esta razo, eles so descritos em conjunto com os processos
que controlam.

Registo STATUS

O registo STATUS contm: o status aritmtica dos dados no registo W, o estado de RESET, bits para selecionar o banco de memria de
dados.

IRP - Bank Select Register (usado para endereamento indireto)


o
o

1 - Os bancos 0 e 1 so ativos (locais de memria 00h-FFh)


0 - Bancos 2 e 3 so activos (posies de memria 100h-1FFH)

RP1, RP0 - Bank Select Register (usado para endereamento direto).

RP1

RP0

B A N C O D E AT I V O S

Banco 0

Banco 1

Banco 2

Banco 3

TO - Time-out bit (bit watchdog sada do temporizador)


o
o

PD - bit Power-baixo (pouco fora)


o
o

1 - Depois de ligar o microcontrolador, depois de executar a instruo CLRWDT para reiniciar o WDT.
0 - Depois de executada a instruo SLEEP colocar o microcontrolador em modo de baixa energia.

Z - Zero bit (bit zero)


o
o

1 - Depois de ligar o microcontrolador, aps a instruo executada CLRWDT para reiniciar o WDT (watchdog timer) ou aps a
instruo SLEEP que define o microcontrolador em modo de baixo consumo de execuo.
0 - Depois de terminar o tempo WDT.

1 - O resultado de uma operao aritmtica ou lgica 0.


0 - O resultado de uma operao aritmtica ou lgica no 0.

DC - Digit carry / borrow bit (emprstimo carry / dgitos) alteraes adicionando ou subtraindo se ocorrer um
"estouro" ou um "emprstimo" no resultado.
o
o

1 - Houve transportando a quarta baixo fim bit (baixo mordidela) sobre o resultado.
0 - Havia transportando a quarta baixo fim bit (baixo mordidela) sobre o resultado.

C - Leve / Borrow bit (carry bit / emprstimo) alterado pela adio ou subtrao se um "estouro" ou um "emprstimo"
no resultado, ou se o resultado for maior que 255 ou inferior a 0 ocorre.
o
o

1 - leve ocorreu no bit mais significativo (MSB) do resultado.


0 - Sem levar ocorreu no bit mais significativo (MSB) do resultado.

OPTION_REG

O registo OPTION_REG contm vrios bits de controle para definir a pr - scaler Temporizador 0 / WDT, o temporizador Timer0, a interrupo
externa e pull-up resistores em PORTB.

RBPU - Porto B Puxe Habilitar bit (Porto B Pull Up resistncia)


o

1 - desativado.

0 - On.

INTEDG - Interrupo de Borda Select bit (selector pouco bordo activo da interrupo externa)
o

1 - Interrupo na subida do RB0 / INT.

0 - Interrupo por cair borda em RB0 / INT.

T0CS - TMR0 Clock Source Select (seletor de velocidade do clock de bits para Timer0) bit
o

1 - pulsos introduzidas atravs toki (contador).

0 - Pulso relgio interno Fosc / 4 (temporizador).

T0SE - TMR0 Fonte Borda Select bit (bit selector taxa flanco toki) seleciona a borda (ascendente ou
descendente) contados pelo temporizador Timer0 pelo pino RA4 / T0CKI.
o

1 - Os aumentos de cair borda no pino toki.

0 - Aumentos na borda de subida na pinTOCKI.

PSA - bit Prescaler atribuio atribui o prescaler (apenas um) ou WDT timer.
o

1 - Pr - scaler atribudo ao WDT.

o
0 - Pr - scaler atribudo a Timer0 timer.
PS2, PS1, Taxa PS0 Prescaler Escolha pedaos (valor selector pouco do divisor de frequncia)
O valor do divisor de frequncia seleccionada pela combinao desses trs bits. Como mostrado na tabela abaixo, o valor do divisor de
frequncia atribudo ao temporizador (Timer0) ou o temporizador de vigilncia (WDT).
PS2

PS1

PS0

TMR0

WDT

1: 2

1: 1

1: 4

1: 2

1: 8

1: 4

01:16

1: 8

1:64

01:32

1: 128

1:64

1: 256

1: 128

Para obter o valor do divisor de frequncia de 1: 1 quando o cronmetro Timer0 conta pulsos, o divisor deve ser atribudo ao WDT. Em
consequncia, o temporizador no usa Timer0 prescaler, mas conta directamente os impulsos gerados pelo oscilador, que foi o alvo.
Vamos faz-lo em mikroC ...

/ * Se o comando CLRWDT no executado,


o WDT redefinir o microcontrolador cada 32,768 uS (f = 4 MHz) * /
vazio main () {
OPTION_REG = 0b00001111; // prescaler atribudo a WDT (1: 128)
asm CLRWDT; // montagem de comando para redefinir o WDT
...
... // O tempo entre esses dois comandos CLRWDT no deve exceder 32.768 microssegundos
(128x256)
...
asm CLRWDT; montagem // Comando para redefinir o WDT
...
... // O tempo entre esses dois comandos CLRWDT no deve exceder 32.768 microssegundos
(128x256)

...
asm CLRWDT; montagem // Comando para redefinir o WDT
}

SISTEMA DE REGISTROS RUPTURA


Chegando pedido de interrupo no significa que uma interrupo ocorrer automaticamente, porque ele deve ser habilitado pelo usurio
(para o programa). Por esta razo, h bits especiais usados para activar ou desactivar as interrupes. fcil de reconhecer pelas letras IE
contidas em seus nomes (Habilitar Interrupo - habilitado interrupo). Alm disso, cada interrupo est associado a outro bit chamado a
bandeira indicando que um pedido de interrupo chegou sem verificar se habilitado. Tambm fcil de reconhecer pelas duas ltimas letras
contidas em seus nomes - IF (Flag de Interrupo - interrupo Flag).

Como vimos, a idia muito simples e eficiente. Chegando pedido de interrupo, primeiro bit sinalizador est definido para um.
Se o bit IE apropriado zero (0), esta condio ser completamente ignorados. De outro modo, ocorre uma interrupo. Se vrias fontes de
interrupo so habilitados, necessrio para detectar ativa antes da rotina de interrupo est definido para ser executado. A fonte de
deteco realizada atravs da verificao dos bits dos sinalizadores.
Observe que os bits de cada bandeira no apagada automaticamente, mas por software durante a execuo de rotina de interrupo
continua a ser executado. Se ignorarmos esse detalhe, outra interrupo ocorrer imediatamente aps o retorno ao programa principal, mas
no h mais pedidos de execuo. Simplesmente, a bandeira eo bit IE, permanecem em um.
Todas as fontes de interrupo tpicos para PIC16F887 microcontrolador so mostrados na pgina seguinte. Observe o seguinte:
O bit GIE ativa / desativa interrupes desmascarado simultaneamente.
O bit PEIE ativa / desativa interrupes desmascarado perifrica. Isto no se refere ao temporizador Timer0 e interromper fontes PORTB
porto.
Para habilitar uma interrupo causada pela mudana de estado lgico no PORTB, voc precisa ativ-lo para cada bit separadamente.Neste
caso, cadastre-se pedaos IOCB IE se comportam como bits de controle.

INTCON
O registo INTCON contm vrios bits e permitir bandeira estouro do registo TMR0, e interrupes pela mudana de estado no PORTB porto
e interrupes externas pino INT.

GIE - A Global Habilitar Interrupo bit - (bit de habilitao de interrupo global) controla simultaneamente todas as
fontes de potenciais interrupes.
o
o

PEIE - Peripheral Habilitar Interrupo bit (bit habilitar interrupes perifricos) semelhante ao GIE pouco, mas os
controles Interrupes habilitadas pelos perifricos. Isso significa que nenhuma influncia sobre as perturbaes
causadas pelo temporizador Timer0 ou alterar o estado em PORTB ou alterar o pino RB0 / INT.
o
o

1 - Habilita interrupes desmascarado.


0 - desativa interrompe desmascarado.

1 - Habilita interrupes perifricas no mascaradas.


0 - desativa interrupes perifricas no mascaradas.

T0IE - TMR0 Overflow Habilitar Interrupo bit (bit de habilitao de interromper o estouro de cronmetro Timer0)
controla rupturas causadas pelo transbordamento de Timer0.
o
o

1 - Habilite interrupes Timer0.


0 - desativa interrupes Timer0.

INTE - RB0 / INT interrupo externa Habilitar bit (bit de habilitao no RB0 interrupo externa) controla as
interrupes causadas pela mudana do estado lgico da entrada pino RB0 / INT (interrupo externa).
o
o

1 - Habilita interrupes externos INT.


0 - desativa interrupes externos INT.

RBIE - RB Porto Mudana Habilitar Interrupo bit (bit de habilitao de interrupo mudanas no PORTB).Quando
configuradas como entradas, os pinos do PORTB pode causar uma interrupo para mudar o estado lgico (seja para
baixo ou poder do impulso ocorre, o que importa que ocorre uma alterao). Este bit determina se uma interrupo
vai ocorrer.
o
o

1 - Habilita interrupes na mudana PORTB.


0 - desativa interrupes na mudana PORTB.

T0IF - TMR0 Overflow Flag de interrupo bit (bit flag de interrupo pelo mandamento desbor Timer0) detecta
estouro no cronmetro registrar Timer0, ou o contador reposto.
o
o

1 - Para gravar o transbordamento Timer0 ocorreu (este alerta deve voltar-se para 0 por software).
0 - No check ocorreu Timer0 estouro.

INTF - RB0 / INT Bandeira interrupo externa bit (bit flag em INT interrupo externa) detecta a alterao no estado
lgico no pino INT.
o
o

1 - interrupo externa INT ocorreu (deve ativar esse sinalizador para 0 por software)
0 - interrupo externa INT no ocorreu.

RBIF - RB Porto Mudana Bandeira interrupo bit (bit flag de interrupo na mudana porta RB) detecta qualquer
alterao no estado lgico de qualquer um dos pinos de entrada no PORTB.
o
o

1 - Pelo menos um dos pinos de E / S de uso geral em PORTB tem valor cambido. Depois de ler PORTB, mordeu RBIF deve se
voltar para 0 por software).
0 - Nenhum dos / S propsito valor geral PORTB porto pino I mudou.

Vamos faz-lo em mikroC ...

// O pino PORTB.4 configurado como uma entrada sensvel mudana de estado lgico.
vazio initMain () {
ANSEL = ANSELH = 0;
//
PORTB = 0;
//
TRISB = 0b00010000;
//
configurados como sadas

Todos os pinos de E / S so configurados como digitais


Todos os pinos do porto so repostas PORTB
Todos os pinos do PORTB PORTB menos. 4 so
//

RBIE = 1;
// interrupes esto activados pela mudana no PORTB
IOCB4 = 1;
// interrupo activada pela mudana no pino 4 na
porta PORTB //
GIE = 1;
// interrupo activada No geral
...
// A partir deste ponto, uma interrupo ocorre com qualquer alterao
... // O estado lgico no pino PORTB.4
...

Registrar PIE1
O registo PIE1 contm a habilitar interrupes perifricas bocados.

ADIE - conversor A / D Habilitar Interrupo bit (bit de habilitao de interromper o A / D).


o
o

RCIE - EUSART Receber Habilitar Interrupo bit (bit de habilitao de interrupo recepo EUSART).
o
o

1 - Permite a interrupo ADC.


0 - desativa a interrupo ADC.
1 - Permite a receber EUSART interrupo.
0 - desativa a receber EUSART interrupo.

TXIE - EUSART Transmit Habilitar Interrupo bit (bit de habilitao de interrupo de transmisso EUSART).
o
o

1 - Permite a interrupo EUSART de transmisso.


0 - desativa a interrupo EUSART de transmisso.

SSPIE - Master Synchronous Serial Port (MSSP) Interromper Habilitar bit - (bit permite a interrupo do mestre
sncrona serial (MSSP) permitiu gerar um pedido de interrupo aps cada mdulo de transmisso de dados
comunicao serial sncrona (modo SPI ou I2C).
o
o

1 - Permite MSSP interrupo.


0 - desativa MSSP interrupo.

CCP1IE - CCP1 Habilitar Interrupo bit (bit de habilitao de interrupo mdulo 1 Comparar / Capture / PWM CCP1) pode gerar um pedido de interrupo para o mdulo CCP1 utilizado para processamento de sinal PWM.
o
o

1 - Permite a interrupo CCP1.


0 - desativa a interrupo CCP1.

TMR2IE - TMR2 para PR2 Jogo Habilitar Interrupo bit (bit de habilitao de interrupo igualdade TMR2 e
PR2)
1 - Permite a interrupo igualdade TMR2 e PR2.
0 - desativa a interrupo da igualdade TMR2 e PR2.

o
o

TMR1IE - TMR1 Overflow Habilitar Interrupo bit (bit de habilitao de interrupo de estouro Timer1) permitiu
gerar um pedido de interrupo aps cada estouro no Timer1 registo, ou seja, o contador zerado.
1 - Permite a interrupo de estouro Timer1.
0 - desativa estouro interrupo Timer1.

o
o

Vamos hecerlo em mikroC ...

/ * Uma interrupo a cada estouro ocorre no registro de TIMER1


consistindo TMR1H e TMR1L. Interrucpiones em cada rotina, a varivel
cnt ser incrementado por 1 * /
unsigned short cnt;
vazio interrupo ()
cnt ++;
incrementado por 1 //
PIR1.TMR1IF = 0;
TMR1H = 0x80;
TMR1L = 0x00;
}
vazio main () {
ANSEL = ANSELH = 0;
T1CON = 1;
PIR1.TMR1IF = 0;
TMR1H = 0x80;
TMR1L = 0x00;
PIE1.TMR1IE = 1;
estouro // Timer1
cnt = 0;
INTCON = 0xC0;
...

// Definir varivel cnt


// Start rotina de interrupo
// Quando uma interrupo ocorre, o CNT
//
//
//
//

mordeu TMR1IF reiniciado


registros temporizador TMR1H e TMR1L so
retorna seus valores iniciais
Fim da rotina de interrupo

//
//
//
//

Todos os pinos de E / S so configurados como digitais


Ligue o temporizador Temporizador
O bit redefinido TMR1IF
Os valores iniciais estabelecidos para Timer1

// Habilitar interrupo ocorra um


// Reinicie a varivel cnt
// Habilitar interrupo (bits GIE e PEIE)

Registro PIE2
O registro tambm contm vrios PIE2 interromper permitir pedaos.

OSFIE - oscilador falha Habilitar Interrupo bit (bit de habilitao de interrupo falha no oscilador)
o
o

C2IE - Comparador C2 Habilitar Interrupo bit (bit permite a interrupo do comparador C2)
o
o

1 - Habilite o comparador de interrupo C1


0 - desativa a interrupo Comparador C1.

EEIE - EEPROM Write Habilitar Interrupo bit (bit interromper habilitar a gravao no EEPROM)
o
o

1 - Permite a interrupo escrever em EEPROM.


0 - desativa a interrupo da escrita na EEPROM.

BCLIE - Bus Collision Habilitar Interrupo bit (bit permite a interrupo do nibus coliso)
o
o

1 - Permite a interrupo do comparador C2.


0 - desativa a interrupo Comparador C2.

C1IE - Comparador C1 Habilitar Interrupo bit (bit interupcin habilitar o comparador C1)
o
o

1 - Habilite falha de interrupo no oscilador.


0 - desativa interrupo falha no oscilador.

1 - Habilite interrupo coliso de nibus.


0 - desativa a interrupo de nibus coliso.

ULPWUIE - Ultra Low-Power Wake-up Habilitar Interrupo bit (bit permite a interrupo para sair do baixo
consumo de energia de ultra - reativao)
o
o

1 - Permite interromper para sair do baixssimo consumo de energia.


0 - desativa a interrupo para sair do baixssimo consumo de energia.

CCP2IE - CCP2 Habilitar Interrupo bit (bit de habilitao de interrupo mdulo 2 Comparar / Capture / PWM
(CCP2)

1 - Permite a interrupo de CCP2.


0 - desativa a interrupo CCP2.

o
o

Vamos faz-lo em mikroC ...

/ * O comparador C2 est configurado para usar o pino RA0 e RA2 como entradas. Ocorrer
uma alterao na sada do comparador, o pino de sada muda o estado lgico na PORTB.1
rotina de interrupo. * /
vazio interrupo () {
PORTB.F1 = ~ PORTB.F1;
pino // PORTB.1
PIR2.C2IF = 0;
}

// Iniciar a rotina de interrupo


// A interrupo reverter o estado lgico do
// interrupo bit flag C2IF reposto
// Fim da rotina de interrupo

vazio main () {
TRISB = 0;
// Tudo PortB pinos da porta esto configuradas
como sadas //
PORTB.F1 = 1;
// O PORTB.1 pino definido como um
ANSEL = 0b00000101 ;;
// O RA0 / C12IN0- e RA2 pin / C2IN + so as
entradas analgicas //
ANSELH = 0;
// Todos os pinos de E / S so configurados como digitais
CM2CON0.C2CH0 = CM2CON0.C2CH1 = 0; // O RA0 pino selecionado para ser uma
entrada invertida // C2
PIE2.C2IE = 1;
// Ativar o comparador de interrupo C2INT
CON.GIE = 1;
// interrupo global est habilitado
CM2CON0.C2ON = 1;
// Comparador C2 est habilitado
...
...

PIR1 registo
O registo PIR1 contm os bits bandeira de interrupo.

ADIF - conversor A / D da bandeira de interrupo bit (bit flag de interrupo do A / D)


o
o

RCIF - EUSART Receber Bandeira interrupo bit (bandeira bit da EUSART receber interrupo)
o
o

1 - O EUSART receber buffer est cheio. O bit limpa atravs da leitura do registo RCREG.
0 - O EUSART buffer de recepo no est cheio.

TXIF - EUSART Transmit Bandeira interrupo bit (interrupo de transmisso pouco EUSART)
o
o

1 - O buffer de transmisso EUSART est vazio. O bit redefinido para um esribir dados para o registo TXREG.
0 - O buffer de transmisso EUSART est cheio de.

SSPIF - Master Synchronous Serial Port (MSSP) Flag de interrupo bit (bandeira da porta serial interrupo
mestre sncrono bit)
o

1 - converso A / D tenha sido concluda (bit deve se voltar para 0 por software)
0 - Ainda no completou uma converso A / D ou no comeou

1 - que ela se cumpra a condio de um MSSP interrupo ocorrer durante a transmisso / recepo de dados. Eles diferem de
acordo com o modo de operao MSSP (SPI ou I 2 C). O bit deve ser afastada pelo software antes de retornar da rotina de servio de
interrupo)
0 - Ainda no encontrou qualquer condio de um MSSP interromper ocorrer.

CCP1IF - CCP1 Bandeira interrupo bit (mdulo bit flag de interrupo 1 Comparar / Capture / PWM (CCP1).
o
o

1 - que ela se cumpra a condio de interrupo CCP1 (CCP1 uma unidade para a captura, comparando e gerando sinal
PWM).Dependendo do modo de operao (modo de captura ou modo de comparao), uma captura ou igual comparao ocorre. Em
ambos os casos, o bit tem de ser reposto por um software. O bit no utilizado no modo de PWM.
0 - Nenhum atendeu condio de interrupo CCP1.

TMR2IF - Timer2 para PR2 Bandeira interrupo bit (bit de interrupo bandeira dade igual entre Timer2 e PR2
registo)
o
o

1 - No foi igual ao valor de TMR2 (registar temporizador de 8 bits) e o valor de PR2. O bit deve ser afastada pelo software antes
de retornar da rotina de servio de interrupo).
0 - No, no tiver sido igual ao valor de TMR2 e PR2 valor.

TMR1IF - Timer1 Overflow Flag de interrupo bit (bit flag estouro interrupo Timer1)
o

1 - Houve Timer1 estouro. O bit deve ser reajustado pelo software.

0 - Sem estouro ocorreu Timer1.

Registro PIR2
O registo contm PIR2 bandeira bits d a interrupo.

OSFIF - oscilador falha Bandeira interrupo bit (bit flag de interrupo falha no oscilador)
o

C2IF - Comparador C2 Bandeira interrupo bit (bit flag descontinuao do comparador C2)
o
o

1 - A sada do comparador analgico C2 foi alterado (pouco C2OUT). O bit deve ser reajustado pelo software.
0 - A sada do comparador analgico C2 no foi alterada.

C1IF - Comparador C1 Bandeira interrupo bit (bit flag descontinuao do comparador C1)
o
o

1 - A sada do comparador analgico C1 tiver sido alterado (pouco C1OUT). O bit deve ser reajustado pelo software.
0 - A sada do comparador analgico C1 no foi alterada.

EEIF - EE Faa Bandeira Interrupo de Operao (bandeira bit interrompendo a operao de gravao em
EEPROM) bit
o
o

1 - Houve uma falha no sistema de oscilador. A entrada do relgio foi mudado para INTOSC oscilador interno. O bit deve ser
reajustado pelo software.
0 - O sistema de oscilador est funcionando corretamente.

1 - A operao de escrita na EEPROM est completa. O bit deve ser reajustado pelo software.
0 - A operao de escrita na EEPROM no est concludo ou ainda no comeou.

BCLIF - Bus Collision Bandeira interrupo bit (bandeira da coliso de nibus interrupo MSSP bit)
o
o

1 - Houve uma coliso de nibus no MSSP quando configurado para o modo I2C Mestre. O bit deve ser reajustado pelo software.
0 - No h coliso de nibus ocorreu no MSSP.

ULPWUIF - Low-Power Ultra Bandeira interrupo bit de despertar (bandeira da interrupo pouco para sair do
baixo consumo de energia de ultra - reativao)
o
o

1 - a condio for cumprida, deixando o modo ultra baixa potncia. O bit deve ser reajustado pelo software.
0 - Nenhuma condio foi cumprida fora do modo ultra baixa potncia.

CCP2IF - CCP2 Bandeira interrupo bit (mdulo de interrupo bit 2 Comparar / Capture / PWM - CCP2)
o
o

1 - a condio for cumprida a suspenso do CCP2 (CCP2 uma unidade de captura, comparando e gerao de sinal
PWM).Dependendo do modo de operao (modo de captura ou modo de comparao), uma captura ou igual comparao ocorre. Em
ambos os casos, o bit tem de ser reposto por um software. O bit no utilizado no modo de PWM.
0 - Nenhum atendeu condio de a interrupo de CCP2.

Vamos faz-lo em mikroC ...

// Mdulo seqncia de ativao ULPWU


vazio main () {
PORTA.F0 = 1;
// Pin PORTA.0 definido como um
ANSEL = ANSELH = 0;
// Todos os pinos de E / S so configurados como digitais
TRISA = 0;
// Os pinos PORTA so configurados como sadas
delay_ms (1);
// Carregar capacitor
PIR2.ULPWUIF = 0;
// Flag redefinir ULPWUIF
PCON.ULPWUE = 1;
// Ativar mdulo de operao ULPWU
TRISA.F0 = 1;
// PORTA.0 configurada como entrada
PIE2.ULPWUIE = 1;
// Ativar interromper o mdulo ULPWU
INTCON.GIE = INTCON.PEIE = 1; // Ativar tudo interromper
asm SLEEP;
// Alternar para o modo de baixa energia
...
...

Registre PCON
O registo PCON contm apenas dois bits de flag usados para diferenciar entre um Power-on reset (POR) a Brown-out reset (BOR), uma
redefinio pelo watchdog timer (WDT) e um pino de reset MCLR externo.

ULPWUE - Ultra Low-Power Wake-up Habilitar bit (bit de habilitao para sair ultra baixa - reativao)
o
o

1 - sair deste modo permite baixssimo consumo de energia.


0 - Nenhuma sada deste modo permite baixssimo consumo de energia.

SBOREN - Software BOR Habilitar bit (BOR habilitar software bit)


o
o

1 - Brown-out Reset habilitado.


0 - Brown-out de reset desativado.

POR - bit Redefinir Status do Power-on (status bit Power - on reset)


o
o

1 - No houve nenhuma Power - on reset.


0 - H Power - on reset. O bit deve ser definido para um por software aps ele ter ocorrido Power - on reset.

BOR - Brown-out Redefinir bit Status (bit de estado Brown - out reset)
o
o

1 - No houve Brown - redefinio de fora.


0 - Houve Brown - a redefinio. O bit deve ser definido para um por software aps ele ter ocorrido Brown - a redefinio.

PCL E PCLATH REGISTOS


A memria de programa do PIC16F887 8K e tem 8.192 locais para armazenamento de programa. Portanto, o contador de programa deve
ter 13 bits de largura (213 = 8192). Para permitir o acesso a um local de memria programa durante o funcionamento do microcontrolador,
voc precisa de acesso ao seu endereo atravs dos registos SFR. Como todos os registros SFR so de 8 bits, o registro de endereo
criada "artificialmente" dividindo os 13 bits em dois registros independentes, PCLATH e PCL. Se a execuo do programa no afeta o
contador de programa, o valor deste registo automaticamente e constantemente a aumentar: +1, +1, +1, +1 ... Desta forma, o programa
executado como est escrito - instrues a instruo, seguido por um aumento na direco constante.

Se o contador de programa alterado por software, voc deve considerar o seguinte para evitar problemas:

Os oito bits mais baixos (o byte baixo) registo PCL so leitura / gravao, enquanto os superiores cinco bits do registo
PCLATH so somente gravao.
O registo PCLATH limpo com cada reinicializao.
Em linguagem assembly, o valor do contador do programa marcado com PCL e refere-se apenas aos oito bits. Voc
deve ter cuidado ao usar a instruo "ADDWF PCL" . Esta uma instruo de salto que especifica a cidade de destino,
adicionando um nmero para o endereo atual. freqentemente usado para saltar para a tabela de consulta ou
tabela filial programa e ler. Um problema surge se a localizao actual de tal dimenso que a adio de uma
mudana
ocorre
em
um
pouco
pertencente
ao
byte
superior
do
registo
PCLATH.
A execuo de uma instruo sobre o registo PCL porque substituir os bits do contador de programa simultaneamente
o contedo do registo PCLATH. De qualquer forma, o registo PCL s pode acessar 8 bits inferiores do resultado da
instruo, ento o prximo salto ser completamente incorreto. A soluo para este problema colocar essas
instrues em endereos que terminam em xx00h. Desta forma, o programa salta para 255 locais esto habilitados.Se
j no salta atravs desta instruo executada, o registo PCLATH deve ser incrementado por 1 cada estouro de
tempo ocorre no registo PCL.
Ao chamar um sub-rotina ou para executar um salto (instruo de CHAMADA e GOTO ), o microcontrolador capaz de
fornecer apenas 11 bits de endereamento. Semelhante RAM dividida em "bancos", a ROM dividido em quatro
"pginas" 2K cada. As instrues nestas pginas funcionam regularmente. Basta colocar, como o processador
fornecido com um endereo de 11 bits do programa capaz de enfrentar qualquer local dentro de 2 KB. A figura a
seguir mostra o salto para o endereo sub-rotina PP1.

No entanto, se uma sub-rotina ou o endereo de salto no na mesma pgina como o local de salto, voc deve fornecer dois bits superiores
ausentes escrito ao registo PCLATH. A figura a seguir mostra o salto para o endereo sub-rotina PP2.
Em ambos os casos, quando a sub-rotina atinge instrues RETURN , RETLW ou RETFIE (de volta ao programa principal), o microcontrolador
vai continuar a execuo do programa a partir do ponto em que parou, porque o endereo do remetente empurrado e salvos na pilha
registros que consiste em 13 bits, tal como mencionado.

Indireo RECORDS
Alm do endereamento direto, o que lgico e claro (apenas especificar o endereo de um registo para ler seu contedo), este
microcontrolador capaz de realizar endereamento indireto por INDF e FSR registos. s vezes, isso faz com que o processo de escrever
um programa. Todo o procedimento habilitado porque o registo INDF no real (no fisicamente), mas apenas especifica o registo cujo
endereo est localizado no registo FSR. Por esta razo, escrever ou ler dados de registo INDF realmente significa escrever ou ler a partir do
registo cujo endereo est localizado no registo FSR. Em outras palavras, cadastre endereos especificados no registo FSR, e seu contedo
armazenado no registo INDF. A diferena entre diretos e indiretos endereamento mostrado na figura a seguir:
Como vimos, o problema com "faltando pedaos de endereamento ' resolvido com um" emprstimo "de outro registro. Desta vez o
stimo bit, chamado de bit IRP do registro STATUS.

Uma das caractersticas mais importantes do microcontrolador o nmero de pinos de entrada / sada, o que permite que voc se conectar
com perifricos. O PIC16F887 tem 35 pinos em E / S de propsito geral total, o que suficiente para a maioria das aplicaes.

3.3 portos de entrada / EXIT


A fim de sincronizar o funcionamento da porta de E / S com a organizao interna do microcontrolador de 8 bits, que so agrupadas de um
modo semelhante aos registos em cinco portas designadas por A, B, C, D e E. Todos eles tm as seguintes caractersticas em comum:

Por razes de ordem prtica, muitos pino de I / S so multifuncionais. Se um pino re aliza uma destas funes pode ser
utilizado como pino de I / S uso geral.
Cada porta tem o seu prprio registo de controlo de fluxo, ou seja, o correspondente registo TRIS: TRISA, TRISB,
TRISC etc. o que determina o comportamento dos bits da porta, mas no determina o seu contedo.

Para repor um pouco do registo TRIS (pino = 0), o pino da porta correspondente configurado como uma sada. De igual modo, ao colocar
um pouco de um registo de TRIS (bit = 1), o pino de porta correspondente configurado como uma entrada. Esta regra fcil de lembrar: 0 =
Entrada 1 = Sada.

PORTA e TRISA registo


A porta PORTA uma porta bidirecional de 8 bits de largura. Bits dos registos TRISA e ANSEL controlar os pinos de PORTA. Todos os pinos
PORTA atuar como entradas / sadas digitais. Cinco deles podem ser entradas analgicas (designadas por AN):

RA0 = AN0 (determinado pelo ANS0 bit do registo ANSEL) RA1 = AN1 (determinado pelo ANS1 bit do registo ANSEL) RA2 = AN2
(determinado pelo ANS2 bit do registo ANSEL) RA3 = AN3 (determinado pelo registo ANS3 bit ANSEL) RA5 = AN4 (determinado pelo bit
ANS4

registo

ANSEL)

Semelhante a TRISA cadastre-se pedaos determinar quais os pinos sero configuradas como entradas e que ser configurado como
sadas, os bits apropriados do ANSEL cadastre-se determinar se os pinos sero configuradas como entradas analgicas ou entradas / sadas
digitais.
Cada bit desta porta tem uma funo adicional relacionada com alguns perifricos integrados, a ser descrito nos captulos seguintes. Este
captulo abrange apenas funo adicional do pino RA0 uma vez que est relacionada com a unidade de PORTA e ULPWU.
Vamos faz-lo em mikroC ...

// O pino PORTA.2 est configurado como uma entrada digital. Todos os outros pinos de porta
// PORTA so sadas digitais
...
ANSEL = ANSELH = 0; // Todos os pinos de E / S so configurados como digitais
PORTA = 0;
// pinos Todos PORTA so repostas
TRISA = 0b00000100; // Todos os pinos exceto PORTA
/ / PORTA.2 so configurados como sadas
...

ULPWU UNIT
O microcontrolador geralmente utilizada em dispositivos que operam de forma completamente independente periodicamente e usando uma
fonte de energia da bateria. Neste caso, o baixo consumo de energia uma prioridade. Exemplos tpicos de tais aplicaes so:
termmetros, sensores de deteco de incndio e assim por diante. Sabe-se que a reduo da frequncia de relgio reduz o consumo de
energia, como uma das solues mais convenientes para este problema o de diminuir a frequncia de relgio, ou usar 32KHz cristal de
quartzo em vez de a 20MHz.

Ao colocar o microcontrolador em modo de suspenso mais um passo na mesma direo. Tem sido ainda o problema de esta
modalidade e colocar o microcontrolador em operao normal. , obviamente, necessrio dispor de um sinal externo de um
dos pinos. Este sinal deve ser gerado pelos componentes electrnicos adicionais, resultando num maior consumo de energia
de todo o dispositivo ...
A soluo perfeita seria o microcontrolador do modo de hibernao, periodicamente, por si s, que no impossvel. O circuito
que permite mostrado na figura, para a esquerda.
O princpio simples:
Um pino configurado como sada e que leva uma lgica um (1). Isto faz com que um condensador de carga. Imediatamente a seguir, o
mesmo pino configurado como entrada. A mudana de estado lgico permite uma interrupo e o microcontrolador entra no modo sleep.Ele
s tem estado espera para a fuga de corrente que flui atravs do capacitor pino de entrada descarregada. Aps a alta, ocorre uma
interrupo eo microcontrolador continua com a execuo do programa no modo normal. Todo o procedimento repetido.

Em teoria, esta uma soluo perfeita. O problema que todos os pinos capazes de causar perturbaes so digitais e ter
uma corrente de vazamento relativamente elevado quando a tenso sobre eles no est perto do limite de valores Vdd (1) ou
VSS (0). Neste caso, o condensador descarregado num curto perodo de tempo, porque a corrente vrias centenas de
micro-amperes. Por esta razo ULPWU capaz de indicar uma queda na tenso com circuito de baixo consumo de energia
concebida.
A sada gera uma interrupo, enquanto que a entrada conectada a um dos pinos do microcontrolador. o pino
RA0. Fazendo referncia Figura (R = 200 ohms, C = 1nF), o tempo de descarga de cerca de 30mS, enquanto um consumo
de energia total do microcontrolador 1000 vezes mais baixa (de vrias centenas nanoamp).

Puerto PORTB e registo TRISB


O PORTB uma porta bidirecional de 8 bits de largura. Bits do registro TRISB determinar a funo dos seus pinos.

Semelhante a PORTA, uma lgica 1 (um) no registo TRISB configura o pino apropriado no PORTB e vice-versa. Os seis pinos deste porto
pode se comportar como entradas analgicas (AN). ANSELH bits do registador de determinar se esses pinos sero configuradas como
entradas analgicas ou entradas / sadas digitais:
RB0 = AN12 (determinado pelo registo pouco ANS12 ANSELH) RB1 = AN10 (determinado pelo registo pouco ANS10 ANSELH) RB2 = AN8
(determinado pelo registo pouco ANS8 ANSELH) RB3 = AN9 (determinado pelo registo pouco ANS9 ANSELH) RB4 = AN11 (determinado
pelo

bit

registrar

ANS11del

ANSELH) RB4

AN11

(determinado

pelo

bit

registrar

ANS11del

ANSELH)

Cada bit desta porta tem uma funo adicional relacionada com alguns perifricos integrados, a ser descrito nos captulos seguintes.
Este porto tem vrias caractersticas que o distinguem de outros portos e pelos pinos so usados com freqncia:

Todos os pinos da porta PORTB tm resistncia pull-up integrado, que tornam perfeito para estar conectado com os
botes (teclado), interruptores e optoacopladores. A fim de conectar as portas resisitencias microcontrolador, o bit
apropriado em registo WPUB deve ser um. *

Por ter um alto nvel de resistncia (vrias dezenas de kilohms), essas resistncias "virtuais" no afetam os pinos configurados como sadas,
mas servem como um complemento til aos insumos. Estes resistores so conectados s entradas de circuitos lgicos CMOS.Caso
contrrio, eles se comportam como se estivessem flutuando com sua alta resistncia entrada.

Alm WPUB registo pouco, outro pouco afetando a instalao dos resistores pull-up. Registro pouco RBPU OPTION_REG.

Sendo habilitado, cada bit de porta PORTB configurado como uma entrada pode causar uma interrupo, alterando
seu estado lgica. A fim de permitir que o termi Nal provocar uma interrupo, o bit do registador apropriado deve ser
um IOCB.

Graas a estas caractersticas, os pinos da porta PORTB so muitas vezes utilizados para verificar os botes no teclado como infalivelmente
detectar cada aperto de boto. Portanto, no necessrio examinar todas as entradas e outra vez.

Quando o pino X, Y e Z so configurados como entradas definidas para um (1), s que precisa de esperar por um pedido de interrupo
listada com o premir de um boto. Verificaes posteriores qual boto foi ativado pela combinao de zeros e uns nas entradas.
Vamos faz-lo em mikroC ...

/ * O pino PORTB.1 configurada como entrada digital. uma interrupo ocorre com qualquer
mudar o seu estado lgico. Ele tambm tem um resistor de pull-up. Todos os outros pinos
Porto PORTB so entradas digitais. * /
...
ANSEL = ANSELH = 0; // Todos os pinos de E / S so configurados como digitais
PORTB = 0;
// Todos os pinos do porto so repostas PORTB
TRISB = 0b00000010; // Todos os pinos, exceto porta PORTB PORTB. 1
// sadas so configuradas como
RBPU = 0;
// resistores pull-up so habilitados
WPUB1 = 1;
// O resistor de pull-up est conectada ao pino PORTB.1
IOCB1 = 1;
// O pino pode PORTB.1 eles causam perturbao por
mudar o estado lgico //
RBIE = GIE = 1;
// Uma interrupo ativada
...

PIN RB0 / INT


O pino RB0 / INT a nica "verdadeira" fonte de interrupo externa. Ele pode ser configurado de modo a que ela reage com o flanco
ascendente do sinal (transio de zero a um) ou a aresta de queda do sinal (transio de um para zero). O registro INTEDG OPTION_REG
pouco seleciona o sinal apropriado.

PINES RB6 e RB7


Ser que o PIC16F887 no tem um pino especial para a programao (o processo de escrever um programa em ROM). Os pinos que esto
geralmente disponveis como pinos de E / S de propsito geral, utilizados para este fim. Para falar com mais preciso, eles so os pinos da
porta PortB utilizados para transmitir relgio (RB6) e de dados (RB7) para carregar o programa. Alm disso, necessrio para fornecer a
tenso de alimentao Vdd (5V) e a tenso apropriada Vpp (12-14V) para programao de memria FLASH. Durante a programao, a
tenso VPP aplicada ao pino MCLR. No se preocupe com os detalhes relacionados com este processo, nem se preocupar com o que
voltagem aplicada pela primeira vez desde que os componentes do programador responsvel por isso. O que muito importante que o
programa pode ser carregado para o microcontrolador mesmo depois de ser soldada no dispositivo de destino.Naturalmente, o programa
carregado pode ser alterada da mesma forma. Essa funo chamada ICSP (In-Circuit Serial Programming - Circuit Serial Programming)
Para us-lo corretamente, voc precisa planejar com antecedncia. muito fcil! Voc s precisa instalar um conector mini 5 pinos no
dispositivo de destino para suprir a programao de microcontroladores tenso necessria. Para evitar a interferncia entre as tenses e os

componentes do dispositivo conectado aos pinos do microcontrolador, todos os dispositivos adicionais devem ser desligados durante a
programao (usando resistncias ou jumpers).

Como vimos, as tenses aplicadas ao programador soquete pino so os mesmos que os utilizados durante a programao ICSP.

Puerto PORTC e registo TRISC


A porta PORTC uma porta bidirecional de 8 bits de largura. Bits do registro TRISC determinar a funo dos seus pinos. Semelhante a
outros portos, uma lgica 1 (um) no registo TRISC configura o pino da porta apropriado como PORTC entrada.

Todas as funes adicionais de porta PORTC so descritos nos seguintes captulos.

PORTD porta e registo TRISD


PORTD porta uma largura de porta bidireccional de 8 bits. Bits do registro TRISD determinar a funo dos seus pinos. Semelhante a outros
portos, uma lgica 1 (um) no registo TRISD configura o PORTD pin porta apropriada como entrada.

Puerto PORTE e registo TRISE


PORTE porta uma largura de porta bidireccional, de 4 bits. Bits do registro TRISE determinar a funo dos seus pinos. Semelhante a outros
portos, uma lgica 1 (um) no registo TRISE configura o pino porta apropriada como entrada PORTE.

A exceo o pino RE3, que sempre configurado como uma entrada.


Semelhante a PORTA e PORTB porta, neste caso, os trs pinos podem ser configurados como entradas analgicas. Os bits do registo
ANSEL determinar se esses pinos sero configuradas como entradas analgicas (AN) ou entradas / sadas digitais:
RE0 = AN5 (determinado pelo bit ANS5 registo ANSEL); RE1 = AN6 (determinado pelo registo ANS6 pouco ANSEL); e RE2 = AN7
(determinado

pelo

ANSEL

registo

ANS7

Vamos faz-lo em mikroC ...

/ * O pino PORTE.0 configurado como uma entrada analgica, enquanto os outros trs
mesmos pinos de porta so configurados como digitais * /
...
ANSEL = 0b00100000; // O pino configurado como PORTE.0 analgico
ANSELH = 0;
// Todos os pinos de E / S so configurados como digitais
TRISE = 0b00000001; // Todos os pinos da porta, exceto PORTE
PORTE //. 0 so configurados como sadas
PORTE = 0;
// Todos os bits da porta PORTE esto definidas para zero
...

Registros ANSEL e ANSELH


Os registros ANSEL e ANSELH so usados para configurar o modo de entrada de um pino de E / S como analgico ou digital.

A regra :

bit).

Para configurar um pino como uma entrada analgica, o bit apropriado dos registos ANSEL ou ANSELH deve ser feita uma (1). Para
configurar um pino como entrada / sada digital, o bit apropriado deve ser definido como zero (0).
O estado lgico dos bits de registo ANSEL no tm efeito sobre as funes de sada digitais. Ao tentar ler um pino de porta configurado como
uma entrada analgica, o resultado sempre 0.

As chances so que voc nunca vai escrever um programa que no usam portas, de modo que o esforo para aprender tudo sobre eles
definitivamente vale a pena. No entanto, as portas so provavelmente os mdulos mais simples dentro do microcontrolador. Eles so
utilizados como se segue:

Ao projetar um dispositivo, selecione uma porta atravs da qual o microcontrolador ir se comunicar com o ambiente
perifrico. Se voc usar apenas entradas / sadas digitais, selecione qualquer porta. Se voc usar qualquer uma das
entradas analgicas, selecione as portas apropriadas de apoio, tais configurao pinos (AN0-AN13).
Cada pino de porta pode ser configurado como uma entrada ou sada. Bits do TRISA, TRISB, TRISC, TRISD e
registros trise determinar como vai levar com os pinos apropriados de portas PORTA, PortB, PORTC, PORTD e
Porte. Simplesmente ...
Se voc usar qualquer uma das entradas analgicas, primeiro voc precisa colocar um os bits apropriados dos
registros ANSEL e ANSELH no incio do programa.
Se voc usar resistores ou botes como uma fonte de sinal de entrada, conecte os pinos da porta PORTB, porque eles
tm resistores pull-up. O uso desses registros ativado por registro bit RBPU OPTION_REG, enquanto a instalao de
resistncias individuais ativado por pedaos de registro WPUB.
Muitas vezes precisa responder o mais rapidamente pinos de entrada mudar seu estado lgico. No entanto, no
necessrio escrever um programa para testar o estado lgico do pino. muito mais simples para ligar estes pinos de
porta e entradas PortB permitir uma interrupo ocorre com cada mudana de voltagem. Os bits dos IOCB e INTCON
registradores so responsveis por isso.

O microcontrolador PIC16F887 tem trs temporizadores / contadores independentes, chamados Timer0, Timer1 e Timer2. Este captulo
fornece uma descrio pormenorizada das mesmas apresentado.

TIMER 3.4 TIMER0


O temporizador Timer0 tem uma ampla gama de aplicaes na prtica. Apenas alguns programas no us-lo de qualquer forma. muito
conveniente e fcil de usar em programas ou sub-rotinas para gerar impulsos de durao arbitrria, medio do tempo ou contagem de
pulsos externos (acontecimentos) quase sem limitaes.
O mdulo temporizador Timer0 um temporizador / contador de 8 bits com as seguintes caractersticas:

Timer / Contador 8 bits;


Prescaler de 8 bits (que compartilha com o watchdog timer);
Fonte programvel de relgio interno ou externo;
Estouro de gerao de interrupo; e
Seleo programvel clock externo.

A figura a seguir mostra o esboo do temporizador Timer0 com todos os bits que determinam o seu funcionamento. Estes bits so
armazenados em cadastro OPTION_REG.

OPTION_REG

RBPU - PORTB Pull-up permitir bit (porta PORTB resistncia Pull Up)
o
o

INTEDG - Interrupo de Borda Select bit (selector pouco bordo activo da interrupo externa)
o
o

0 - Os aumentos de cair borda no pino TMR0.


1 - Os aumentos de subida do sinal no pino TMR0.

PSA - Prescaler pouco Assignment (atribuio prescaler bit)


o
o

0 - prescaler atribudo a WDT.


1 - prescaler atribudo ao temporizador / contador Timer0.

PS2, PS1, PS0 - Taxa Prescaler Select bit (bit selector valor Crossover)
o

0 - Os pulsos esto sendo temporizador de entrada / balco Timer0 pelo RA4 pinos.
1 - O temporizador utiliza os pulsos de clock internos (FOSC / 4).

T0SE - TMR0 Fonte Borda Select (seletor de borda taxa de bits) bit

PS2

0 - Interrupo por borda de subida no pino INT (0-1).


1 - Interrupo por cair borda no pino INT (1-0).

T0CS - TMR0 Clock Select (seletor de velocidade do clock de bits para Timer0) bit
o
o
o
o

0 - resistores pull-up PORTB porta so desativados.


1 - PORTB pinos da porta pode ser conectado aos resistores pull-up.

O valor de crossover ajustado atravs da combinao desses bits. Conforme mostrado no grfico direita, a mesma
combinao de bits d diferentes valores de divisor de frequncia para temporizador / contador eo temporizador de vigilncia,
respectivamente.
PS1
0

PS0
0

TMR0
1: 2

WDT
1: 1

1: 4

1: 2

1: 8

1: 4

01:16

1: 8

01:32

01:16

1:64

01:32

1: 128

1:64

1: 256

1: 128

Quando o bit de PSA definido como 0, o divisor atribudo ao temporizador / contador Timer0, como mostrado na figura a seguir.

Vamos faz-lo em mikroC ...

// Neste exemplo, Timer0 est configurado como um temporizador e atribudo um divisor.


no assinado cnt;

// Declare varivel cnt

vazio interrupo () {
// rotina de interrupo
cnt ++;
// interrupo provoca cnt aumentou 1
TMR0 = 155;
// temporizador (ou balco) Timer0 retorna seu valor inicial
INTCON = 0x20;
// Bit T0IE 1, T0IF bit for 0
}
vazio main () {
OPTION_REG = 0x04;
// prescaler (1:32) atribudo ao temporizador Timer0
TMR0 = 155;
// Temporizador T0 conta 155-255
INTCON = 0xA0;
// gerao de interrupo habilitado para
// Timer0 temporizador
...
...
// No exemplo a seguir, Timer0 est configurado como um temporizador
// e atribudo um divisor.
OPTION_REG = 0x20;
// divisor (1: 2) atribudo ao contador Timer0
TMR0 = 155;
// contador T0 conta 155-255
INTCON = 0xA0;
// gerao de interrupo ativado pelo
temporizador // Timer0
...
...
Quando o bit de PSA 1, o divisor atribudo ao temporizador de vigilncia, como mostrado na figura a seguir.

Vamos faz-lo em mikroC ...

// Neste exemplo, o prescaler (1:64) atribudo a watchdog timer.


vazio main () {
OPTION_REG = 0x0E; // prescaler atribudo a WDT (1:64)
asm CLRWDT;
// montagem de comando para redefinir o WDT
...
...
asm CLRWDT;
montagem // Comando para redefinir o WDT
...
Para alm do referido, incluem o seguinte:

Para atribuir o divisor para o temporizador / contador, o prescaler est definido para 0 com qualquer escrito para o
registo TMR0.
Quando voc atribui o divisor para o watchdog timer, o WDT tanto como prescaler est definido para 0 com a instruo
CLRWDT.
Ao escrever para o registo TMR0, usado como um timer, contar os impulsos no comea imediatamente, mas atrasou
dois ciclos de instruo. , portanto, necessrio para ajustar o valor escrito no registo TMR0.
Ao colocar o microcontrolador em modo de relgio oscilador est desligado. O estouro no pode ocorrer, pois no h
contagem de pulso. a razo que a interrupo pelo transbordamento de TMR0 no pode "acordar" o processador do
modo de suspenso.
Se for usado como um contador de relgio externo sem divisor, o comprimento mnimo de pulso ou o tempo morto
entre dois impulsos ser de dois Tosc + 20 ns (Tosc o perodo do sinal de relgio do oscilador).
Se usado como um contador de relgio externo com prescaler, o comprimento mnimo de pulso ou tempo morto entre
dois pulsos de apenas 10 ns.
Registro divisor de 8 bits no est disponvel para o usurio, o que significa que voc no pode ler ou escrever
diretamente para ele.
Quando a alterao da atribuio divisor de Timer0 ao watchdog timer, voc deve executar a seguinte sequncia de
instrues escritas em assembler para evitar redefinir o microcontrolador:
BANKSEL TMR0
CLRWDT
CLRF TMR0
BANKSEL OPTION_REG
BSF OPTION_REG, PSA
CLRWDT
MOVLW b'11111000 '
ANDWF OPTION_REG, W
IORLW b "00000101"

MOVWF OPTION_REG

; WDT ZERO
; ZERO TMR0 e prescaler
, para atribuir o prescaler A WDT
; WDT ZERO
, selecione o BITS PS2, PS1, PS0 e colocar
, A ZERO PARA INSTRUO 'e lgico'
; BITS PS2, PS1, e PS0 PUT VALUE

; Crossover 01:32

Da mesma forma, a alterao da atribuio prescaler da WDT para Timer0, voc deve executar a seguinte sequncia
de instrues, tambm escritos em assembler:
BANKSEL TMR0
CLRWDT
; ZERO WDT e prescaler
BANKSEL OPTION_REG
MOVLW b'11110000 '
; selecionar apenas BITS PSA, PS2, PS1, PS0
ANDWF OPTION_REG, W ; Zeroing e pela instruo 'e lgico'
IORLW b'00000011 '
; VALOR DO CROSSOVER 01:16

MOVWF OPTION_REG

Para usar o Timer0 corretamente, necessrio:


Passo 1: Selecione o modo:

O modo de temporizador selecionado pelo registo pouco TOSCANA OPTION_REG (TOSCANA: 0 = timer, 1 =
contador).
Quando o prescaler atribudo ao temporizador / contador deve redefinir o OPTION_REG pouco PSA. O valor de
crossover definida usando os bits PS2-PS0 do mesmo registro.
Ao usar uma interrupo e o bit GIE TMR0IE INTCON deve ser um.

Passo 2: Medida e contando


Para medir o tempo:

Repor o registo TMR0 ou escrever um valor conhecido nele.


Tempo decorrido (em microssegundos quando se utiliza 4 MHz oscilador) medida atravs da leitura do registo TMR0.
TMR0IF o bit de flag do registo INTCON definido como um automaticamente sempre que ocorrer o registro estouro
TMR0. Uma interrupo se habilitado, ocorre.

Para contar pulsos:

A polaridade dos impulsos contados no pino RA4 seleccionado pelo bit de TOSE OPTION_REG (T0SE: impulsos
positivos = 0, 1 = impulsos negativos).
Vrios pulsos pode ser lido a partir do registo TMR0. O divisor e a interrupo usado da mesma maneira como no
modo de temporizador.

3.5 Timer1
O mdulo Timer1 um temporizador / contador de 16 bits, o que significa que consiste em dois registos (TMR1L e TMR1H). Voc pode
contar at 65.535 pulsos em um nico ciclo, ou seja, antes da contagem comea do zero.

Similar Timer0 timer, esses registros podem ser lidos ou voc pode escrever para eles a qualquer momento. Se ocorrer um estouro, gerada
uma interrupo, se habilitado.
Timer1 mdulo pode funcionar em um ou dois modos bsicos, que como um temporizador ou como um contador. Ao contrrio temporizador
Timer0, cada um destes dois modos tem funes adicionais.
Timer1 tem as seguintes caractersticas:

Timer / balco consiste de um par de registradores de 16 bits;


Fonte programvel de relgio interno ou externo;
3 bits prescalers;
Oscilador LP opcional;
Operao sncrona ou assncrona;
Para controlar o porto Timer1 (contagem permitir) via comparador ou pino T1G;
Interrupo de estouro;
"Wake up" o transbordamento microcontrolador (modo de suspenso sada) (relgio externo); e
Fonte de relgio para a funo de Capture / Compare.

SELECO DA FONTE Timer1 RELGIO


TMR1CS pouco de registo T1CON usado para selecionar a fonte de clock para o temporizador:
FONTE DE RELGIO

TMR1CS

Fosc / 4

Pin T1CKI

Quando voc selecionar a fonte de relgio interno, a par de registros TMR1H-TMR1L ser aumentada com vrios pulsos Fosc conforme
determinado pelo divisor.
Ao selecionar fonte de relgio externo, este timer pode funcionar como um temporizador ou um contador. Os pulsos no modo de timer pode
ser sincronizado com o relgio interno do microcontrolador ou executar de forma assncrona. Se o relgio oscilador e microcontrolador
PIC16F887 externo necessrio INTOSC oscilador interno usado com pin RA6 / OSC2 / CLIKOUT, Timer1 pode usar o oscilador LP como uma
fonte de relgio.

Prescaler Timer1
Timer1 tem um alpinista completamente separado para dividir a freqncia de clock de entrada por 1,2,4 ou 8. No possvel ler o divisor ou
escrever diretamente para ele. No entanto, o contador divisor reposto a 0 automaticamente depois de escrever aos registos TMR1H ou
TMR1L.

Timer1 OSC
A RC0 / RC1 T1OSO e / T1OSI pinos so utilizados para registrar impulsos vindos de dispositivos perifricos, mas tambm tm uma funo
adicional. Como voc pode ver na figura abaixo, eles so configurados simultaneamente como entrada (pino RC1) e sada (pino RC0)
oscilador de quartzo LP (Low Power - Low Power) adicional. Este circuito destina-se principalmente para funcionar a baixas frequncias (at
200 KHz), exactamente para a utilizao do cristal de quartzo 32,768 KHz. Este vidro usado em relgios de vidro, uma vez que fcil de
obter uma durao de impulso de um segundo, dividindo esta frequncia.
Uma vez que o oscilador no depende do relgio interno, pode funcionar mesmo em modo de espera. Ele ativado definindo um pouco do
controle T1CON registar T1OSCEN. O usurio deve fornecer o tempo de inatividade por meio de software (alguns milissegundos) para
permitir que o oscilador para iniciar corretamente.

A tabela a seguir mostra os capacitores adequados recomendadas com os valores de oscilador de quartzo. No necessrio
que estes valores so precisos. No entanto, a regra geral : quanto maior for a capacidade, maior ser a estabilidade, o que
prolonga o tempo necessrio para estabilizar o oscilador.
OSCILADOR

LP

FREQNCIA

C1

C2

32 kHz

33 pF

33 pF

100 kHz

15 pF

15 pF

200 kHz

15 pF

15 pF

O consumo atual do microcontrolador reduzida para o nvel mais baixo em modo ocioso como o mainstream do consumidor - o oscilador no est funcionando. fcil de colocar o microcontrolador desta forma - para executar a instruo SLEEP. O problema como acordar o
microcontrolador, porque s uma interrupo pode produzir. Como o microcontrolador "sleep", use uma interrupo causada por dispositivos
perifricos para "acord-la". Fica realmente complicado se necessrio, para acordar os intervalos regulares de microcontroladores ...
Para resolver o problema, um oscilador de quartzo de LP (baixo consumo de energia) completamente independente, capaz de operar em
modo de espera, integrado no microcontrolador PIC16F887. Simplificando, um circuito previamente separado agora integrado no
microcontrolador e atribudo a Timer1. O oscilador ativado definindo bit 1 T1OSCEN registo T1CON. TMR1CS pouco do mesmo registo
usado para ativar o Timer1 usando seqncias de pulsos que oscilador.

Um sinal gerado pelo oscilador de quartzo sincronizado com o relgio do microcontrolador com o bit 0
T1SYNC.Neste caso, o timer pode no funcionar em modo de suspenso porque o circuito para a sincronizao usa o
relgio do microcontrolador.
A interrupo no registo estouro Timer1 pode ser ativado. Se o bit ajustado para 1 T1SYNC tais interrupes ocorrer
em modo de espera bem.

TIMER TIMER1 PORTA


O pino TG1 ou sada do comparador C2 pode ser uma fonte de impulsos que passam atravs do porto Timer1. Eles so configurados pelo
software. Esta porta permite que o temporizador medir diretamente o comprimento de eventos externos usando o estado lgico do pino T1G
ou eventos analgicas usando a sada do comparador C2. Consulte a figura na pgina anterior. Para medir a durao do sinal, basta ativar
esta porta e contar os impulsos que passam por ela.

MODO TIMER1 NO TIMER


Para selecionar este modo, necessrio o conjunto de bits a 0 TMR1CS. Depois disso, o registo de 16 bits ser aumentada com cada
impulso gerado pelo oscilador interno. Se o 4MHz cristal de quartzo usado, o registro ser incrementado a cada microssegundo.
Neste modo, o bit T1SYNC no afectar o temporizador que conta os impulsos do relgio interno. Como todos os dispositivos usam esses
pulsos, no sincroniza atacar.

O oscilador de relgio microcontrolador no funciona durante o modo de sono de modo que o estouro no registo temporizador no pode
causar o rompimento.
Vamos faz-lo em mikroC ...

// Neste exemplo, TMR1 definido como um valor de temporizador


// O prescaler 1: 8. Cada vez que ocorre um estouro e TMR1H
// TMR1L, uma interrupo solicitado.
vazio main () {
PIR1.TMR1IF = 0;
// Definir a 0 o bit de flag de TMR1IF
TMR1H = 0x22;
// definir o valor inicial para Timer1
TMR1L = 0x00;
TMR1CS = 0;
// TIMER1 conta os impulsos do oscilador interno
T1CKPS1 = T1CKPS0 = 1; // O prescaler valor atribudo de 1: 8
PIE1.TMR1IE = 1;
// interrupo ativada por estouro
INTCON = 0xC0;
// Interrupo habilitado (bits GIE e PEIE)
TMR1ON = 1;
// Ligue Timer1
...

TIMER1 IN COUNTER MODO


Timer1 ajustado para funcionar como um contador de 1 bit definido como TMR1CS. Este bit conta pulsos trazidos ao pino PC0 / T1CKI e
aumentos na borda de subida do T1CKI entrada de clock externo. Se o bit de controle T1SYNC registo T1CON definido como 0, entradas
de clock externo sero sincronizados no seu caminho para Timer1. Em outras palavras, o timer1 sincronizado com o relgio interno do
microcontrolador e chamado de contador sncrono.
Ao colocar em modo sleep o microcontrolador que funciona dessa maneira, registros e TMR1L temporizador Timer1H no ser aumentado
embora pulsos de clock aparecer nos pinos de entrada. Quando o relgio interno do microcontrolador no trabalhar neste modo, no h
entradas de relgio para ser usada para a sincronizao. No entanto, o prescaler ainda est l sempre correndo pulsos de clock sobre os
pinos, porque um crossover simples.

Este contador detecta uma lgica um (1) com os pinos de entrada. Ele observa que, pelo menos, uma borda de subida deve ser detectado
antes de comear a contar os pulsos. Consulte a figura esquerda. As setas na figura indicam o contador incrementado.

Registo T1CON

T1GINV - Timer1 Porto Inverter bit (Bit inversor porto de TIMER1) comporta-se como um inversor no estado lgica do porto formado pela
T1G ou pino de sada (C2OUT) do comparador C2. Esse bit permite que o temporizador para pulsos de alcatro quando o porto est em
alta ou baixa.

1 - um temporizador conta os impulsos quando o pino T1G ou pouco C2OUT so a alta (1).
0 - 1 temporizador conta os impulsos quando o pino T1G ou pouco C2OUT so baixo (0).

TMR1GE - Timer1 Porto Ativar (Bit de permitir que o porto de TIMER1) determina se o porto formado pelo pino de sada T1G ou C2
comparador (C2OUT) est ativo ou no. Este bit funcional somente se Timer1 no (pouco TMR1ON = 1). Caso contrrio, este bit
ignorado.

1 - Temporizador TMR1 ativado apenas se a porta no est ativa.


0 - O porto no afeta Timer1.

T1CKPS1, T1CKPS0 - timer1 entrada de relgio pr-escala Seleccione pedaos (bits selecionando o divisor relgio sinal TIMER1) determina
o valor divisor de posturas fre atribudos a Timer1.
T1CKPS1

T1CKPS0

V AL O R D O P R E S C A L E R

1: 1

1: 2

1: 4

1: 8

T1OSCEN - LP oscilador Habilitar bit Controle (bit de habilitao Timer1 oscilador LP)

1 - LP oscilador est habilitado para Timer1 relgio (frequncia do oscilador de baixa potncia de 32,768 kHz)
0 - LP oscilador est desligado.

T1SYNC - Controle de sincronizao de entrada Timer1 relgio externo (Bit de entrada de sinal de controle de sincronizao) permite a
sincronizao da entrada do LP oscilador ou pino de entrada T1CKI com o relgio interno do microcontrolador. Este bit ignorado quando a
contagem dos pulsos do oscilador mestre (mordeu TMR1CS = 0).

1 - Entrada de relgio externo no est sincronizado.


0 - Entrada relgio externo sincronizado.

TMR1CS - Temporizador TMR1 Clock Source Select bit (seleco da fonte de clock do Timer1 bit)

1 - Conte os pulsos por pino T1CKI (para a borda de subida 0-1)


0 - conta os impulsos do relgio interno do microcontrolador

TMR1ON - Timer1 On bit (TMR ativa, no entra nem operar o Timer1).

1 - Permite que o Timer1.


0 - desativa a Timer1.

Para usar o Timer1 corretamente, voc deve fazer o seguinte:

Porque voc no pode desligar o divisor, o seu valor deve ser definido para o bit T1CKPS1 log T1CKPS0 T1CON
(Consulte a tabela).
Selecione o modo pelo TMR1CS T1CON registo pouco. (TMR1CS: 0 = a fonte de clock oscilador de quartzo interno,
1 = a fonte de clock oscilador de quartzo externo).
Ao definir o bit T1OSCEN o mesmo registro, o oscilador est habilitado e os registros TMR1H e TMR1L so
incrementados com cada pulso de clock. Definir este bit a 0, a contagem pra.
Reiniciando do contador ou escrever para eles, o prescaler reposto.
Atravs do preenchimento de ambos os registos de timer, a bandeira TMR1IF est definido e contando comea do
zero.

3.6 Timer2
Mdulo Timer2 um temporizador de 8 bits.

Os impulsos provenientes do oscilador de quartzo de primeira passagem atravs do divisor cujo valor pode ser modificado atravs da
combinao de bits de T2CKPS1 e T2CKPS0. A sada do divisor utilizado para aumentar a iniciar TMR2 registo 00h. Os valores de TMR2 e
PR2 so constantemente comparados e registo TMR2 vai aumentar at o valor de registo PR2. Quando valores de registo so iguais, que
ser gravado pelo comparador, o TMR2 reposto a 00h automaticamente. O postescalador de Timer2 incrementado e a sua sada
utilizada para gerar uma interrupo, se habilitado.
Os dois registros TMR e PR2 so ler e escrever. A contagem pode ser interrompido colocando um bit 0 TMR2ON, resultando em economia
de energia.

O tempo de reset TMR2 pode ser usada para determinar a taxa de transmisso da comunicao serial sncrona.
Vrios bits do registro T2CON est no controle de Timer2.

Registo T2CON

TOUTPS3 - TOUTPS0 - Postcaler Timer2 sada Seleccione pedaos (bits variam seleo Splitter ps-montanhista para Timer2) so usados
para determinar o valor da ps-escalador de acordo com a seguinte tabela:
TOUTPS3

TOUTPS2

TOUTPS1

TOUTPS0

VAL O R D O P S - C L I M B E R

1: 1

1: 2

1: 3

1: 4

1: 5

1: 6

1: 7

1: 8

1: 9

01:10

01:11

01:12

01:13

01:14

01:15

01:16

TMR2ON Timer2 Em pouco - (ativao pouco TIMR2) pe em funcionamento o Timer2.

1 - Permite a operao de Timer2.


0 - desativa a operao de Timer2.

T2CKPS1, T2CKPS0 - pedaos Timer2 Relgio prescaler (seleo gama de Timer2 divisor divisor) determina o valor do Crossover:
T2CKPS1

T2CKPS0

V AL O R D O P R E S C A L E R

1: 1

1: 4

01:16

Ao utilizar o Timer2 precisa saber mais detalhes sobre seus registros:

No momento de se transformar uma fonte de energia, o PR2 registo contm o valor FFh.
Tanto o divisor como o ps-montanhista est desmarcada por escrito para o registo TMR2.
Tanto o divisor como o ps-montanhista est desmarcada por escrito para o registo T2CON.
Em qualquer reincio ocorrer, como pode ser antecipada, tanto como divisor so apagadas ps-scaler.

Os mdulos de CCP podem operar em muitas maneiras diferentes, de modo que considerado o mais complicado. Se voc tentar analisar
tabelas com base seu desempenho descrevendo as funes bit, voc vai entender melhor o que estamos falando. Se voc usar qualquer um
dos mdulos do PCC, primeiro selecione o modo que voc precisa, analisar o valor adequado e, em seguida, comear a mudar os bits de
registradores. Se no ...

3.7 CCP MDULOS

O PCC (mdulo Capture / Compare / PWM ) um perifrico que permite medir e controlar os acontecimentos diferentes.
O modo de captura fornece acesso ao estado atual de um registro que muda constantemente o seu valor. Neste caso, o registro de
Timer1.
A modo de comparao constantemente compara valores de dois registros. Um deles o registro temporizador TMR1. Este circuito
tambm permite ao usurio acionar um evento externo aps o termo de um perodo de tempo predeterminado.
PWM ( Modulao por Largura de Pulso - modulao por largura de pulso) pode gerar sinais de frequncia e ciclo de trabalho variada por um
ou mais pinos de sada.
O microcontrolador PIC16F887 tem dois mdulos CCP - CCP1 e CCP2.
Ambos so idnticos em operao normal, enquanto caractersticas PWM melhoradas esto disponveis somente no modo de CCP1. Esta
a razo pela qual neste captulo o funcionamento do mdulo de CCP1 descrito em pormenor. Com relao CCP2, eles sero
apresentados apenas os recursos que o distinguem de CCP1.

CCP1 MDULO
A parte central deste circuito um registo CCPR1 de 16 bits que consiste CCOR1H CCPR1L e registros. Ele usado para capturar e
comparar seus valores com os nmeros armazenados na temporizador registar TMR1 (TMR1H e TMR1L).

Se ativado pelo software, reiniciando o Timer1 pode acontecer para igualar o modo de comparao de valores. Alm disso, o mdulo pode
gerar sinais de frequncia de PWM e ciclo de trabalho CCP1 variada.
Bits do registro CCP1CON est no controle do mdulo CCP1.

CCP1 no modo de captura


Neste modo, o temporizador registar TMR1 (que consiste em TMR1H e TMR1L) copiado para o registo CCP1 (que consiste em CCPR1H e
CCPR1L) nas seguintes situaes:

A borda de subida (1 -> 0) no pino RC2 / CCP;


Cada borda de descida (0 -> 1) no pino RC2 / CCP1;
Toda quarta borda de subida (0 -> 1) no pino RC2 / CCP1; e
Cada borda XVI caindo (0 -> 1) no pino RC2 / CCP1.

Uma combinao de quatro bits (CCP1M3 - CCP1M0) do registo de controlo determina qual destas eventos far com que a transmisso de
dados de 16 bits. Alm disso, voc deve atender aos seguintes requisitos ::

O pino RC2 / CCP1 deve ser configurado como entrada; e


Timer1 deve funcionar como temporizador ou contador sncrono.

CCP1IF o bit de sinalizador definido como um depois de terminar a captura. Se definido como 1, o CCP1IE PIE1 pouco registro, uma
interrupo ocorrer.
Se o mdulo CCP1 est no modo de captura, uma interrupo indesejada pode ocorrer. Para evitar isso, antes de uma mudana no registro
de controle ocorrem deve ser definido como 0 para o bit que permite CCP1IE interrupo como o CCP1IF bit bandeira.
Interrupes no desejadas no pode ser produzido mudando o valor do divisor. Para evitar isso, o mdulo CCP1 deve ser temporariamente
desligado antes de alterar o valor do divisor.
A seguinte seqncia programa escrito em conjunto recomendado:

BANKESEL CCP1CON
CLRF CCP1CON
; APAGAR controle de registro
; CCP1 mdulo off
MOVLW XX
; MODO DE NOVO PR-SELECIONADOS O montanhista
MOVWF CCP1CON
; REGISTO DE CONTROLE introduzido um novo valor
; CCP1 MDULO rodam simultaneamente
Vamos faz-lo em mikroC ...

...
ASM {
BANKESEL CCP1CON
CLRF CCP1CON
// CCP1 mdulo off
MOVLW XX
MOVWF CCP1CON
}
...

registo de controlo // APAGAR


// NOVO PRE-CLIMBER modo selecionado
// Controle de Registro novo valor inserido
// MDULO CCP1 SIMULTANEAMENTE COME ON

CCP1 modo de comparao


Neste modo, o valor armazenado no registo CCP1 est constantemente em comparao com o valor armazenado no temporizador registar
TMR1. Para igualar os valores, do estado lgico no pino de sada podem ser alteradas, dependendo do estado dos bits no registo de controlo
(CCP1M3 - CCP1M0). O bit sinalizador definido como um CCP1IF simultaneamente.

Para definir o mdulo CCP1 neste modo, duas condies devem ser atendidas:

O pino RC2 / CCP1 deve ser configurado para a sada; e


Timer1 deve ser sincronizado com o relgio interno.

CCP1 NO MODO PWM


Os sinais de frequncia e ciclo de trabalho flexvel tm uma ampla gama de aplicaes de automao. Um exemplo tpico um circuito de
controlo de potncia. Consulte a figura a seguir. Se um lgico zero (0) indica um interruptor aberto e uma lgica um (1) indica um interruptor
fechado, a energia elctrica transmitida para os consumidores directamente proporcional durao do impulso. Esta relao
chamado Ciclo .

O outro exemplo, prtica comum o uso de sinais PWM de um circuito para gerar sinais de forma de onda arbitrria, tal como uma onda
sinusoidal. Veja a figura a seguir:

Dispositivos que operam neste princpio so muitas vezes utilizados na prtica como unidades de frequncia varivel que controlam os
motores elctricos (velocidade, acelerao, desacelerao, etc.)

A figura acima mostra o mdulo CCP1 diagrama de blocos definido no modo PWM. Para gerar um pulso de forma arbitrria no pino de sada
necessrio para definir o perodo de pulsos (freqncia) e durao do pulso.

PWM PERODO
O perodo de impulso de sada (T) determinado pelo registo PR2 de Timer2. O perodo de PWM pode ser calculada pela seguinte equao:
Perodo PWM = (PR2 + 1) * * 4Tosc valor de pr-escala de Timer2
Se o perodo de PWM (t) conhecido, fcil de determinar o sinal de frequncia F porque estes dois valores esto relacionados pela
equao F = 1 / T.

PWM CICLO
O ciclo de trabalho PWM especificado usando 10 bits no total: as mais significativas oito bits do registo CCPR1L e os dois bits menos
significativos do registrador CCP1CON adicionais (DC1B1 e DC1B0). O resultado um nmero de 10 bits dada pela seguinte frmula:
Largura de pulso = (CCPR1L, DC1B1, DC1B0) * * Tosc valor de pr-escala de Timer2
A tabela seguinte mostra como gerar sinais PWM de diferentes frequncias quando o microcontrolador utiliza um cristal de quartzo de 20
MHz (Tosc = 50 ns).
FREQNCIA [KHZ]

1.22

4,88

19,53

78,12

156,3

208.3

O prescaler TMR2

16

PR2 registo

FFh

FFh

FFh

3Fh

1Fh

17h

Notas adicionais:

O pino de sada est indo para obter um 1 constantemente, se voc largura de pulso gerado por engano mais longo
do que o perodo PWM.
Neste aplicativo, voc no pode usar o ps-montanhista Timer2 para gerar PWM longos perodos.

Resoluo PWM
Um sinal PWM nada mais do que uma seqncia de pulsos, que variam em ciclo de trabalho. Para uma determinada frequncia (nmero
de impulsos por segundo), h um nmero limitado de combinaes de ciclos. Este nmero representa uma resoluo, medida em bits. Por
exemplo, se uma resoluo de 10 bits de 1024 ciclos de trabalho discretas disponveis; se a resoluo de 8 bits disponveis disretos 256
ciclos de trabalho, etc. Neste microcontrolador, a resoluo determinada pelo registo PR2. O valor mximo obtido usando o nmero FFh.
Freqncias PWM e resolues (Fosc = 20MHz)
FREQNCIA PWM

1.22KHZ

4.88KHZ

19.53KHZ

78.12KHZ

156.3KHZ

208.3KHZ

Pr-escala Temporizador

16

Valor PR2

FFh

FFh

FFh

3Fh

1Fh

17h

A resoluo mxima

10

10

10

4.90KHZ

19.61KHZ

76.92KHZ

153.85KHZ

Freqncias PWM e resolues (Fosc = 8MHz):


FREQNCIA PWM

1.22KHZ

200.0KHZ

Pr-escala Temporizador

16

Valor PR2

65h

65h

65h

19h

0Ch

09h

A resoluo mxima

Vamos faz-lo em mikroC ...

/ * Neste exemplo, o mdulo de PWM inicializado e ajustado para produzir uma sequncia
pulso ciclo de trabalho de 50%. Para este efeito, as funes so utilizadas
PWM1_Init () PWM1_Start () e PWM1_Set_Duty (). Todas as funes esto contidos Vendedor
PWM mikroC PRO para PIC. Voc s precisa copiar o programa * /
unsigned short duty_c;

// Definir duty_c Varivel

vazio initMain () {
ANSEL = ANSELH = 0;
TRISC PORTC = = 0;
PWM1_Init (5000);
}

// Todos os pinos de E / S so configurados como digitais


// estado inicial dos pinos da porta de sada PORTC
// Inicializar o mdulo PWM (5KHz )

vazio main () {
initMain ();
duty_c = 127;
// valor inicial do ciclo de trabalho
PWM1_Start ();
// Iniciar o mdulo PWM1
PWM1_Set_Duty (duty_c); // Definir o ciclo PWM de 50%
...
...

Registo CCP1CON

P1M1, P1M0 - bits de configurao de sada PWM (bits definio do modo PWM) - O pino P1A o mdulo de captura de entrada / Compare
em todos os modos, exceto no modo PWM. O pino P1B, P1C e P1D pinos agir como I / S de porta D.
No modo de PWM estes bits afectar o funcionamento do mdulo de CCP1 como mostrado na tabela seguinte:
P1M1
0

P1M0
0

MODO
Com uma nica sada PWM

Pino
P1A
passa
um
Pines P1B, P1C e P1D so porta de entrada / sada D.
Configurao
completa
(ponte completa com acesso directo)
0

P1D
pino
Para
o
pino
Pinos P1B e P1C esto inativos.

sinal

Bridge

por

um
P1D

modulado.
Avanado

sinal
sinal

um

modulado.
modulado.

Configurao de meia-ponte (meia-ponte)


1

Por
pinos
P1A
e
P1B
Pines P1C e P1D so porta de entrada / sada D.
Configurao
(reverso sada em ponte)

Ponte

um

sinal

completa

P1B
pino
por
Pin
P1C
pinos P1A e P1D esto inativos.

modulado.

um

Reverse

sinal

modulado.
ativo.

est

DC1B1, DC1B0 - Ciclo de trabalho PWM bits menos significativos (bits menos significativos do ciclo PWM) - usado apenas no modo PWM e
representam dois bits menos significativos de um nmero de 10 bits. Este nmero determina o ciclo de trabalho do sinal de PWM. Os outros
8 bits so armazenados no registo CCPR1L.
CCP1M3 - CCP1M0 - (bits mdulo CCP1 seleo de modo) determina o modo do mdulo CCP1.
CCP1M3

CCP1M2

CCP1M1

CCP1M0

MODO

Mdulo desativado (reboot).

No utilizado.

Para efeitos de comparao


CCP1IF pouco bit definido para 1 quando ocorre uma partida.
No utilizado.
Modo de captura
Cada borda de descida no pino CCP1.
Modo de captura
Cada borda de subida no pino CCP1.
Modo de captura
Toda quarta borda de subida no pino CCP1.
Modo de captura
Cada borda de subida XVI no pino CCP1.
Para efeitos de comparao
O bit de sada ea CCP1IF definido como 1 em um jogo ocorrer
Para efeitos de comparao
A sada definido como 0 e pouco CCP1IF definido como 1 em um jogo
de ocorrer.
Para efeitos de comparao

O pedido de interrupo chega e pouco CCP1IF definido como 1 para


colocar uma coincidncia
Para efeitos de comparao

Bit CCP1IF definido como 1, e os registros de temporizadores 1 ou 2 so


excludos quando ocorre uma partida
Modo de PWM

Pinos
P1A
e
P1C
Pines P1B e P1D so baixos ativa.

Modo de PWM

Pinos
P1A
e
P1C
Pines P1B e P1D so ativos de alta.

so

ativos

de

alta.

so

ativos

de

alta.

Modo de PWM

Pinos

P1A

P1C

so

baixos

ativa.

Pinos P1B e P1D so ativos de alta.


Modo de PWM
1

Pinos
P1A
e
P1C
Pinos P1B e P1D so baixos ativa.

so

baixos

ativa.

CCP2 MDULO
Excluindo diferentes nomes de registradores e bits, este mdulo uma boa cpia do mdulo CCP1 definido no modo normal. A nica
diferena significativa a comparao o funcionamento em modo de mdulo CCP2. A diferena refere-se ao sinal de reset T1
timer.Especificamente, se o A / D activada, para equalizar os valores dos registos TMR1 e CCPR2, o sinal de reposio do temporizador T1
comea automaticamente a converso A / D. Semelhante ao mdulo anterior, este circuito tambm est sob o controlo dos bits do registador
de controlo. Desta vez o registro CCP2CON.

Registro CCP2CON

DC2B1, DC2B0 - Ciclo de trabalho PWM bits menos significativos (bits menos significativos do ciclo PWM) - usado apenas no modo PWM e
representam dois bits menos significativos de um nmero de 10 bits. Este nmero determina o ciclo de trabalho do sinal de PWM. Os outros
8 bits so armazenados no registo CCPR2L.
CCP2M3 - CCP2M0 - Modo CCP2 Escolha pedaos (bits mdulo CCP2 seleo de modo) determina como o mdulo CCP2.
CCP2M3

CCP2M2

CCP2M1

CCP2M0

MODO

Mdulo desativado (reboot).

No utilizado.

No utilizado.

No utilizado.

Modo de captura
Cada borda de descida no pino CCP2.
Modo de captura
Cada borda de subida no pino CCP2.

Modo de captura
Toda quarta borda de subida no pino CCP2.
Modo de captura
Cada borda de subida XVI no pino CCP2.
Para efeitos de comparao
A partida ocorre pouco e CCP2IF definido como 1 em um jogo.
Para efeitos de comparao
A sada definido como 0 e pouco CCP2IF definido como 1 em um jogo
de ocorrer
Para efeitos de comparao
Uma interrupo ocorre, o bit CCP2IF definido como 1 e nenhum pino
mudana CCP2 de prender um jogo ocorrer.
Para efeitos de comparao

Quando ocorre uma correspondncia, o bit CCP2IF definido como 1, o


temporizador 1 registros so excludos e converso A / D iniciado se o A /
D est habilitado.

Modo de PWM

Como configurar e iniciar o mdulo CCP1 para operar no modo PWM?


Para configurar e iniciar o mdulo CCP1 para operar no modo PWM, siga estes passos:

Desativar a sada pino CCP1. Ele deve ser configurado como entrada.
Selecione o perodo de sinal PWM para inserir o valor no registo PR2.
Configure o mdulo CCP1 para operar no modo PWM atravs da combinao de bits do registo CCP1CON.
Ajustar o ciclo de trabalho da entrada de sinal PWM o valor no registro CCPR1L e usar pedaos e DC1B0 DC1B1
registo CCP1CON.
Configurar e iniciar Timer2:

o
o
o
o

Redefinir a interrupo bit bandeira no PIR1 registar TMR2IF


Definir a diviso de freqncia Timer2 por bits
T2CKPS1 e T2CKPS0 registo T2CON.
Comece o Timer2 para colocar um pouco TMR2ON registo T2CON.

Ativar pino de sada PWM depois de ter sido terminado ciclo PWM:
o
o

Espere Timer2 estouro (bit TMR2IF registo PIR1 est definido para um)
Configurando o pino apropriado como uma sada para redefinir o bit no registo TRIS.

CCP1 MDULO em modo avanado


O mdulo CCP1 a nica coisa que voc pode colocar em modo avanado. Assim basicamente difere da CCP1 modo normal e melhoria
refere-se a transmisso do sinal de PWM para os pinos de sada. Por que isso to importante? Com o uso cada vez mais freqente de
microcontroladores em sistemas de motores eltricos de controle. Aqui no vamos descrever esses dispositivos, sem embreagem, se voc
tem a oportunidade de trabalhar no desenvolvimento de dispositivos semelhantes, vai reconhecer os elementos que foram utilizados at
recentemente como um perifrico. && Say foram usados porque estes elementos esto agora integrados para o microcontrolador e pode
operar em vrios modos diferentes.

MODO PWM COM A SADA


O modo de sada PWM activado apenas se eles so colocados a zero P1M1 e P1M0 bocados no registo CCP1CON. Neste caso, um sinal
PWM pode ser simultaneamente disponvel em at quatro pinos de sada diferentes. Alm disso, a sequncia de sinais PWM pode ocorrer
como forma de onda de base ou invertido. A distribuio de sinais depende do PSTRCON bits do registro, enquanto a sua polaridade
depende do registro CCP1M0 CCP1M1 e pedaos CCP1CON.
No pino P1A e P1C e P1D em P1B e respectivamente pin: Se um pino de sada invertida ativo baixo e pulsos com a mesma forma de onda
so sempre gerados em pares ela usada.

MODO DE HALF-BRIDGE
Quanto ao modo de meia-ponte, o sinal de PWM sada no pino P1A, enquanto que tanto o sinal de PWM uma sada no pino
complementar P1B. Esses pulsos ativar os drivers MOSFET no modo Half-ponte que ativar / desativar o fluxo de corrente atravs do
dispositivo.

Desta forma muito perigosa transformando os controladores MOSFET simultaneamente (a curto produzido nessa altura seria fatal). Para
evitar isso, necessrio prever um tempo morto entre condutores e fora do tempo. Este tempo morto marcado com 'td' ( tempo de atraso )
na figura a seguir. O problema resolvido usando pedaos PDC0-PDC6 registro PWM1CON.

Como se mostra na figura abaixo, o modo de meia-ponte podem ser utilizados para activar condutores MOSFET na configurao em ponte
completa:

MODO DE FULL-BRIDGE
Todos os quatro pinos so utilizados como sadas no modo de ponte completa. Na prtica, este modo muitas vezes usado para ativar o
motor, o que proporciona uma velocidade simples, completo e direo do controle de rotao. H duas configuraes neste modo: Full
Bridge-Avanado (ponte completa com acesso directo) e Full Bridge-Versos (reverso sada em ponte).

CONFIGURAO DA PONTE COMPLETO - AO VIVO


Modo direto ocorre o seguinte:

A lgica de um (1) aparece no pino P1A (pino est ativo em nvel alto);
Seqncia de pulso aparece no pino P1D; e
A lgica zero (0) nas P1b e P1C pinos (pinos so ativos baixo).

A figura a seguir mostra o estado dos pinos P1A-P1D durante um ciclo PWM completo:

CONFIGURAO DA PONTE COMPLETO - REVERSA


A maneira semelhante ocorre no reverso , a menos que esses pinos tm funes diferentes:

A lgica de um (1) aparece no pino P1C (pino est ativo em nvel alto);
Seqncia de pulso aparece no pino P1B; e
A lgica zero (0) aparece no P1A e P1D pinos (pinos so ativos baixo).

Registro PWM1CON

STRC PWM Restart Habilitar bit (Bit permitir PWM reset automtico)

1 - Depois de um desligamento automtico, o mdulo PWM reiniciar automaticamente, e log ECCPASE ECCPAS bit
redefinido.
0 - Para Iciar o mdulo PWM aps um desligamento automtico, ECCPASE bit deve ser afastada pelo software.

PDC6 - Contagem PDC0 PWM Delay pedaos (bits de definio do modo PWM tempo morto) - O nmero binrio de 7 dgitos determina
o nmero de ciclos em trues (4Tosc) adicionado como morto pela ativao de pinos de entrada tempo PWM.

Registro PSTRCON

STRSYNC - sinc de bit de direco (direco de sincronizao de bit) determina quando o sentido dos impulsos PWM:

1 - A direo ocorre aps o registro foi alterado PSTRCION somente se forma de onda PWM completa.
0 - A localizao ocorre aps o registo PSTRCION foi alterado. O pino de sada do sinal de PWM ser mudado
imediatamente independentemente do facto de o ciclo anterior tenha sido concluda. Este procedimento til quando
voc precisa parar a transmisso de um sinal PWM do pino.

STRD - Direco Habilitar bit D (D Ativar endereo bit) determina a funo do pino P1D.

1 - O pino tem a forma de onda P1D PWM determinada pela polaridade e bits CCP1M1 CCP1M0.
0 - Pin est configurado como entrada de propsito geral / sada porta PORTD.

STRC Steering Habilitar bit C (C Ativar endereo bit) determina a funo do pino P1C.

1 - O pino tem a forma de onda P1C PWM determinada pela polaridade e bits CCP1M1 CCP1M0.
0 - Pin est configurado como entrada de propsito geral / sada porta PORTD.

STRB - Direco Habilitar bit B (B Ativar endereo bit) determina a funo do pino P1B.

1 - O pino tem a forma de onda P1B PWM determinada pela polaridade e bits CCP1M1 CCP1M0.
0 - Pin est configurado como entrada de propsito geral / sada porta PORTD.

STRA - Direco Habilitar bit A (bit para possibilitar endereo) determina a funo do pino P1A.

1 - O pino tem a forma de onda P1A PWM determinada pela polaridade e bits CCP1M1 CCP1M0.
0 - Pin est configurado como entrada de propsito geral / sada porta PORTC.

ECCPAS Registro

ECCPASE - PEAC Auto-bit Shutdown Event Status (bit de estado de desligamento automtico) indica se o desligamento automtico do
mdulo CCP (estado OFF) ocorreu:

1 - mdulo CCP est em estado de Desligamento.


0 - mdulo CCP est funcionando normalmente.

ECCPAS2 - ECCPAS0 - ECCP de desligamento automtico Fonte Selecione pedaos (bits de seleo de fonte de desligamento
automtico) Seleciona a fonte de desligamento automtico.
E C C P AS 2

E C C P AS 1

E C C P AS 0

F O N T E O F F E S TAD O

Estado de extino desativado

Mudana sada do comparador C1

Mudana sada do comparador C2

Alterando as sadas dos comparadores C1 e C2

A lgica zero (0) no pino INT

A lgica zero (0) no pino INT ou mudana de sada do comparador C1

Lgica zero (0) no pino INT ou mudana sada do comparador C2

A lgica zero (0) no pino INT ou mudana saldas dos comparadores C1 e C2

PSSAC1, PSSAC0 - Pins P1A, P1C desligamento bits de controle de Estado (configurao pedaos do pino P1A e P1C em modo de
desligamento), define o estado lgico do pino P1A e P1C quando o mdulo CCP est no estado desligado.
PSSAC1

PSSAC0

E S T AD O L G I C O D O P I N O

Alta impedncia (tri-state)

PSSBD1, PSSBD0 - Pins P1B, P1D desligamento bits de controle de Estado (bits Configurando o P1B e pin P1D em modo de
desligamento) define o estado lgico do P1B e pin P1D quando o mdulo CCP est no estado desligado.
PSSBD1

PSSBD0

E S T AD O L G I C O D O P I N O

Alta impedncia (tri-state)

O microcontrolador PIC 16F887 possui vrios mdulos de comunicao em srie independentes, cada uma tambm pode ser configurado
para operar em modos diferentes. Isso o que os torna insubstituvel em muitos casos. Lembre-se do que dissemos sobre os mdulos CCP
como o mesmo se aplica aqui. No se preocupe com os detalhes da operao de todos os mdulos, basta selecionar um e usar o que voc
realmente precisa.

3.8 mdulos de comunicao serial


O USART um dos primeiros sistemas de comunicao serial. Novas verses deste sistema esto atualizados e so chamados de forma um
pouco diferente - EUSART.

EUSART

O receptor / transmissor Universal Synchronous / Asynchronous Aprimorado (Enhanced Universal Synchronous Asynchronous
Receiver Transmitter - EUSART) mdulo uma comunicao perifrico de entrada / sada serial. Ele tambm conhecido

como interface de comunicao de srie (interface de comunicao serial - SCI). Ele contm os geradores de sinais de relgio,
tampes e registos de deslocamento necessrios para a transmisso em srie de entrada / sada de dados,
independentemente dos dados de programa do dispositivo de execuo. Como o prprio nome sugere, alm de usar o relgio
para sincronizao, este mdulo pode definir a conexo assncrona, o que o torna nico para algumas aplicaes. Por
exemplo, se difcil ou impossvel de fornecer canais especiais para transmisso e recepo de dados e de sinais de relgio
(por exemplo, infravermelhos ou de rdio remoto), o mdulo EUSART definitivamente a melhor opo.
A built-in PIC16F887 EUSART tem as seguintes caractersticas:

Transmisso e recepo em assncrono modo Full-duplex ;


Caracteres de largura 8-9 bocados programveis;
Deteco de direo no modo de 9 bits;
Buffer de entrada de deteco de erro de saturao; e
Comunicao Half Duplex no modo sncrono.

MODO EUSART ASYNCHRONOUS


O EUSART transmite e recebe dados usando a codificao de no-retorno a zero - NRZ (sem retorno a zero). Como se mostra na figura
seguinte, um sinal de relgio no usado e os dados so transmitidos de uma forma muito simples:

Cada dado transmitido como se segue:

No estado ocioso, a linha de dados continua a ser elevada (1);


Cada transmisso de dados comea com um bit de incio (START), que sempre zero (0);
Cada dados tem uma largura de 8 ou 9 bits (bit menos significativo em primeiro lugar transmitido - LSB); e
Cada transmisso de dados termina com um bit de parada (STOP), que sempre um (1) A figura abaixo mostra como
ligar microcontrolador PIC que usa regularmente mdulo EUSART. O circuito RS232 utilizado como um conversor de
nivel de tenso.

Figura abaixo mostra uma maneira comum de se conectar microcontrolador PIC que usam mdulo EUSART. O circuito RS-232 utilizado
como um conversor de nivel de tenso.

MODO EUSART ASYNCHRONOUS TRANSMISSOR

Para habilitar a transmisso de dados via mdulo EUSART, necessrio configur-lo para trabalhar como um transmissor. Em outras
palavras, necessrio definir o estado dos bits seguintes:

TXEN = 1 - O transmissor EUSART est habilitado, definindo um pouco TXEN do TXSTA.


SYNC = 0 - O EUSART est configurada para operar em modo assncrono para repor o bit de sincronizao do TXSTA.
SPEN = 1 - Ao colocar um pouco SPEN do RCSTA, o EUSART est habilitado eo pino TX / CK automaticamente
configurado como uma sada. Se o bit simultaneamente usado para alguma funo analgica deve ser desativado
para zerar o bit correspondente do registo ANSEL.

A parte central do transmissor EUSART ocupa o registo de deslocamento TSR que no est diretamente disponvel para o usurio. Para
iniciar a transmisso de dados, o mdulo deve ser ativado definindo um pouco TXEN do TXSTA. O envio de dados a serem escritos para o
registo TXREG, resultando na seguinte sequncia de eventos:

Byte sero imediatamente transmitidos para o registo de deslocamento TSR;


O registo TXREG permanece vazio, indicando pouco bandeira TXIF do registo PIR1. Se um comea o registo pouco
TXIE PIE1, gerada uma interrupo. De qualquer forma, a bandeira est definido para um, independentemente de
uma interrupo est habilitada ou no e no podem ser redefinidos pelo software, mas ao escrever novos dados para
o registo TXREG.
Dispositivos de controle eletrnico "empurrar" os dados para o pino TX em sincronizao com o relgio interno: start bit
(START) (1) Dados ..... .... bit de parada (STOP) (1).
Quando o ltimo bit sai do registo TSR, o bit TRMT em TXSTA registo automaticamente zerado.
Se, entretanto, voc escrever novos dados para o registo TXREG, todo o procedimento repetido imediatamente aps
a transmisso dos bits de paragem dados anteriores.

Para transmitir um dados de 9 bits necessrio colocar um TX9 do TXSTA pouco. O registro TX9D TXSRTA bit o nono bit e os mais
significativos. Ao transmitir um dados de 9 bits, o TX9D bit de dados deve ser escrito antes dos 8 bits menos significativos do registo TXREG
est escrito. Todos os nove bits de dados so transmitidos para o registo de deslocamento TFR imediatamente aps a escrita at o registro
TXREG.

MODO EUSART Asynchronous Receiver

Semelhante ao lanar o transmissor EUSART, para permitir que o receptor tem de definir as seguintes bits:

CREN = 1 - O receptor EUSART est habilitado, definindo um pouco CREN de RCSTA registo;
SYNC = 0 - O EUSART est configurado para operar no modo assncrono para redefinir o bit SYNC do TXSTA
registo; e
SPEN = 1 - Ao colocar um pouco SPEN do RCSTA, o EUSART est habilitado eo pino RX / DT automaticamente
configurado como uma sada. Se o bit simultaneamente usado para alguma funo analgica, deve desha bilitar a
zero o bit correspondente do registo ANSEL.

Depois que eles terminaram o primeiro passo necessrio detectado o bit de incio (START), os dados so transmitidos para o RSR registo
de deslocamento atravs do pino RX. Tendo recebido o bit de parada (STOP), ocorre o seguinte:

Os dados so automaticamente transmitidas ao registo RCREG (se estiver vazia);


O bit flag RCIF est definido para um e uma interrupo ocorre se habilitado por bit RCIE d ao registo
PIE1.Semelhante ao transmissor, o bit de flag afastada pelo software s, ou seja, atravs da leitura do registo
RCREG.Note-se que esta uma dupla entrada de FIFO (first in, first out - primeiro a entrar , primeiro a sair ), que
permite o armazenamento de dois caracteres simultaneamente);
Se o registo RCREG ocupado (que contm dois bytes) eo registo de deslocamento detecta novo bit de parada
(STOP) mordeu OERR ir substituir um. Neste caso, uma coisa nova que vem est perdido, eo bit OERR deve ser
afastada pelo software para redefinir e, em seguida, para colocar um pouco CREN; Nota: Voc no pode receber
novos dados at que o bit OERR um.
Se o bit de paragem (STOP) de zero (0), o bit FERR do RCSTA um, o que indica um erro na recepo; e
Para habilitar a recepo de um conjunto de dados de 9 bits, necessrio colocar um pouco do RCSTA RX9.

RECEBER DETECO DE ERRO


O microcontrolador pode detectar automaticamente dois tipos de erros. O primeiro chamado de enquadramento de erro (erro de
enquadramento) . Ela ocorre quando o receptor no detecta o bit de parada num intervalo de tempo predeterminado. Este erro indicado
pelo bit FERR do RCSTA. Se o bit for definido, os ltimos dados recebidos podem estar incorretas. Incluem o seguinte:

O erro de enquadramento, por si s no gera uma interrupo;


Se o bit for definido, os ltimos dados recebidos contm um erro;
O erro de enquadramento (bit definido) no impede a recepo de novos dados;
O bit FERR limpo, lendo os dados recebidos, o que significa que voc deve fazer uma verificao antes de ler os
dados; e
O bit FERR no pode ser reposto por software. Se necessrio, voc pode excluir a zerar o bit SPEN do RCSTA, o que
provoca simultaneamente um sistema de reposio EUSART.

Outro tipo de erro chamado de erro de sobrescrita (erro de saturao). Como mencionado acima, o registo FIFO pode armazenar apenas
dois caracteres. Substituir um erro ocorre quando o registo recebe o terceiro personagem. Simplesmente no h espao para armazenar um
byte, portanto, um erro inevitvel. Quando este erro ocorre, o bit OERR do RCSTA est definido para um. As consequncias so:

Os dados armazenados nos registos FIFO (2 bytes) pode ser lido normalmente;
Mais dados no sero recebidos at o bit OERR ajustado para zero; e

Este bit no diretamente acessvel. Para elimin-la, voc precisa redefinir o bit CREN do RCSTA registo ou sistema
EUSART reincio para zerar o bit SPEN do RCSTA.

Recepo de dados de 9 bits


Alm de receber dados padronizados de 8 bits, o sistema de recepo EUSART suporta dados de 9 bits. No lado do transmissor, o nono bit
para o byte inicial "ligado" directamente antes do bit de paragem. No lado do receptor, para colocar um pouco do RCSTA RX9, os dados bit
nono automaticamente escrito em pouco RX9D o mesmo registro. Depois de armazenar este byte, voc deve ter cuidado em como ler
esses bits - deve primeiro ler o RX9D pouco e, em seguida, oito (8) bits menos significativos do registrador RCREG. Caso contrrio, o nono
bit ser definido para zero antes de ser lido.

DETECO DE ENDEREO
Quando o bit registo ADDEN RCSTA estiver definido, o mdulo EUSART capaz de receber apenas os dados de 9 bits, ao passo que todos
os 8 bits de dados so ignorados. Embora parea uma restrio, este modo permite a comunicao serial entre vrios microcontroladores. O
princpio de funcionamento muito simples. O dispositivo mestre envia um 9-bit de dados que representam o endereo de um
microcontrolador escravo. No entanto, todos devem ter o ADDEN bit definido para um, porque desta forma a direco de deteco
activado. Todos os microcontroladores escravos que compartilham a mesma linha de transmisso, receber estes dados (endereo) e verificar
automaticamente se ele corresponde a seu prprio endereo. O software, no qual o jogo de endereo ocorre, deve desabilitar a deteco de
endereo, limpando o ADDEN pouco.

O dispositivo mestre continua a enviar dados para o microcontrolador de 8 bits. Todos os dados que passam atravs da linha de transmisso
s ser recebido pelo mdulo EUSART destinatrios. Uma vez recebido o ltimo byte, o microcontrolador escravo deve colocar um pouco
ADDEN para permitir a deteco de endereo novo.

TXSTA registo

CSRC - Clock Source Select bit - (seleo bit da fonte de relgio) determina a fonte de relgio. utilizado somente no modo sncrono.

1 - Modo Mestre . Relgio gerado internamente pelo gerador de taxa de transmisso.


0 - Modo Slave . A partir de uma fonte de relgio externo.

TX9 - 9-bit Transmit Habilitar bit (ativar o modo de bit de transmisso de 9 bits)

1 - Modo 9-bit na transmisso pelo sistema EUSART est habilitado.


0 - modo de transmisso de 8-bit habilitado o sistema EUSART.

TXEN - Transmit Habilitar bit (Ativao de transmisso de bit)

1 - transmission habilitado.

0 - transmisso desativado.

SYNC - EUSART Mode Select bit (modo de seleo EUSART Bit)

1 - O EUSART opera no modo sncrono.


0 - O EUSART opera em modo assncrono.

SENDB - Enviar pouco pausa personagem (manipulao de caracteres Ruptura pouco no modo assncrono) usado apenas no modo
assncrono e quando ele obrigado a obedecer ao padro de barramento LIN.

1 - um personagem enviado ruptura na prxima transmisso (definido como 0 por hardware quando terminar o
transporte).
0 - Envio de carter transmisso Ruptura concluda.

BRGH - alta taxa de Baud Select bit (bit de modo selecionar alta velocidade modo assncrono). Determina a velocidade de transmisso em
modo sncrono. Ele no afecta a EUSART no modo sncrono.

1 - EUSART opera a alta velocidade.


0 - EUSART opera a baixa velocidade.

TRMT - Transmitir a tecla Shift pouco Register Estado (status bit registo de deslocamento de transmisso)

1 - TSR registo est vazio.


0 - TSR registo est cheio.

TX9D - pouco Nove de Transmisso de Dados (valor do nono bit na transmisso) pode ser usado como endereo ou bit de paridade ou
para distinguir entre endereos ou dados nas master-slave) nibus.

RCSTA registo

SPEN - Porta Serial Habilitar bit (bit de habilitao de porta serial)

1 - Porta Serial habilitado. O RX / DT e TX pinos / CK so automaticamente configurados como entrada e sada,


respectivamente.
0 - desativado Serial.

RX9 - (ativar o modo de recepo de 9 bits bit):

1 - 9 de receber bits de dados atravs do sistema EUSART est habilitado.


0 - a receber dados de 8 bits atravs do sistema EUSART est habilitado.

SREN - Single ReceiveEnable bit (bit permitir a recepo simples). Ele usado somente no modo sncrono e funcionando como Mestre.

1 - recepo simples habilitada.

0 - recepo simples desativado.

CREN - Continuous Receba Habilitar bit (bit permitir a recepo contnua) aos actos dependendo do modo EUSART.
Modo assncrono:

1 - Recepo habilitado.
0 - Recepo desativado.

Modo sncrono:

1 - a contnua receber at o bit CREN zero habilitado.


0 - a recepo no continuamente activado.

ADDEN - Endereo Detectar Habilitar bit (bit habilitar a deteco de direo) modo usado apenas para detectar a direo.

1 - Permite a deteco de endereo (apenas um byte recebido no registo receber mudana processado se o nono bit
definido)
0 - deteco de endereo desactivado (todos os bytes recebidos no registador de deslocamento de recepo so
processados independentemente do valor do nono bit recebido). O nono bit usado como bit de paridade.

FERR - Enquadrar o bit de erro (o quadro de erro de bit)

1 - Houve uma recepo quadro erro.


0 - Tem havido um erro da trama.

OERR - Superao bit de erro (substituir erro bit).

1 - Houve uma recepo de sobrescrever erro.


0 - No um erro de substituir.

RX9D - bit Nona dos dados recebidos Nenhum erro ocorreu substituir.

O gerador de taxa de transmisso EUSART (BRG)


Se voc olhar atentamente para o diagrama do receptor ou transmissor EUSART assncrona, voc vai ver que o relgio assinalar ambos
usam BRG temporizador local para sincronizao. A mesma fonte de relgio tambm utilizado no modo sncrono.
O temporizador BRG consiste em dois registos de 8 bits que fazem um registo de 16 bits.

O valor de um nmero escrito nestes dois registos determina a taxa de transmisso. Alm disso, mordeu BRGH TXSTA cadastre eo
BAUDCTL BRGH16 registo pouco afetar a freqncia de clock utilizada para o clculo da transmisso.
O valor de um nmero escrito nestes dois registos determina a taxa de transmisso. Alm disso, mordeu BRGH TXSTA cadastre eo
BAUDCTL BRGH16 registo pouco afetar a freqncia de clock utilizada para o clculo da transmisso.
BITS

MODO DE BRG / EUSART

T AX A D E T R A N S M I S S O F O R M U L A

SYNC

BRG1G

BRGH

8 bits / assncrona

Fosc / [64 (n + 1)]

8 bits / assncrona

Fosc / [16 (n + 1)]

16bit / assncrona

Fosc / [16 (n + 1)]

16bit / assncrona

Fosc / [4 (n + 1)]

8 bits / sncrono

Fosc / [4 (n + 1)]

16bit / Synchronous

Fosc / [4 (n + 1)]

As tabelas nas pginas seguintes contm valores que devem ser escritos em 16 bits registar SPBRG e atribudo ao SYNC, BRGH e BRGH16
bits para alguns valores do padro de transmisso velocidade de transmisso. A frmula para calcular a taxa de transmisso:

Registro BAUDCTL

ABDOVF - Auto-Baud Detectar pouco Overflow (taxa de auto-deteco de estouro de transmisso bit) usado apenas no modo
assncrono durante a deteco da velocidade de transmisso.

1 - transbordamento ocorreu durante a deteco automtica.


0 - No transbordamento ocorreu durante a deteco automtica.

RCIDL - Receba ocioso pouco Bandeira Sem transbordamento ocorreu durante a deteco automtica.

1 - Receptor no estado de repouso. Nenhuma operao de recepo em andamento.


0 - foi recebida bit de incio (START) e h uma operao de recepo em andamento.

SCKP - Synchronous Relgio Polaridade Select pouco . (Bit de polaridade Seleco do sinal de relgio no modo sncrono). O estado
lgica desse pouco difere consoante o modo EUSART est ativo
Modo assncrono:

1 - Os dados invertido transmitida ao pino RC6 / TX / CK.


0 - Os dados no invertida transmitida ao pino RC6 / TX / CK.

Modo sncrono:

1 - Sincronizao na borda de subida do sinal de relgio.


0 - Sincronizao na borda de descida do sinal de clock.

BRG16 16-bit Taxa de Transmisso Generator bit - (bit de habilitao de bauds gerador taxa de 16-bit) determina se o SPBRGH registo
ser utilizado, ou se o BGRG temporizador tem 8 ou 16 bits.

1 - o gerador de taxa de transmisso de 16 bits usados


0 - o gerador de taxa de transmisso utilizado para 8 bits

WUE Wake-up Habilitar bit (bit de modo permitir a auto-ativao em modo assncrono):

1 - modo de auto-ativao habilitado. O aguarda receptor para a borda de descida aparece no pino RC7 / RX / DT para
o microcontrolador acorda do sono.
0 - modo de auto-ativao habilitado. Receiver opera normalmente.

Abden - Auto-Baud Detectar Habilitar bit (bit permite a deteco automtica de velocidade de transmisso) usado apenas no modo
assncrono.

1 - Modo de deteco automtica habilitada. Ao detectar a velocidade de transmisso, o bit ajustado para um
automaticamente.
0 - Modo de deteco automtica desativada.

Vamos faz-lo em mikroC ...

/ * Neste exemplo, o mdulo EUSART interna inicializada e configurada para enviar o


mensagem imediatamente aps receb-la. A taxa de transmisso
definido para 9600 bps. O programa usa o seguinte rotinas de biblioteca UART:
UART1_init () UART1_Write_Text () UART1_Data_Ready () UART1_Write () e UART1_Read (). * /
carbonizar uart_rd;
vazio main () {
ANSEL = ANSELH = 0;
// Todos os pinos so configurados como digitais
C1ON_bit = C2ON_bit = 0;
// Desabilitar os comparadores
UART1_Init (9600);
// inicializar o mdulo UART em 9600 bps
delay_ms (100);
// Aguarde mdulo de relgio UART
// ponha estvel
UART1_Write_Text ("Start");
enquanto (1) {
// faz um loop infinito
se (UART1_Data_Ready ()) {
// Se os dados tiverem sido recebidos,
uart_rd = UART1_Read ();
// ler os dados recebidos

UART1_Write (uart_rd);

// e envi-lo de volta pelo UART

}
}
}
Transmisso serial assncrona via registros mdulo EUSART

1. A taxa de transmisso desejada deve ser definida pelo BRGH (TXSTA) e BRG16 (log BAUDCTL) bits e SPBRG SPBR
e registros.
2. A taxa de transmisso desejada deve ser definida pelo BRGH (TXSTA) e BRG16 (log BAUDCTL) bits e SPBRG SPBR
e registros.
3. A taxa de transmisso desejada deve ser definida pelo BRGH (TXSTA) e BRG16 (log BAUDCTL) bits e SPBRG SPBR
e registros.
4. A transmisso de dados ativado por colocar um pouco TXEN do TXSTA. O bit TXIF do registo PIR1 automaticam
ajustado para um.
5. TXEN pouco para causar uma interrupo, tanto o log TXIE PIE1 pouco como bits GIE, PEIE do registo INTCON deve
definido como um.
6. Em uma transmisso de dados de 9 bits, o valor do nono bit dever ser escrito em pouco TX9D TXSTA registo.
7. A transmisso comea quando os dados de 8 bits no balco de registo TXREG est escrito.
Recepo de srie assncrona via registros mdulo EUSART:

1. A taxa de transmisso desejada deve ser definida pelo BRGH (TXSTA) e BRG16 (log BAUDCTL) bits e SPBRG SPBR
e registros.
2. O bit SYNC (TXSTA) deve ser ajustado para zero e mordeu SPEN (registo RCSTA) deve ser definido como um para a
a porta serial.
3. Ambos log RCIE PIE1 pouco como bits GIE e PEIE do registo INTCON deve ser definido como um, se necessrio
permitir a recepo de dados provoca uma ruptura.
4. Para receber dados de 9 bits, pouco RX9 (registo RCSTA) deve ser definido como um
5. Recepo de dados ativado por colocar um pouco CREN do RCSTA.
6. O RCSTA deve ser lido para obter informaes sobre a ocorrncia de erros durante a recepo. O valor do nono
armazenado neste log que em receber dados de 9 bits.
7. Os dados de 8 bits recebidos sero armazenados no registo RCREG e deve ser lido para obter esses dados.
Ajuste o modo de deteco de direo:

1. A taxa de transmisso desejada deve ser definida pelo BRGH (TXSTA) e BRG16 (log BAUDCTL) bits e SPBRG SPBR
e registros.
2. O bit SYNC (TXSTA) deve ser ajustado para zero e mordeu SPEN (registo RCSTA) deve ser definido como um (1)
ativar a porta serial.
3. Ambos log RCIE PIE1 pouco como bits GIE e PEIE do registo INTCON deve ser definido como um, se necessrio
permitir a recepo de dados provoca uma ruptura.
4. Bit RX9 RCSTA deve ser um.
5. O ADDEN RCSTA registo deve ser um pouco, o que permite que os dados a ser reconhecido como o sentido.
6. Recepo de dados ativado por colocar um pouco CREN do RCSTA.
7. Assim como dados de 9 bits, o bit RCIF do registo recebimento PIR1 ser automaticamente ajustado para um.Se ativ
ocorre uma interrupo.
8. O RCSTA deve ser lido para obter informaes sobre a ocorrncia de erros durante a transmisso. O nono bit RX9D
sempre um.
9. Os dados de 8 bits recebidos sero armazenados no registo RCREG e devem ser lidas. Eles devem verificar
combinao desses bits corresponde ao endereo pr-definido. Se ele corresponder, voc precisa redefinir o RC
pouco ADDEN, que permite receber dados de 8 bits.

MESTRE SYNCHRONOUS mdulo serial (MSSP)


O (Porta Serial Mestre Synchronous - MSSP Mestre Synchronous Serial Port ) um mdulo muito til, e tambm um dos circuitos mais
complexos dentro do microcontrolador. Este mdulo permite a comunicao de alta velocidade entre um microcontrolador e outros perifricos
ou outros microcontroladores usando vrias linhas de E / S (no mximo duas ou trs linhas). Por isso, muitas vezes usado para conectar o
microcontrolador para monitores LCD, os conversores A / D, EEPROM de srie, registos de deslocamento etc. A principal caracterstica deste
tipo de comunicao que sncrono e adequado para uso em sistemas com um nico mestre e um ou mais escravos. Um dispositivo
mestre contm um circuito para gerar transmisso e tambm fornece sinais de relgio para todos os dispositivos do sistema. Dispositivos
escravos no tm um circuito para gerar sinais de clock internos. O mdulo MSSP pode operar em uma de duas maneiras:

Ento SPI (interface de perifricos de srie - Interface Perifrica Serial ); e


I2C (- inter-circuito integrado como Circuito Inter-Integrated ).

Como se mostra na figura abaixo, um mdulo MSSP representa apenas uma metade de uma necessidade de estabelecer um hardware de
comunicaes de srie, enquanto a outra metade est armazenada no dispositivo que troca dados. Embora os mdulos em ambas as
extremidades da linha so o mesmo, os seus modos de operao diferem substancialmente dependendo se o mdulo funciona
comoprincipal ou escravo :

Se o microcontrolador a ser programado controla outro dispositivo ou circuito (perifricos), que deve funcionar como um
dispositivo mestre. Este mdulo gera um sinal de relgio, quando necessrio, ou apenas quando for necessrio receber e transmitir dados
por software.Portanto, o estabelecimento de conexo depende apenas do dispositivo mestre.

Caso contrrio, se o microcontrolador programado para ser integrado num dispositivo mais complexo (por exemplo um PC) dever funcionar
como um dispositivo secundrio. Como tal, um escravo deve sempre esperar at que um dispositivo master envia um pedido de transmisso
de dados.

MODO SPI
O modo SPI permite a transmisso e recepo simultneas de dados de 8 bits por meio de trs linhas de entrada / sada

SDO - Serial Data Out (sada de dados em srie) - linha de transmisso;


SDI - srie de dados In (entrada de dados em srie) - linha de recepo; e
SCK - Relgio Serial (comunicao relgio) - linha de sincronizao.

Alm disso, existe uma quarta linha (SS) que pode ser usado se as trocas de dados do microcontrolador com vrios dispositivos
perifricos. Consulte a figura a seguir.
SS - Slave Select (Seleo de escravo) - uma linha adicional usado para selecionar um dispositivo especfico. Esta linha est ativa apenas
se o microcontrolador opera como um escravo, ou quando o dispositivo externo - professor exige a troca de dados. Quando operando em
modo SPI, o mdulo MSSP usa quatro registradores no total:

SSPSTAT - registrador de status


SSPCON - registro de controle
SSPBUF - tampo transmisso serial / recepo
SSPSR - registrador de deslocamento (no acessvel diretamente)

Os trs primeiros registros so de leitura / gravao e pode ser alterado a qualquer momento, enquanto o quarto, uma vez que no
acessvel, usado para converter o formato de dados em srie.

Tal como mostrado na figura a seguir, a parte central do mdulo SPI consiste em dois registos ligados aos pinos de recepo, de transmisso
e de sincronizao.

O registador de deslocamento (SSPRS) est directamente ligado aos pinos do microcontrolador e utilizado para o formato de transmisso
de dados em srie. O registro tem SSPRS e para fora para mover dados para dentro e para fora do dispositivo. Em outras palavras, cada bit
aparecendo numa entrada (linha de recepo) move-se simultaneamente uma outra parte para a sada (linha de transmisso).
O SSPBUF (log tampo ) uma parte da memria usado para armazenar temporariamente os dados antes de serem enviados, ou
imediatamente aps terem sido recebidas. Depois de todos os 8 bits foram recebidos, o byte movido de registo para registar SSPRS
SSPBUF. Este processo de criao de um buffer duplo para receber os dados podem comear a receber o prximo byte antes de ler os
dados que acabou de ser recebidos. Durante a transmisso / recepo de dados de uma tentativa de escrever uma entrada no log SSBUF
ignorado. Do ponto de vista de um programador, este registro considerado o mais importante porque foi acessada com mais
freqncia.Especificamente, se deixarmos de lado o modo de ajuste, a transmisso de dados atravs do mdulo SPI nada mais do que ler
e gravar dados deste registo, enquanto os outros "truques" como mover os registros so mantidos automaticamente pelo hardware.
Vamos faz-lo em mikroC ...

/ * Neste exemplo, o microcontrolador PIC (mestre) envia um byte de dados a um chip


perifrica (escravo) pelo mdulo SPI. O programa utiliza as funes de biblioteca
SPI1_init SPI () e SPI1_Write. * /
sbit Chip_Select em RC0_bit;

// Pin RC0 um chip select pin

// Peripheral Seleccin_de_chip
sbit Chip_Select_Direction em TRISC0_bit; // Bit TRISC0 define o RC0 pino como entrada ou sada
int no assinado valor;
// Os dados devem ser enviados do tipo unsigned
int
vazio main () {
= ANSELH ANSEL = 0;
// Todos os pinos de I / S so digitais
TRISB0_bit = TRISB1_bit = 1; // Definir o pino RB0, RB1 como entradas
Chip_Select = 0;
// Selecione o chip perifrico
Chip_Select_Direction = 0;
// Set CS pino de sada #
SPI1_Init ();
// Inicializar o mdulo SPI
SPI1_Write (valor);
// enviar o valor para o chip perifrico
...

Comunicao sncrona em srie SPI

Antes de iniciar o mdulo SPI, necessrio especificar vrias opes:

TRISC.3 Mestre = modo 0 (pino SCK a sada do relgio);


TRISC.3 modo escravo = 1 (pino SCK entrada de clock);
Entrada de fase - a meio ou no final do tempo de sada de dados (SMP pouco de SSPSTAT registo);
Clock (CKE bit do registo SSPSTAT);
Taxa de transmisso, bits de registro SSPCON SSPM3-SSPM0 (modo Master apenas);
Seleo de modo escravo, mordeu Secretaria SSPM3-SSPM0 SSPCON (modo Slave apenas)

O mdulo comea a colocar um pouco SSPEN:

Passo

1.

Os dados a transmitir deve ser escrito no registo tampo SSPBUF. Se o mdulo SPI opera no modo mestre, o microcontrolador
executa automaticamente a sequncia da sequncia 2,3 e 4. Se o mdulo SPI opera no modo escravo, o microcontrolador no
executar a sequncia dos passos que se seguem, at os pinos detecta SCK sinal de relgio.

Passo

2.

Os dados so movidos para o SSPSR eo contedo SSPBUF no est desmarcada.

Passo

3.

Os dados so deslocados para o pino de sada (bit mais significativo MSB primeiro move -) enquanto que, simultaneamente, o
registo carregado com pedaos de o pino de entrada. No modo mestre do prprio microcontrolador gera relgio, enquanto o
modo Slave usa relgio externo (pino SCK).

Passo

4.

O SSPSR est cheio depois de terem sido recebidos 8 bits de dados, o que indicado, colocando um pouco de BF registo
SSPSTAT eo bit SSPIF do registo PIR1. Os dados recebidos (um byte) so movidos automaticamente a partir do registo
SSPBUF SSPSR registo. Como a transmisso de dados em srie executado automaticamente, o programa restante executa
normalmente enquanto a transmisso de dados est em andamento. Neste caso, a funo pouco SSPIF para gerar uma
interrupo para parar a transmisso de um byte.

Passo

5.

Finalmente, os dados armazenados na SSPBUF est pronto para ser utilizado e deve ser movido para o registo desejado.

Modo I 2 C
O modo I 2 C (barramento inter-circuito integrado) apropriado para utilizao quando o microcontrolador deve trocar dados com um
dispositivo integrado dentro de um circuito. Estas so muitas vezes outros microcontroladores ou circuitos integrados especializados e
baratos que pertencem a uma nova gerao de chamadas "perifricos inteligentes" (sensores de temperatura, as memrias, os relgios de
tempo real, etc.)
Semelhante ao serial no modo SPI, a transmisso de dados o modo bidirecional sncrona e I2C. Desta vez, apenas dois pinos so
utilizados para a transmisso de dados. Estes so os pinos SDA (dados seriais) e SCL (relgio de srie). O usurio deve configurar esses
pinos como entradas ou sadas por pedaos TRISC.
Ao observar as regras especficas (protocolos), permitindo assim a conexo simultnea de uma maneira simples de diferentes componentes
112 usando apenas dois pinos valioso E / S. Vamos ver como funciona o sistema:
O relgio necessrio para sincronizar a operao de ambos os dispositivos, sempre gerado por um dispositivo principal (microcontrolador)
e a sua frequncia afecta directamente a velocidade de transmisso de dados. Embora no haja um protocolo que permite que uma
frequncia mxima de relgio de 3,4 MHz (o chamado barramento I2C alta velocidade), este livro abrange apenas o protocolo mais utilizada,
com frequncia de relgio de 100 KHz limitado. A frequncia mnima no limitado.
Quando os componentes mestre e escravo so sincronizados pelo relgio, o mestre sempre comea cada troca de dados. Uma vez que o
mdulo MSSP foi ativado, ele dever comear a condio (condio de incio) ocorre. O primeiro dispositivo mestre envia o bit de incio (
zero) pelo pino de SDA, em seguida, o endereo do dispositivo secundrio de 7 bits seleccionada e, finalmente, o bit que requer o dispositivo
de gravao (0) ou ler (1) dados enviados. Em outras palavras, os oito bits so deslocados para a SSPSR condio de arranque aps
ocorrer. Todos os dispositivos escravos que compartilham a mesma linha de transmisso receber simultaneamente o primeiro byte, mas
apenas contm o endereo de correspondncia receber a coisa toda.

Uma vez que o primeiro byte enviado (somente dados de 8 bits so transmitidos), o mestre colocado em recepo e espera dispositivo de
reconhecimento de receptor sobre o endereo de correspondncia.
Se o dispositivo envia um escravo reconhecer bit (1) de transmisso de dados ir continuar at que o dispositivo mestre (microcontrolador)
envia o bit de parada (Stop).

Esta uma explicao simples de como dois componentes se comunicar. Este microcontrolador capaz de controlar situaes mais
complicadas quando 1.024 diferentes componentes esto ligados (endereo 10-bit), compartilhada por vrios dispositivos mestres
diferentes. Claro, estes dispositivos so raramente usados na prtica de modo que no necessrio discuti-los em detalhe.
A figura a seguir mostra o diagrama de blocos do modo de mdulo MDSSP I 2 C.

Em uma operao de I 2 C com o mdulo MSSP envolveu seis registros. Alguns deles so mostrados na figura anterior.

SSPCON
SSPCON2
SSPSTAT
SSPBUF
SSPSR
SSPADD

SSPSTAT registo

Amostra bit SMP (amostra Bit)


SPI modo master - Este bit determina fase dados introduzidos.

1 - estado lgico lido no final do tempo de sada.


0 - estado Logic lido na metade do tempo de partida.

Modo escravo SPI - Este bit deve ser limpo quando SPI utilizado no modo escravo.

Modo IC ( mestre ou escravo )

1 - desativa variaes de controlo de velocidade standard (100kHz).


0 - Permite controlar as variaes de alta velocidade (400k Hz).

CKE - Clock Borda Select bit (seleo clock bit) seleciona o modo de sincronizao.
CKP = 0:

1 - Os dados transmitidos na subida do sinal de pulso de clock (0-1).


0 - Os dados transmitidos em queda borda do pulso de clock (1-0).

CKP = 1:

1 - Os dados transmitidos em queda borda do pulso de clock (1-0).


0 - Os dados transmitidos na subida do sinal de pulso de clock (0-1).

D / A - Dados / Endereo bit (endereo bit / dados) usado apenas no modo I 2 C.

1 - Indica que o ltimo byte de dados recebido ou transmitido.


0 - Indica que o ltimo byte recebido ou transmitido um endereo.

P - Stop bit (bit de parada) utilizado somente no modo IC.

1 - Bit de paragem (STOP) foi detectado.


0 - Bit de paragem (STOP) no detectado.

S - Comece bit (start bit) utilizado somente no modo I2C.

1 - Comece bit (START) detectado.


0 - Comece bit (START) sem deteco.

R / W - Read Write bit (bit de informao de leitura / gravao) usado apenas no modo I 2 C. Este bit contm informaes bit L / E aps o
endereo cident ltima moeda. Este bit s vlida a partir do endereo de correspondncia para o prximo bit de incio, bit de parada e
nenhum bit de ACK.
Modo IC no modo escravo

1 - leitura de dados.
0 - Escrever dados.

Modo IC no modo escravo

1 - Transmisso em andamento.
0 - transmisso no est em andamento.

UA - Atualizao pouco Endereo (direo ativao bit) utilizado somente no modo I 2 C 10-bit.

1 - Indica que voc precisa atualizar o endereo no registo SSPADD.


0 - Indica que o endereo est correto e que nenhuma atualizao necessria.

BF buffer Bit de estado completa (bit tampo status completo)


Ao receber dados (em modos SPI e IC)

1 - Recepo completa. O SSPBUF est cheio.


0 - A recepo no concludo. O SSPBUF est vazio.

Durante a transmisso de dados (modo IC nica)

1 - transmisso de dados em andamento (no inclui o bit ACK e parar de bits).


0 - transmisso de dados completos (no incluindo o bit ACK e parar de bits).

SSPSTAT registo

WCOL Escrever Collision Detect bit (detector de coliso bits)

1 - coliso detectada. No SSPBUF cadastre-se que foi escrito quando no tenham cumprido as condies para iniciar
uma transmisso.
0 - Nenhuma coliso.

SSPOV Receba pouco Indicador Overflow (detector estouro pouco na recepo)

1 - Um novo byte recebido quando o SSPBUF ainda mantm os dados para riores. Como no h espao para
receber novos dados, um dos dois bytes devem ser apagados. Neste caso, os dados armazenados na SSPSR no
podero ser recuperados.
0 - dados de srie recebido corretamente.

SSPEN - Porta Serial Synchronous Habilitar bit (SSP permitir mdulo bit - porta serial sncrona) determina a funo dos pinos do
microcontrolador e inicializa o mdulo MSSP:
Modo SPI

1 - Permite que o mdulo MSSP e configura SCK, SDO, SDI e SS pinos como fonte de porta serial pino.
0 - desativa o mdulo MSSP e configura esses pinos como os pinos da porta de E / S.

Modo IC

1 - Permite que o mdulo MSSP e configura o SDA e SCL pinos como fonte de porta serial pino.
0 - desativa o mdulo MSSP e configura esses pinos como os pinos da porta de E / S.

CKP - Clock Polaridade Select bit (seleo polaridade relgio bit) no utilizado no modo mestre IC.
Modo SPI

1 - Para um sinal de relgio, o estado inactivo um nvel elevado.


0 - Para um sinal de relgio, o estado inativo baixa.

Slave IC

1 - habilitado sinal de relgio.


0 - Mantm relgio sada sinal de baixa. Ele utilizado para proporcionar mais tempo para a estabilizao de dados.

SSPM3-SSPM0 - Synchronous Serial Port Mode Escolha pedaos . . (Seleo do modo de Bit SSP (Synchronous Serial Port) O modo
SSP determinado pela combinao dos seguintes bits:
SSPM3

SSPM2

SSPM1

SSPM0

MODO

SPI relgio mestre = modo Fosc / 4.

SPI relgio mestre = modo Fosc / 16.

SPI relgio mestre = modo Fosc / 64.

SPI relgio mestre = (sada TMR) / 2 modo.

Modo escravo SPI, ativar o controle de pino SS.

Modo escravo SPI, SS pin pin deficientes SS controle pode ser usado como I / S.

Modo escravo I2C, endereo de 7 bits usado.

Modo escravo I2C, endereo de 10 bits usado.

Mestre modo I2C, relgio = Fosc / [4 (SSPad + 1)].

Mscara usado no modo I2C escravo.

No utilizado.

Mestre I2C forma controlada.

No utilizado.

No utilizado.

Modo escravo I2C, endereo de 7 bits usado, pedaos de incio (START) e parar
(STOP) permitir interrupo.

I2C modo Slave, endereo de 10 bits usado, pedaos de incio (START) e parar
(STOP) permitir interrupo.

Registro SSPCON2

GCEN - Chamada Geral Habilitar bit (bit de autorizao geral)

Slave IC nica

1 - Permite interromper quando um endereo de chamada geral recebido no SSPST (0000h).


0 - Desativa chamar endereo.

ACKSTAT - Reconhecer Bit de estado (reconhecimento bit de status)


Somente mestre modo de transmisso IC

1 - O reconhecimento do escravo no recebeu.


0 - O reconhecimento do escravo recebido.

ACKDT - Reconhecer bit de dados (recepo bit)


Somente mestre modo de recepo IC

1 - Sem reconhecimento.
0 - Reconhecimento.

ACKEN - Reconhecer Sequence Habilitar bit (bit de habilitao sequncia de reconhecimento)


Em IC recepo modo Master

1 - Indica uma sequncia de reconhecimento em SDA e SCL pinos e transmite o ACKDT pouco. Automaticamente
limpo por hardware.
0 - sequncia de reconhecimento em repouso.

RCEN - Receba Habilitar bit (recepo permitir bit)


Modo Master IC nica

1 - Ativa o modo de recepo I 2 C.


0 - Recepo desativado.

PEN - condio de parada Habilitar bit (habilitar condio Parar bit)


Modo Master IC nica

1 - Indica uma condio de parada em SDA e SCL pinos. Ento, este bit automaticamente limpo por hardware.
0 - condio de parada ocioso.

RSEN - repetida condio de incio pouco Ativado (bit permitir condio de incio repetida)
Modo Master IC nica

1 - Indica condio de incio da repetio em SDA e SCL pinos. Ento, este bit automaticamente limpo por hardware.
0 - Repetir Start Condition resto.

SEN - START Estado Habilitado / estiramento pouco Ativado (bit permitir condio de incio)
Modo Master IC nica

1 - Indica condio de incio da SDA e SCL pinos. Ento, este bit automaticamente limpo por hardware.
0 - Comece a condio ociosa.

Master Mode IC
O caso mais comum que um microcontrolador funes como um mestre e escravo perifrica. por isso que este livro apenas desta
forma. Entende-se que o endereo consiste de 7 bits e um dispositivo contm apenas um microcontrolador (dispositivo mestre nico).
Para ativar o mdulo MSSP neste modo, siga as instrues abaixo:

Definir a taxa de transmisso (SSPADD registo), gire o controle de velocidade de rotao (para colocar um pouco de SMP SSPSTAT registo)
e selecionar o modo de mestre (registro SSPCON). Depois de concluir todas as configuraes e ativar o mdulo (registo SSPCON: pouco
SSPEN), voc deve esperar para os circuitos de controlo interno com um sinal indicando que tudo est pronto para a transmisso de dados,
ou seja, o bit de log SSPIF PIR1 foi definido para um.

Depois de definir este bit para zero por software, o microcontrolador est pronto para trocar dados com perifricos.

A transmisso de dados IC Master Mode


Os dados sobre o pino SDA comea com uma lgica zero (0) que aparece para colocar um pouco o SPEN em SSPCON2. No entanto,
enquanto ele estiver habilitado, o microcontrolador tem que esperar um pouco antes de iniciar a comunicao. Ele chamado de "condio
Start 'durante o qual preparativos internos e verificaes so executadas. Se voc atender a todas as condies do pouco SSPIF do registo
PIR1 est definido para um e transmisso de dados comea assim que o SSPBUF carregado.

Mximo de 112 circuitos integrados (dispositivos de escravos) podem utilizar simultaneamente a mesma linha de transmisso. O primeiro
byte de dados enviado pelo dispositivo mestre contm o endereo corresponde a um nico endereo de dispositivo secundrio. Todos os
endereos esto listados nas respectivas folhas de dados. O oitavo bit do primeiro byte de dados especifica o sentido de transmisso de
dados, ou se o microcontrolador est a enviar ou receber dados. Neste caso, como a transmisso de dados, o oitavo bit ajustado para
zero (0).

Quando a coincidncia de endereo ocorre, o microcontrolador tem que esperar para o dispositivo escravo envia o bit de reconhecer, por isso
vai redefinir o bit de registro ASKSTAT SSPCON2. Uma vez que o endereo de coincidncia ocorreu adequadamente, cada byte de dados
transmitido da mesma forma.
A transmisso de dados termina activando um pouco SSPCON2 log SEN. Condio de parada ocorre (STOP), que permite que o pino SDA
recebe uma seqncia de pulsos:
Home - Endereo - Reconhecimento - Dados - Reconhecimento .... Dados - Reconhecimento - Pare!

A recepo de dados no modo Mestre IC


Preparaes para dados so semelhantes para transmitir os dados, excepto o ltimo bit do primeiro byte enviado (que contm o endereo)
ajustado para o lgico um (1). Especifica que o dispositivo mestre espera para receber dados a partir do dispositivo escravo endereado.No
que diz respeito ao microcontrolador, ocorre o seguinte:
Depois de fazer os testes internos e colocar um pouco de incio (START), o dispositivo escravo envia byte por byte. Estes bytes so
armazenados na srie SSPSR. Aps a recepo do ltimo - oitavo bit, cada dados carregado no SSPBUF que pode ser lido. Ao ler este
registro, ele envia automaticamente o bit de reconhecimento, o que significa que o dispositivo mestre est pronta para receber novos dados.
Como no caso da transmisso, recepo de dados termina colocando um bit de paragem (STOP):

Home - Endereo - Reconhecimento - Dados - Reconhecimento .... Dados - Reconhecimento - Pare!


Nesta sequncia de impulsos, o bit de reconhecimento enviada para o dispositivo escravo .

Gerador de taxa de transmisso


Para sincronizar a transmisso de dados, todos os eventos que ocorrem na pinos SDA deve ser sincronizado com o sinal de relgio gerado
no dispositivo mestre. Este sinal de clock gerado por um simples oscilador cuja frequncia depende da frequncia do oscilador do
microcontrolador, o valor inserido SSPADD e registro, bem como o modo SPI atual. A frequncia do sinal de relgio, tal como descrito no livro
depende do cristal de quartzo e o registo seleccionado SPADD. A frmula utilizada para calcular a frequncia de relgio :

Vamos faz-lo em mikroC ...

/ * Neste exemplo, o microcontrolador PIC est ligado ao EEPROM 24C02


por SCL e SDA pinos. O programa envia um byte de dados para tratar 2 da EEPROM.
Em seguida, o programa l os dados do modo de I2C EEPROM e envia-o para
PORTB porta para verificar se os dados foram gravados com xito. O endereo byte
EEPROM composto por 7 bits do endereo (1.010.001) e determina o bit
ler ou gravar dados (LSB - LSB) * /.
vazio main () {
ANSEL = ANSELH = PORTB = TRISB = 0; // Todos os pinos so digital. Os pinos
so sadas // porta PORTB.
I2C1_Init (100.000);
// inicializa relgio I2C desejado
// Frases Bloco Incio para escrever um byte EEPROM.
I2C1_Start ();
I2C1_Wr (0xA2);
I2C1_Wr (2);
I2C1_Wr (0xF0);
I2C1_Stop ();
Delay_100ms ();

//
//
//
//
//

inicia I2C sinal


Enviar byte para I2C (endereo do dispositivo + W)
Enviar byte (endereo de localizao EEPROM)
Envie os dados para escrever
sinal de paragem I2C

// A declarao seguinte endereo bloco 2 determinado que os dados so lidos


I2C1_Start ();
I2C1_Wr (0xA2);
I2C1_Wr (2);

// inicia I2C sinal


// Enviar byte para I2C (endereo do dispositivo + W)
// Enviar byte (dados de endereo)

// O endereo determinada e os dados esto prontos para ser lido


I2C1_Repeated_Start ();
I2C1_Wr (0xA3);
PORTB = I2C1_Rd (0u);
I2C1_Stop () ;

// Ele reconstri o sinal de partida I2C


// Enviar byte (endereo do dispositivo + R)
// Leia os dados (reconhecimento NO)
// sinal de paragem I2C

NOTAS TEIS ...


Quando o microcontrolador comunica com um perifrico, uma falha pode ocorrer na transmisso de dados por alguma razo. Neste caso,
aconselhvel verificar o status de certas partes que possam esclarecer o problema. Na prtica, o estado destes bits verificado atravs da
execuo de uma pequena sub-rotina aps a transmisso e recepo de cada byte (apenas no caso).
WCOL (SPCON, 7) - Se voc tentar gravar novos dados para o SSPBUF enquanto outra transmisso / recepo de dados est em
andamento, o bit WCOL est definido para um eo contedo do registo SSBUF permanece inalterado. Nenhuma escrita. Em seguida, o bit
WCOL devem ser apuradas pelo software.

BF (SSPSTAT, 0) - Ao transmitir dados, este bit definido como um ao escrever no SSPBUF e permanece definido para um at que o byte
em formato de srie movimento SSPRS log. No modo de recepo, este bit definido como um ao carregar dados ou um endereo para o
SSPBUF. Ele limpo depois de ler o SSPBUF.

SSPOV (SSPCON, 6) - Em modo de receber, este bit definido como um quando um novo byte no SSPSR via comunicao
serial, mesmo sem ler os dados anteriormente recebidos da SSPBUF.
SDA e pinos SCL - quando o mdulo SSP est habilitado, estes pinos so novamente sadas de drenagem aberto. Isto
significa que a resistncia deve ser ligada outra extremidade ligada ao plo positivo da fonte de alimentao.
Para estabelecer comunicao serial no modo I2C, voc deve fazer o seguinte:
Ajuste o mdulo e enviar o endereo:

Lugar no valor de registo SSPADD para definir a taxa de transmisso.


Coloque um pouco registo SSPSTAT SMP para desativar o controle de velocidade de rotao.
Digite o valor binrio 1000 para log pedaos SSPM3-SSPM0 SSPCON1 para selecionar o Modo Mestre.
Coloque um log SEN mordeu SSPCON2 (sequncia Home - START).
O bit SSPIF automaticamente definida para uma extremidade da seqncia de inicializao quando o mdulo est
pronto para a operao. Ele deve ser reposto.
Digite o endereo do escravo para o SSPBUF.
Quando um byte, o bit SSPIF (interrupo) enviado automaticamente coloca um pouco depois de receber a
reconhecer a partir do dispositivo escravo.

Transmitir os dados:

Digite os dados SSPBUF registro para enviar.


Quando um byte, o bit SSPIF (interrupo) enviado automaticamente coloca um pouco depois de receber a
reconhecer a partir do dispositivo escravo.
Pare de condio (STOP) deve comear a colocar um pouco PEN SSPCON log para informar o dispositivo Escravo
que a transmisso de dados atravs de.

Receber dados:

Coloque registro RSEN SSPCON2 um pouco a permitir a recepo.


O bit SSPIF com seu estado lgica indica recepo de dados. Depois de ler os dados SSPBUF, mordeu Secretaria
ACKEN SSPCON2 deve ser feita para permitir o envio de um pouco de reconhecimento.
Pare de condio (STOP) deve comear a colocar um pouco log SSPCON PEN para informar o dispositivo Escravo
que a transmisso termina.

Alm de ter um grande nmero de I / S utilizada para a comunicao com os perifricos, o PIC16F887 contm 14 entradas
analgicas.Devido a estes, o microcontrolador pode no s reconhecer se um pino conduzida baixa ou alta (ou 0 + 5V), que pode medir
com preciso a tenso e convert-lo em um valor numrico, que , em formato digital.

3.9 Mdulos analgicos


Mdulo do conversor A / D tem as seguintes caractersticas:

O conversor gera um 10-bit resultado binrio usando o mtodo de aproximaes sucessivas e armazena os resultados
de converso para os registradores ADC (ADRESL e ADRESH);
Ele tem 14 entradas analgicas separadas;
O conversor A / D converte um sinal de entrada analgico num nmero binrio de 10 bits;
A resoluo mnima ou qualidade de converso pode ser ajustado para diferentes necessidades, seleccionando Vref- e
tenses de referncia Vref +.

UM D
Embora primeira vista parece muito complicado de usar um conversor A / D, realmente muito simples. Na verdade, mais simples de
usar um timers A / D ou mdulos de comunicao serial.

A operao do conversor A / D est sob o controlo dos bits de quatro registos:

ADRESH topo do resultado do A / D de registo;


ADRESL registo com o resultado de a A / D;
Controle ADCON0 Register 0; e
Controle ADCON1 cadastre 1.

ADRESH e ADRESL registos

O resultado aps a converso de um valor analgico para digital um nmero de 10 bits que armazenada nos ADRESH e ADRESL
registos. H duas maneiras de lidar com isso: justificado esquerda e direita que simplifica muito o uso. O formato do resultado da
converso depende do bit do registo ADFM ADCON1. Se o conversor A / D no utilizado, estes registos podem ser utilizados como registos
de uso geral.

REQUISITOS DE AQUISIO A / D
Para o conversor A / D atinge a sua preciso especificada, necessrio fornecer algum tempo de inatividade entre a escolha de entrada
analgica especfica e medio propriamente dita. Desta vez o chamado "tempo de aquisio" e geralmente depende da impedncia de
fonte. Uma equao usada para calcular com preciso o tempo de aquisio, o valor mnimo de aproximadamente 20us. Portanto, para
executar com preciso uma converso no esquecer este detalhe.

OLHE PARA CONVERSO A / D


O tempo necessrio para realizar converso A / D que resulta em unidades de 1 bit definidas no TAD. necessrio ser, pelo menos, 1,6
uS. Para realizar uma converso de 10 bits completo requer um pouco mais de tempo do que o esperado, de 11 TAD. Como a freqncia
de clock e fonte / D converso so determinados pelo software, voc deve selecionar uma das combinaes disponveis de bits ADCS1 e
ADCS0 antes de comear a medir a tenso em uma das entradas analgicas. Estes bits so armazenados no registo ADCON0.
F ONT E DE RE L GI O AD C

ADCS1

ADCS0

FREQNCIA DISPOSITIVO (FOSC)


20 Mhz

8 MHz

4Mhz

1 Mhz

Fosc / 2

100 ns

250 ns

500 ns

2 nos

Fosc / 8

400 nS

1 uS

2 nos

8 uS

Fosc / 32

1.6 uS

4 US

8 uS

32 uS

Frc

2-6 uS

2-6 uS

2-6 uS

2-6 uS

Qualquer alterao da freqncia do relgio do microcontrolador afetar a freqncia de clock de converso A / D, o que pode prejudicar o
resultado da converso A / D. A tabela a seguir mostra as caractersticas do dispositivo de frequncias so mostradas. Os valores nas clulas
sombreadas esto fora da faixa recomendada.

COMO USAR O conversor A / D?


Para realizar uma converso A / D sem problemas e para evitar resultados inesperados, voc considerar o seguinte:

Ser que o A / D no diferenciar entre sinais digitais e analgicos. Para evitar erros de medio ou chip danos, pinos
devem ser configuradas como entradas analgicas antes de iniciar o processo de converso. Usa dois bits para esta
finalidade so armazenados nos registos TRIS e ANSEL (ANSELH);
Lendo o estado da porta com as entradas analgicas, o estado dos bits correspondentes so lidos lgico zero como
(0), independentemente do valor real da tenso no pino; e
De um modo geral, a medio da tenso no conversor baseia-se na comparao entre a tenso de entrada com escala
interna que tem 1.023 graus (2 10 - 1 = 1,023). O nvel mais baixo desta escala representa a tenso Vref-, enquanto o
mais alto grau refere-se tenso Vref +. A figura abaixo mostra as tenses de referncia selecionveis e valores
mximo e mnimo.

Registrar ADCON0

ADCS1, ADCS0 - A / D Converso Relgio Escolha pedaos (bits selecione relgio A / D) seleciona a freqncia de clock usado para
sincronizao interna do A / D. Tambm afeta o perodo de converso.
ADCS1
0

ADCS2
0

ASSISTA
Fosc / 2

Fosc / 8

Fosc / 32

RC *

* O sinal de relgio gerado pelo oscilador interno RC integrado no conversor.


CHS3-CHS0 - Analog Channel Select pedaos (bits seleo canal analgico) selecionar um alfinete ou um canal analgico para converso
A / D, que para medir a tenso:
CHS3

CHS2

CHS1

CHS0

CANAL

PINO

RA0 / AN0

RA1 / AN1

RA2 / AN2

RA3 / AN3

RA5 / AN4

RE0 / AN5

RE1 / AN6

RE2 / AN7

RB2 / AN8

RB3 / AN9

10

RB1 / AN10

11

RB4 / AN11

12

RB0 / AN12

13

RB5 / AN13

CVref

Vref = 0.6V

GO / DONE - A / D Converso Bit de estado (status converso bit A / D) determina o estado atual de converso:

1 - A converso A / D est em andamento.


0 - A converso A / D completa. O bit automaticamente limpo por hardware quando a converso A / D termina.

ADON - A / D On bit (bit de alimentao A / D) conversor permite A / D.

1 - Um conversor A / D activada.
0 - conversor A / D est desativado.

Vamos faz-lo em mikroC ...

/ * Este um exemplo de cdigo de leitura do valor analgico do canal 2 e exibi-lo


PORTB e PORTC em portos como 10-bit nmero binrio. * /
#include <built_in.h>
unsigned int adc_rd;
vazio main () {
ANSEL = 0x04;
TRISA = 0xFF;
ANSELH = 0;
TRISC = 0x3F;
TRISB = 0;

//
//
//
//
//

Definir AN2 pin como analgica


PORTA est configurado como entrada
defina o outro pino AN como E / S digitais
Pines RC7 e RC6 so definidas como sadas
PORTB configurado como uma sada

fazer {
temp_res = ADC_Read (2); // Obter o resultado de AD converso de 10 bits
PORTB = temp_res;
// Envie as tarifas mais 8 bits para PORTB
PORTC = temp_res >> 2;
// Envie os 2 bits mais significativos RC7, RC6
} enquanto (1);
// Permanecer no circuito
}

Registo ADCON1

ADFM - A / D resultado Formato Select bit (formato pouco resultado de seleo do A / D)

1 - resultado da converso justificado direita. Os seis bits mais significativos do registo ADRESH no so utilizados.
0 - resultado da converso justificado esquerda. Os seis bits menos significativos do registo ADRESL no so
utilizados.

VCFG1 - Tenso de bit de referncia (ajuste de tenso de referncia bits) selecciona a fonte de tenso de referncia mais baixo do que
necessrio para a operao do conversor A / D.

1 - baixa tenso de referncia aplicada ao pino Vref0 - tenso de alimentao de energia Vss usado como uma fonte de baixa tenso de referncia.

VCFG0 - Tenso pouco Referncia (ajuste de tenso de referncia bit) seleciona pode ser necessria a fonte de alta tenso corridas de
referncia para a A / D.

1 - alta tenso de referncia aplicada ao pino Vref +.


0 - tenso de alimentao de energia Vdd usado como uma fonte de alta voltagem de referncia.

Para medir a tenso em um pino de entrada pelo A / D, voc deve fazer o seguinte:
Passo 1 - configurao da porta:

Escrever um lgico um (1) a um bit do registo de TRIS, resultando na configurao do pino apropriado para uma
entrada.
Escrevendo uma lgica 1 (um) a um bit do registo ANSEL, resultando na configurao do pino apropriado para uma
entrada analgica.

Passo 2 - Configurao do conversor A / D:

Tenso de referncia definido no registo ADCON1.


Selecione um sinal de relgio do A / D no registo ADCON0.
Escolha um dos canais de entrada do Registro CH0-CH13 ADCON0.
Selecione o formato de dados atravs da ADFM ADCON1 registro.
Ativar o A / D para colocar um pouco ADON do registo ADCON0.

Passo 3 - Definir a interrupo (opcional):

Redefinir o bit ADIF.


Coloque um a ADIE, PEIE e bits GIE.

Passo 4 - decorrido o tempo de aquisio Timeout (aproximadamente 20US).


Passo 5 - Comece colocando uma converso a GO / DONE pouco da admi- ADCON0 Reg.
Passo 6 - Aguarde at que a converso A / D est completa.

Voc precisa verificar o ciclo do programa se o GO / DONE bit zero ou esperar uma interrupo (deve ser
previamente habilitado).

Passo 7 - Ler os resultados de A / D:

ADRESH e ADRESL ler os registros.

Comparador Analgico
Alm do A / D, um outro mdulo, que at recentemente tem sido incorpodo apenas em circuitos integrados pertencentes ao chamado
"componente analgico". Devido ao facto de que no h quase nenhum dispositivo automtico complexo que em algumas formas destes
circuitos no usar dois comparadores de alta qualidade, juntamente com os componentes adicionais so integrados no microcontrolador e
ligado aos seus pinos.
Como uma obra de comparao? Basicamente, o comparador analgico um amplificador que compara a magnitude das tenses nas duas
entradas. Ele tem duas entradas e uma sada. Dependendo da tenso de entrada for mais elevada (valor analgico), um lgico zero (0) ou
um lgico um (1) (valores digitais) ser emitido.

Quando a tenso analgica Vin - maior do que a tenso analgica + Vin, a sada do comparador um baixo nvel
digital.
Quando a tenso analgica + Vin maior do que a tenso Vin analgico, a sada do comparador um elevado nvel
digital.

O microcontrolador PIC16F887 tem dois desses comparadores de tenso cujas entradas esto ligadas aos pinos I / S RA0-RA3, enquanto as
sadas esto ligados ao pino RA4 e RA5. H tambm uma fonte de tenso de referncia interna no prprio chip, que discutiremos mais
tarde.
Estes dois circuitos so controlados pelos bits armazenados nos seguintes registos:

CM1CON0 est no controle do comparador C1;


CM2CON0 est no controle do comparador C2;
CM2CON1 est no controle do comparador C2;

Tenso interna REFERNCIA SOURCE


Uma das duas voltagens analgicas existentes nas entradas de comparao geralmente estvel e imutvel. Ele chamado de 'tenso de
referncia' (Vref). Para gerar isso, voc pode usar tanto uma tenso externa como uma fonte de tenso interna especial. A voltagem de
referncia Vref derivado depois de seleccionar uma fonte, atravs de uma rede de resistncias que consiste escada 16, formando um
divisor de tenso. A fonte de tenso selecionvel VRCON VRSS registo pouco.
Alm disso, a fraco da tenso fornecida pela rede de resistncias seleccionvel pelo VR0-VR3 e usado como bits de tenso de
referncia. Veja a figura a seguir:

A voltagem de referncia do comparador tem dois intervalos com 16 diferentes nveis de tenso cada. A seleco da gama controlada pela
VRR registo pouco VRCON. A tenso de referncia selecionado CVref pode ser a sada para o pino RA2 / AN2 VROE se o bit definido para
um.
Embora a ideia principal era obter a tenso de referncia varivel para a operao dos mdulos analgicos, assim, um conversor simples A /
D obtida. Este conversor muito til em algumas situaes. A operao controlada registo VRCON.

Comparadores e INTERRUPO
Sempre que houver uma mudana de estado lgico na sada de um comparador, o bit sinalizador CMIF PIR registo definido como um.Esta
mudana tambm ir provocar uma interrupo, se os bits seguintes so definidos para um:

O registro CMIE PIE bit = 1;


O bit PEIE do registo INTCON = 1; e
O bit GIE do registo INTCON = 1.

Se uma interrupo activada, uma mudana na sada de um comparador quando o microcontrolador est no modo de suspenso, pode
fazer com que o microcontrolador para sair inactivo e, em seguida, executar no modo normal.

MODO DE FUNCIONAMENTO SLEEP (modo de suspenso)


Se ativado antes de entrar modo de suspenso, o comparador permanece ativa durante o modo de sono. Se o comparador no utilizado
para "acordar" o dispositivo, o consumo de energia pode ser reduzido no modo de repouso, desligando o comparador. Isso feito para
redefinir o bit de registro CxON CMxCON0.
Para o comparador de "acordar" o microcontrolador do modo de suspenso, mordeu Secretaria CxIE IE2 eo bit PEIE do registo INTCON
deve ser um. A instruo aps a instruo do sono sempre corre para fora do modo de espera. Se o bit GIE do registo INTCON definido
para um, o dispositivo ir executar a rotina de interrupo do servio.

Registro CM1CON0

Os bits desta registo est no controle do comparador C1. Ele afecta principalmente a configurao das entradas. Para explicar de forma mais
clara, veja a figura a seguir, em que os componentes directamente afectados pelos bits deste registo so mostradas apenas.

C1ON - Comparador C1 Ativar bit (bit permitindo o comparador C1) permite que o C1 comparador.

1 - Comparador C1 est habilitado.


0 - Comparador C1 est desativado.

C1OUT - C1 comparador de bits de sada (sada do comparador bit C1) a sada do comparador C1.
Se C1POL = 1 (sada do comparador invertido)

1 - C1Vin + tenso de entrada menor do que a tenso de entrada C1Vin-.


0 - + C1Vin tenso de entrada for mais elevada do que a tenso de entrada C1Vin-.

Se C1POL = 0 (sada do comparador invertido)

1 - C1Vin + tenso de entrada for mais elevada do que a tenso de entrada C1Vin-.
0 - + C1Vin tenso de entrada menor do que a tenso de entrada C1Vin-.

C1OE Comparador C1 habilitao de sada bit (bit de habilitao de sada do comparador C1)

1 - Comparador de sada est conectada ao pino C1OUT C1OUT *.


0 - sada do comparador usado internamente.

* Para ativar o bit C1OUT aparece no pino, duas condies devem ser atendidas: C1ON = 1 (comparador deve estar ligado) e os
correspondentes TRIS bit = 0 (pino deve ser configurado como uma sada).
C1POL - Comparador de sada C1 Polaridade Select bit (seleo de bits de sada de polaridade do comparador C1) o investimento do
Estado permite a sada do comparador C1.

1 - C1 sada do comparador invertido.


0 - Comparador de sada C1 no invertido.

C1R - Comparador C1 Referncia Select bit (bit fonte de tenso de referncia seleo do C1 comparador)

1 - C1Vin entrada no inversora + est ligada fonte de tenso de referncia C1Vref.


0 - + C1Vin no-inversora est conectada ao pino C1IN +.

C1CH1, C1CH0 - Comparador C1 Channel Select bit (seleo de canais pouco do C1 comparador)
C1CH1

C1CH0

C 1 V I N - E N T R AD A D O C O M PAR AD O R

C1Vin- entrada est conectada ao pino C12IN0-

C1Vin- entrada est conectada ao pino C12IN1-

C1Vin- entrada est conectada ao pino C12IN2-

C1Vin- entrada est conectada ao pino C12IN3-

Registro CM2CON0

Os bits desta registo est no controle do comparador C2. Semelhante ao caso anterior, a figura a seguir mostra um esquema simplificado do
circuito afetado pelos bits deste registo.

C2ON - Comparador C2 Ativar bit (bit permitindo o comparador C2) permite o comparador C2.

1 - Comparador C2 est habilitado.


0 - Comparador C2 est desativado.

C2OUT - C2 comparador de bits de sada (sada do comparador de bits C2) a sada do comparador C2.
Se C2POL = 1 (sada do comparador invertido)

1 - C2Vin + tenso de entrada menor do que a tenso de entrada C2Vin-.


0 - + C2Vin tenso de entrada for mais elevada do que a tenso de entrada C2Vin-.

Se C2POL = 0 (sada do comparador invertido)

1 - C2Vin + tenso de entrada for mais elevada do que a tenso de entrada C2Vin-.
0 - + C2Vin tenso de entrada menor do que a tenso de entrada C2Vin-.

C2OE - C2Output Comparador Habilitar bit (bit de habilitao de sada do comparador C2)

1 - Comparador de sada est conectada ao pino C2OUT C2OUT *.


0 - sada do comparador usado internamente.

* Para ativar o bit C2OUT aparece no pino, duas condies devem ser atendidas: C2ON = 1 (comparador deve estar ligado) e os
correspondentes TRIS bit = 0 (pino deve ser configurado como uma sada).
C2POL - Comparador de sada C2 Polaridade Select bit (seleo de bits de sada de polaridade do comparador C2) habilita o estado do
comparador C2 sada de investimento.

1 - C2 sada do comparador invertido.


0 - Comparador de sada C2 no invertido.

C2R - Comparador C2 Referncia Select bit (bit fonte de tenso de referncia seleo do comparador C2)

1 - C2Vin entrada no inversora + est ligada fonte de tenso de referncia C2Vref.


0 - + C2Vin no-inversora est conectada ao pino C2IN +.

C2CH1, C2CH0 C2 Comparador Channel Select bit (seleo de canais pouco do comparador C2)
C2CH1

C2CH0

C 2 V I N - E N T R AD A D O C O M PAR AD O R

C2Vin- entrada est conectada ao pino C12IN0-

C2Vin- entrada est conectada ao pino C12IN1-

C2Vin- entrada est conectada ao pino C12IN2-

C2Vin- entrada est conectada ao pino C12IN3-

Registro CM2CON1

MC1OUT Espelho Cpia do C1OUT bit uma cpia do bit C1OUT


MC2OUT Espelho Cpia do C2OUT bit uma cpia do bit C2OUT
Comparador C1 C1RSEL Referncia Select bit (bit fonte de tenso de referncia seleo do C1 comparador)

1 - CVref tenso seleccionvel utilizado na fonte de tenso de referncia C1Vref.


0 - tenso de 0,6 V de referncia fixa utilizada na fonte de tenso de referncia C1Vref.

C2RSEL - Comparador C2 Referncia Select bit (tenso de referncia da seleo fonte pouco do comparador C2)

1 - CVref tenso seleccionvel utilizado na fonte de tenso de referncia C2Vref.


0 - tenso de 0,6 V de referncia fixa utilizada na fonte de tenso de referncia C2Vref.

T1GSS - Timer1 Porto Source Select bit (bit porto seleo fonte Timer1)

1 - sinal de porta Timer1 usando pin T1G.


0 - Porto Timer1 usa sinal SYNCC2OUT.

C2SYNC - C2 bit sincronizao sada do comparador (bit de sada de sincronizao do comparador C2)

1 - sada do comparador C2 sincronizado com uma borda de subida do sinal de relgio Timer1
0 - sada do comparador um sinal assncrono.

Registro VRCON

Vren C1 comparador de tenso Referncia Habilitar bit (bit permite que o C1 referncia de tenso comparador de origem)

1 - referncia CVref fonte de tenso est ligado.


0 - tenso de referncia de energia CVref est desligado.

VROE Comparador C2 Voltagem de referncia Habilitar bit (bit permite a referncia de tenso comparador fonte C2)

1 - fonte de tenso de referncia est conectada ao pino CVref.


0 - tenso de referncia de potncia CVref no est conectado ao pino.

Bit CVref Faixa Seleo - VRR (bit Vref tenso de referncia seleo de intervalo)

1 - Fonte de tenso de referncia definido para produzir gama baixa tenso.


0 - Fonte de tenso de referncia definido para produzir gama alta tenso.

VRSS - Comparador Vref Faixa pouco seleo (tenso de referncia Vref seleo de intervalo bit do comparador)

1 - Tenso de referncia na faixa de Vref + para Vref-.


0 - referncia de tenso est na faixa de VDD para VSS. (Tenso de alimentao).

VR3 - VR0 CVref Valor Seleo (seleo de valor de tenso de referncia)


Se VRR = 1 (gama baixa)
A tenso de referncia calculado pela frmula: CVref = ([VR3: VR0] / 24) Vdd.
Se VRR = 0 (high-end)
A tenso de referncia calculada pelo frmula CVref = VDD / 4 + ([VR3: VR0] / 32) Vdd.

Passos para usar corretamente os comparadores integrados:


Passo 1 - Configurao do Mdulo:

Para selecionar o modo apropriado, voc deve definir os estados dos bits dos registros CM1CON0 e CM2CON0. A
interrupo deve ser desativado durante o modo de comutao.

Passo 2 - Definir uma fonte de tenso de referncia Vref interna (apenas se for usado). No cadastro VRCON voc obrigado a fazer o
seguinte:

Selecione uma das duas faixas de tenso usando o bit VRR.


Defina a tenso de referncia Vref atravs dos bits necessrios VR3 - VR0.
Coloque um pouco VROE se necessrio.
Ativar tenso de referncia Vref fonte para colocar um pouco Vren.

Frmula utilizada para calcular a tenso de referncia


VRR

(gama

baixa)

CVref = ([VR3: VR0] / 24) VLADDER


VRR

(high-end)

CVref = (VLADDER / 4) + ([VR3: VR0] VLADDER / 32)


Vladder = Vdd ou ([Vref +] - [Vref-]) ou Vref +
Passo 3 - Incio da operao:

Habilitar uma interrupo para o CIEM colocar um pouco (PIE registo), PEIE e GIE (INTCON).
Leia C1OUT e registro C2OUT CMCON pedaos.
Leia o bit de flag CMIF PIR registo. Depois de ser definido para um, este bit afastada pelo software.

Para sincronizar todos os processos que ocorrem dentro do microcontrolador, usam um sinal de relgio, enquanto gerando um sinal de
relgio, voc deve usar um oscilador. simples assim. O microcontrolador tem vrios osciladores capazes de operar em modos diferentes.E
aqui onde vem a parte interessante ...

3,10 relgio oscilador


Como mostrado na figura, o sinal de relgio gerado por um dos dois osciladores integrados.

Um oscilador externo instalado fora do microcontrolador e ligado ao OSC1 e OSC2 pinos. chamado "externo" porque os componentes
externos usados para gerar um sinal de relgio e de estabilizao de frequncia. Estes so: cristal de quartzo, o circuito ressonador cermico
ou resistor - capacitor. O modo de oscilador selecionado por bits, enviados durante a programao, chamado palavra de configurao.

O oscilador interno consiste de dois osciladores internos separados:


O HFINTOSC um oscilador interno de alta freqncia calibrado em 8MHz. O microcontrolador pode utilizar um sinal de relgio gerado a
esta frequncia ou depois de ter sido dividida na prescaler.
O LFINTOSC um oscilador de baixa freqncia interna calibrado para 31 kHz. Seus impulsos de relgio so utilizados para a operao dos
temporizadores e de vigilncia de energia pode tambm ser utilizado como fonte de sinal de relgio para o funcionamento de todo o
microcontrolador.
Bit Sistema Clock Select (sistema de seleco relgio bit - SCS) do registo OSCCON determina se um relgio microcontrolador fonte de sinal
interno ou externo.

Registrar OSCCON
O registo OSCCON regem as opes de microcontroladores e seleo de freqncia. Ele contm os seguintes bits: bits de seleo de
frequncia (IRCF2, IRCF1, IRCF0), bits de status de freqncia (HTS, LTS), relgio do sistema bits de controle (OSTA, SCS).

IRCF2-0 -. Oscilador interno Seleo de Freqncia pedaos (selecione frequncia do oscilador interno bits). O valor de cruzamento
depende da combinao desses trs bits. A frequncia de relgio do oscilador interno determinada da mesma maneira.
IRCF2

IRCF1

IRCF0

FREQNCIA

OSC.

8 MHz

HFINTOSC

4 MHz

HFINTOSC

2 MHz

HFINTOSC

1MHz

HFINTOSC

500 kHz

HFINTOSC

250 kHz

HFINTOSC

125 kHz

HFINTOSC

31 kHz

LFINTOSC

USTOS - oscilador Start-up Bit de estado Time-out (bit temporizador de status on) indica qual fonte de clock est atualmente em uso.
um pouco s de leitura.

1 - o oscilador de relgio externo usado.


0 - Use um do oscilador relgio interno (HFINTOSC ou LFINTOSC).

HTS - HFINTOSC Bit de estado (8 MHz - 125 kHz) (Bit de estado HFINTOSC) indica se o oscilador interno de alta frequncia opera de
maneira estvel.

1 - HFINTOSC estvel.
0 - HFINTOSC no estvel.

LTS - LFINTOSC pouco estvel (31 kHz) (LFINTOSC bit de estado) indica se o oscilador de baixa freqncia opera de maneira estvel.

1 - LFINTOSC estvel.
0 - LFINTOSC no estvel.

SCS - Bit de seleco do relgio do sistema (seleco do relgio do sistema bits) determina qual o oscilador usado como uma fonte de
relgio.

1 - oscilador interno utilizado como o relgio do sistema.


0
oscilador
externo

usado
como
o
relgio
do
sistema.
O modo do oscilador definido pelos bits, chamado definies do Word , escritos na memria do microcontrolador,
durante a programao.

MODOS relgio externo


O oscilador externo pode ser configurado para funcionar num de vrios modos, que permite operar a velocidades diferentes e usar
componentes diferentes para estabilizar a frequncia. O modo de operao selecionado durante o processo de escrever um programa para
o microcontrolador. Primeiro de tudo, voc precisa ativar o programa em um PC para ser usado para programar o microcontrolador.Neste
caso, o programa PICflash. Clique no oscilador caixa e escolha um da lista drop-down. Os bits apropriados devem ser definidos para um
automaticamente como parte de vrios bytes, chamados de definies do Word.
Durante o processo de programao do microcontrolador, os bytes da palavra de configurao escrito na memria ROM do
microcontrolador e armazenadas em registos especiais no esto disponveis para o utilizador. Com base nestes pedaos, o
microcontrolador "sabe" o que fazer, mesmo que isso no seja explicitamente afirmado no programa.

Modo selecionado depois de escrever e compilar um programa

MODO oscilador externo CE


Modo de relgio externo (EC - relgio externo) um oscilador externo usado como uma fonte de sinal de relgio. A frequncia mxima de
relgio limitado a 20 MHz.

As vantagens do funcionamento do oscilador externo no modo CE so:

A fonte independente de relgio externo est ligado ao OSC1 pino de entrada. O pino OSC2 est disponvel como pin
I / S de uso geral;
possvel sincronizar o microcontrolador com os outros elementos incorporados no dispositivo;

Neste modo, o microcontrolador posto a trabalhar imediatamente aps a iluminao. No necessrio esperar para
a estabilizao de frequncia.
Para desativar temporariamente o relgio externo, o funcionamento do dispositivo pra, deixando todos os dados
intactos. Depois de reiniciar o relgio externo, o dispositivo continua a operar como se nada tivesse acontecido.

MODO oscilador externo LP, XT ou HS

Os modos de LP, XT e SH um oscilador externo usado como uma fonte de relgio, cuja frequncia determinada por um cristal de quartzo
ou ressonadores cermicos ligados aos OSC1 e OSC2 pinos. Dependendo das caractersticas dos componentes usados, selecione uma das
seguintes maneiras:

Modo LP - (Low Power) usado para o cristal de quartzo de baixa frequncia nica. Este modo destina-se a trabalhar
com cristais 32,768 kHz normalmente incorporados nos relgios de cristal. fcil de reconhecer pelo seu pequeno
tamanho e forma cilndrica. Usando este modo de consumo de energia menor do que em outros modos.
Modo XT usado para cristais de quartzo freqncias intermedirias at 8 MHz. O consumo atual mdia se
comparado a outros modos.
Modo HS - (alta velocidade) usado para cristais de clock maior freqncia de 8 MHz Quando utilizar este modo o
consumo de corrente maior do que em outros modos ..

MODO ressonadores de cermica XT OU EM HS


Ressonadores cermicos so semelhantes aos cristais de quartzo de acordo com as suas caractersticas, que esto ligados da mesma
maneira. Ao contrrio de cristais de quartzo, eles so mais baratos e osciladores que os utilizam so de qualidade inferior. Eles so usados
para frequncias de relgio entre 100 kHz e 20 MHz.

Modos de oscilador externo RC e WICR


A utilizao dos elementos para estabilizar a frequncia certamente tem muitas vantagens, mas, por vezes, no realmente necessrio.Na
maioria dos casos o oscilador pode operar em freqncias que no so definidas com preciso, de modo que seria um desperdcio de
dinheiro incorporar tais elementos. A soluo mais simples e mais barato em tais situaes a utilizao de uma resistncia e um
condensador para o funcionamento do oscilador. Existem dois modos:

Modo RC. Quando o oscilador externo est configurada para operar em modo de RC, o pino de OSC1 deve ser ligado ao
circuito de RC, como mostrado na figura da direita. O sinal a partir da frequncia do oscilador RC dividido por 4 est disponvel
no pino OSC2. Este sinal pode ser utilizado para calibrao, ou para outros fins de sincronizao.

WICR modo. De modo semelhante, o circuito de RC est ligado ao pino OSC1.Desta vez, o pino OSC2 est disponvel para
ser utilizado como pino de I / S uso geral.
Em

ambos

os

casos

recomendado

uso

de

componentes,

como

mostrado

na

figura.

A frequncia do oscilador este calculado usando a frmula f = 1 / T de acordo com o qual:

f = frequncia [Hz];
T = R * C = constante de tempo [s];
R = resistncia eltrica []; e
C = capacitncia condensador [F].

MODOS DE relgio interno


O circuito oscilador interno consiste de dois osciladores separadas que podem ser selecionados como a fonte de clock para o
microcontrolador:
O oscilador HFINTOSC calibrado na fbrica e opera em 8 MHz. A freqncia deste oscilador pode ser configurado pelo usurio atravs de
bits do registo OSCTUNE software usando.
O oscilador LFINTOSC calibrado na fbrica e opera a 31kHz.
Semelhante ao oscilador externo, a lata interna tambm funcionar em vrios modos. O modo de operao selecionado da mesma maneira
como o oscilador externo - usando bits que formam a palavra de configurao . Em outras palavras, tudo o que realizado dentro do
software PC antes de escrever um programa no microcontrolador.

Oscilador

interno

INTOSC

EM

MODO

Neste modo, o pino OSC1 est disponvel para ser utilizado como pino de I / S uso geral. Sinal de frequncia do oscilador
interno dividido por 4 est disponvel no pino OSC2.

INTOSCIO

oscilador

interno

Neste modo, os dois pinos esto disponveis como pin I / S de propsito geral.

NO

MODO

AJUSTE oscilador interno


O oscilador interno que consiste em dois circuitos separados:

1. A alta freqncia HFINTOSC oscilador interno est ligado ao ps-scaler (divisor de frequncia). calibrado de fbrica e opera em 8
MHz. Ao utilizar o ps-scaler, este oscilador pode produzir um sinal de relgio de um dos sete freqncias. Seleo de freqncia realizada
dentro do software usando o pino IRCF2 e registro OSCCON IRCF0 IRCF1.
O HFINTOSC est habilitado selecionando uma das sete frequncias (entre 8 MHz e 125 kHz) e colocar um pouco da fonte de relgio do
sistema (SCS) do registo OSCCON. Como se mostra na figura abaixo, todo o procedimento realizado atravs de bits do registador de
OSCCON.

2. A baixa LFINTOSC oscilador de frequncia no calibrado de fbrica e opera em 31 kHz. Ele habilitado para selecionar a freqncia
(bits do registo OSCCON) e colocar um pouco SCS do mesmo registo.

COMO MUDAR automtico da velocidade do RELGIO (TWO-velocidade de relgio START-UP MODE)


Automtico da velocidade do modo de relgio usado para reduzir o consumo de energia quando o microcontrolador opera em modo de
suspenso. O que isso tudo?
Quando configurado para LP, XT ou modo HS, o oscilador externo est desligado quando entrar em modo de suspenso para reduzir o
consumo total de corrente do dispositivo. Quando estiverem reunidas as condies de "despertar", o microcontrolador no colocada a
trabalhar imediatamente porque tem que esperar para a freqncia de clock estabilizado. Este tempo de inatividade dura exatamente 1.024
pulsos, aps o microcontrolador continua com a execuo do programa. O fato que a execuo de algumas instrues pouco antes do
microcontrolador retorna ao modo de espera.
Isso significa que a maior parte do tempo, bem como a maioria das actuais baterias foi perdida em vo. O caso resolvido usando o
oscilador interno para executar o programa durante o perodo de 1024 pulsos. Assim que a frequncia do oscilador externo estvel, ele
retorna automaticamente ao "papel de liderana". Todo o procedimento ativado definindo palavra de configurao um pouco. Para
programar o microcontrolador, necessrio selecionar a opo Int-Ext alternncia (comutao interna / externa) software.

Monitor Falha de detectar uma fonte de clock (FALHAS MONITOR relgio)


Como o prprio nome sugere, o monitor para detectar uma falha da fonte de relgio (prova de falhas Relgio Monitor - FSCM) monitora a
operao externa e permite que o microcontrolador para continuar a execuo do programa, se o oscilador falhar por algum motivo. Neste
caso, a funo leva o seu oscilador interno.

O monitor detecta uma falha para comparar as fontes de relgio interno e externo. Se pulsos oscilador externo 2mS demorar mais tempo a
chegar, a fonte do relgio alterada automaticamente por interno. Assim, o oscilador interno continua a operar controlado por bits do registo
OSCCON. Se o bit de registro OSFIE PIE2 est definido, uma interrupo ocorrer.

O relgio interno ainda a fonte do relgio do sistema at que o dispositivo reiniciado com xito o oscilador externo novamente a fonte de
relgio do sistema. De um modo semelhante aos processos anteriores, este mdulo activado, alterando a palavra de configurao um
pouco antes do processo de programao, o chip iniciado. Desta vez, isso feito selecionando a opo prova de falhas Relgio Monitor.

Registro OSCTUNE
OSCTUNE alteraes de registro afetam a frequncia do oscilador HFINTOSC, mas no a frequncia LFINTOSC. No h nenhuma
indicao de que o desvio de frequncia tenha ocorrido durante o funcionamento do microcontrolador.

TUN4 -. Tun0 pedaos frequncia de sintonizao (bits para calibrar a freqncia). Ao combinar esses cinco bits, a frequncia do oscilador
de 8MHz reduzido ou aumentado. Deste modo, as frequncias obtidas por diviso no ps-escalador tambm mudam.
TUN4

TUN3

TUN2

TUN1

TUN0

FREQNCIA
Mxima

Calibrado

Baixo

A EEPROM um segmento de memria separado, que no pertence memria de programa (ROM), e no memria de dados
(RAM).Embora estas posies de memria no pode acess-los rapidamente e facilmente, o seu objectivo insubstituvel. Os dados
armazenados no EEMPROM so permanentemente salvos mesmo quando voc desligar a fonte de alimentao, e pode ser alterado a
qualquer momento. Por estas caractersticas nicas de cada byte de EEPROM considerado valioso.

3.11 EEPROM
O microcontrolador PIC16F887 tem 256 locais em EEPROM controlada pelos bits de os seguintes registos:

EECON1 (registro de controle);


EECON2 (registro de controle);
EEDAT (armazena dados prontos para leitura e escrita); e
EEADR (armazena o endereo da EEPROM, que acessado).

Alm disso, verifique EECON2 no um verdadeiro registro, no existe fisicamente no chip. Ele usado somente durante a gravao de
dados na memria.
Os EEDATH e EEADRH registros so usados para gravar e ler a EEPROM. Os dois tambm so usados durante a escrita e leitura de
memria de programa (FLASH).
Considerando essa rea de risco ( claro que voc no quer que o microcontrolador apagar o seu prprio programa por acaso), no vamos
discutir aqui, no entanto, notificar devem ficar atentos.

EECON1 registo

EEPGD - Programa / Dados EEPROM Select bit (seleo de memria bit)

1 - Acesso memria de programa em Flash.


0 - Acesso memria EEPROM de dados.

WRERR - bit Bandeira EEPROM erro (bit de erro de escrita)

1 - um erro de gravao ocorre prematuramente e ocorreu um erro.


0 - foi concluda a operao de gravao.

Wren - EEPROM Faa Habilitar bit (bit escrever ativar)

1 - Escrever dados para a EEPROM habilitado.


0 - Escreve dados em EEPROM desativado.

WR - Escrever bit Controle (controle de escrita bit)

1 - iniciou uma operao de gravao de dados no EEPROM.


0 - foi concluda uma operao de gravao de dados em EEPROM.

RD - bit Controle de leitura (leitura pouco controle)

1 - Iniciar uma leitura da EEPROM.


0 - Leia EEPROM desativado.

Leitura de memria EEPROM


Para ler dados do EEMPROM memria, siga estes passos:

Passo 1 : Faa o endereo (00h - FFh) no registro EEADR.


Passo 2 : Escolha um bloco de memria EEPROM para redefinir o bit EEPGD registo EECON1.
Passo 3 : Coloque uma RD do mesmo log pouco para ler o contedo da cidade.
Passo 4 : Os dados so armazenados no registo EEDAT e est pronto para uso.

O exemplo a seguir ilustra o procedimento acima ao escrever um programa em linguagem assembly:

BSF STATUS, RP1


;
BCF STATUS, RP0
; Access Bank 2
MOVF ENDEREO, W
; Mover em direo a W registar
MOVWF EEADR
; Faa endereo
BSF STATUS, RP0
; Access Bank 3
EECON1 BCF, EEPGD ; Selecione o EEPROM
EECON1 BSF, RD
; Ler dados
BCF STATUS, RP0
; Access Bank 2
MOVF EEDATA, W
; Os dados so armazenados no registo W
A seqncia de programa mesmo escrito em C semelhante ao seguinte:

W = EEPROM_Read (ADDRESS);
As vantagens de usar a linguagem C tornaram-se mais bvio, voc no acha?

Escrita na memria EEPROM


Antes de escrever dados para a EEPROM necessrio escrever o endereo no registro e dados EESADR no registro EESAT. Foi apenas
seguir uma sequncia especial para iniciar gravao para cada byte. Durante o processo de escrita as interrupes devem ser desativados.
O exemplo abaixo mostra o procedimento acima ao escrever um programa em linguagem assembly:

BSF STATUS, RP1


BSF STATUS, RP0
BTFSC EECON, WR1
; Aguarde at que a gravao anterior concluda
GOTO $ -1;
Situao A BCF, RP0
; Banco 2
ENDEREO MOVF, W
; Mova-se para W
MOVWF EEADR
; Escreva o endereo
MOVF DADOS, W
; Mover dados W
MOVWF EEDATA
; Gravao de dados
STATUS BSF, RP0
; Banco 3
EECON1 BCF, EEPGD ; Selecione o EEPROM
EECON1 BSF, carria
; Escrevendo na EEPROM habilitado
INCON BCF, GIE
; Todas as interrupes desativado
MOVLW 55h
MOVWF EECON2
MOVLW AAh
MOVWF EECON2
BSF EECON1, WR
BSF INTCON, GIE
; Interrupes habilitadas
BCF EECON1, carria
; Escrevendo na EEPROM deficientes
A seqncia de programa mesmo escrito em C semelhante ao seguinte:

W = EEPROM_Write (ADDRESS, W);


Escusado ser dizer que qualquer coisa.
Vamos faz-lo em mikroC ...

// O exemplo mostra como usar a biblioteca EEPROM em mikroC PRO para PIC.
caractere ii; // varivel utilizada no circuito ii

vazio main () {
ANSEL = 0;
// Definir o pino como uma E / S digitais
ANSELH = 0;
PORTB = 0;
PORTC = 0;
PORTD = 0;
TRISB = 0;
TRISC = 0;
TRISD = 0;
para (i = 0; ii <32; ii ++)
// preencher o buffer com os dados
EEPROM_Write (0x80 + ii, ii);
// Escreve os dados no endereo 0x80 + ii
EEPROM_Write (0x02,0xAA);
EEPROM_Write (0x50,0x55);
// Os EEMPROM
delay_ms (1000);
PORTB = 0xFF;
PORTC = 0xFF;
Delay_ms (1000);
PORTB = 0x00;
PORTC = 0x00;
Delay_ms (1000);
PORTB = EEPROM_Read (0x02);
// Vista PorB na porta
PORTC = EEPROM_Read (0x50);

// Escrever uma entrada no endereo 2 EEMPROM


// Escrever uma entrada no endereo 0x50
// diodos em portos PortB e PORTC
// para indicar o incio da leitura

// Leia endereo EEPROM de dados 2 e


// Leia EEPROM dados de endereo e 0x50

// Vista na porta PORC


Delay_ms (1000);
para (i = 0; ii <32; ii ++) {
// Leia o bloco de 32 bytes do endereo
PORTD = EEPROM_Read (ii + 0x80); // 0x80 e exibi-lo na porta PORTD
Delay_ms (250);
}
}
primeira vista, basta ligar uma fonte de energia para o funcionamento de um microcontrolador. primeira vista, basta desligar a fonte de
alimentao para par-lo. S primeira vista. Na verdade, o incio eo fim da operao so as fases crticas de um sinal especial chamado
RESET responsvel.

3.12 REINICIAR! Blackout, escurecimento parcial ou rudos?


Quando uma redefinio de fazer com que o microcontrolador pra de funcionar imediatamente e excluir seus registros. Um sinal de reset
pode ser gerado externamente a qualquer momento (baixo nvel lgico no pino MCLR). Se necessrio, um sinal pode tambm ser gerado
pela lgica de controlo interno. Quando voc ligar uma fonte de alimentao sempre um reincio ocorre. Para muitos eventos de transio
que ocorrem quando um interruptor de alimentao (pisca e pisca de contatos eltricos em switches, lenta subida de tenso, sinal de psgraduao estabilizao frequncia do relgio etc.) necessrio proporcionar algum tempo de inatividade antes o microcontrolador no pode
operar. Dois temporizadores PWRT interna e OST so responsveis por isso. O PWRT pode ser ativado / desativado durante o processo de
escrever um programa. Vamos ver como tudo funciona.

Quando a voltagem da fonte de alimentao atinge entre 1,2 e 1.7V, um circuito chamado start timer (temporizador power-up)
mantm o microcontrolador reiniciado por cerca de 72mS. Assim que o tempo expirar, outro timer ON temporizador chamado
de oscilador (Oscillator start-up timer) gera um outro sinal de reset para a durao de 1024 perodos oscilador de quartzo. Ao
expirar o tempo morto (rotulado Redefinir T na figura) e colocar o pino MCLR alta, todas as condies foram satisfeitas eo
microcontrolador comea a executar a primeira instruo no programa.
Para alm deste "controlada" reset que ocorre quando voc ligar uma fonte de alimentao, existem dois tipos de resets chamado Black-out
e Brown-out que podem ocorrer durante o funcionamento do microcontrolador, bem como desligar a fonte de energia.

BLACK-OUT REAJUSTE

Reiniciando apago ocorre quando uma fonte de alimentao desligado corretamente. O microcontrolador no tem tempo de
fazer nada imprevisvel porque a tenso cai rapidamente abaixo do seu valor mnimo.Em outras palavras, a luz se apaga, as
cortinas para baixo e o show acabou!

BROWN-OUT REAJUSTE

Quando a tenso da fonte de alimentao cai lentamente (um exemplo tpico a descarga da bateria, apesar de o
microcontrolador poderia experimentar uma diminuio muito mais rpido como um processo lento) componentes internos
gradualmente parar o seu funcionamento e assim chamada queda de energia ocorre de reset. Neste caso, antes de o
microcontrolador pra de funcionar completamente, h um perigo real de que os circuitos que operam em altas freqncias so
feitas funo de forma imprevisvel. A reposio brown-out pode causar alteraes fatais no programa como ele armazenado
na memria flash on-chip.

O rudo eltrico

um tipo especial de redefinio Brownout acontece em um ambiente industrial, quando a tenso de alimentao "pisca" por
um momento e cair abaixo do valor mnimo. Embora seja curto, o rudo de linha de energia pode afectar negativamente a
operao do dispositivo.

PIN MCLR

Uma lgica zero (0) para o pino MCLR provoca uma reposio imediata e regular. aconselhvel para conect-la conforme
mostrado na figura direita. A funo de componentes adicionais manter uma lgica um "puro" durante a operao
normal.Se os seus valores so selecionados para fornecer um alto nvel lgico no pino aps o tempo morto redefinio T tenha
decorrido, o microcontrolador ser colocada a trabalhar imediatamente. Isto pode ser muito til quando voc precisa para
sincronizar o funcionamento do microcontrolador com componentes adicionais ou a operao de vrios microcontroladores.
Para evitar possveis erros na Brown-out Redefinir ocorre, o PIC 16F887 tem um "mecanismo de proteo" incorporada. um circuito
simples, eficaz, mas que reage sempre que a tenso cai abaixo 4V (se uma tenso de 5V usado) e mantm esse nvel de tenso de mais
de 100 microssegundos. Este circuito gera um sinal depois de tudo o microcontrolador opera como se tivesse sido ligada pela primeira vez.

Captulo 4: Exemplo
O objetivo deste captulo fornecer as informaes bsicas que voc precisa saber para ser capaz de usar microcontroladores com sucesso
na prtica. Portanto, este captulo no contm qualquer programa muito elaborado esquema tambm tem um dispositivo com solues
extraordinrias. Em contrapartida, os seguintes exemplos so a prova de que escrever um programa no um privilgio ou qualquer coisa
de talento, mas uma capacidade de "juntar as peas do quebra-cabea", para usar directivas. Tenha certeza de que a concepo e
desenvolvimento de dispositivos em geral, seguem o mtodo de "test-correto-repeat". Claro, muito mais vai mergulhar no assunto, o mais
complicado, uma vez que ambas as crianas arquitetos linha de frente, colocar as peas do quebra-cabea.

4.1 Conexo bsica


4.2 COMPONENTES ADICIONAIS
4.3 Exemplo 1 - Escrevendo cabealho, configurando pin I / S, utilizando a funo interruptor Delay e operador
4.4 Exemplo 2 - Usando instrues de montagem e LFINTOSC oscilador interno ...
4,5 EXEMPLO 3 - Timer0 como um contador, declarando novo, enumerao constantes de variveis, use rels ...
4.6 Exemplo 4 - Usar Timer0, timer1 e Timer2 temporizadores.
4.7 Exemplo 5 - Use o temporizador do co - Guardian
4.8 Exemplo 6 - Mdulo CCP1 como gerador de sinal PWM
4.9 Exemplo 7 - Use o A / D
4,10 Exemplo 8 - Use EEPROM
4,11 EXEMPLO 9 - dois dgitos LED contador, multiplexao
4,12 Exemplo 10 - Utilizar o visor LCD
4,13 EXEMPLO 11 - comunicao serial RS-232
4,14 Exemplo 12 - Medio atravs do sensor de temperatura DS1820. Usando o protocolo "1-wire '...
4,15 EXEMPLO 13 - Produo de som, biblioteca de som ...

4,16 EXEMPLO 14 - Utilizar o visor LCD grfica


4,17 EXEMPLO 15 - Use o touchpad ...

4.1 Conexo bsica


Um microcontrolador para funcionar correctamente, necessrio fornecer:

Alimentos;
Redefinio de sinal; e
Sinal de relgio.

Como mostrado na figura anterior, circuitos simples, mas nem sempre precisa ser assim. Se o dispositivo de destino usado para controlar
as faces ou mquinas para manter as funes vitais, tudo o que se torna muito mais complicada.

POWER
Embora o PIC16F887 seja capaz de operar em diferentes tenses de alimentao, no aconselhvel tentar a Lei de Murphy. O melhor o
de proporcionar uma tenso de 5V DC de alimentao. Este circuito, mostrado na pgina anterior, usa um regulador de trs terminais
LM7805 tenso positiva. um regulador integrado e de baixo custo que proporciona uma qualidade de estabilidade a alta voltagem e
corrente suficiente para permitir o correcto funcionamento do controlador e perifrico (aqui significa uma corrente suficiente 1A).

Sinal de reset
Para um microcontrolador para funcionar adequadamente uma lgica um (VCC) ir ser colocado sobre o pino de reinicializao. O boto de
presso, que liga o pino MCLR para GND no necessrio. No entanto, este boto quase sempre fornecida, uma vez que permite que o
microcontrolador para voltar ao modo de funcionamento normal no caso de algo correr mal. Ao clicar no boto RESET, pino MCLR tenso de
0V realizada, o microcontrolador redefinida e comea a execuo do programa desde o incio. Um 10k resistor usado para evitar um
curto-circuito terra pressionando esse boto.

SINAL CLOCK
Apesar de ter um oscilador built-in, o microcontrolador no pode operar sem componentes externos que estabilizam o seu funcionamento e
determinam a sua (velocidade de funcionamento do microcontrolador) freqncia. Dependendo dos elementos utilizados, bem como as
frequncias do oscilador pode operar em quatro modos diferentes:

LP - Low Power cristal;

XT - Crystal / ressonador;
HS - Crystal / ressonador de alta velocidade; e
RC - resistor / capacitor.

Porque so estes importante de qualquer maneira?Como quase impossvel construir um oscilador estvel operando a uma
vasta gama de frequncias, o microcontrolador tem que "sabe" que o cristal ligada, para ajustar o funcionamento dos seus
componentes internos. Esta a razo que todo o software usado para gravar um programa no chip que contm uma opo
para selecionar o oscilador.Ver figura da esquerda.

Cristal de quartzo
Ao utilizar o cristal de quartzo para estabilizar a frequncia, de um oscilador construdo opera a uma determinada frequncia, e no
afectado por variaes na tenso de alimentao e temperatura. Esta freqncia normalmente rtulo encapsulamento de vidro. Alm de
cristal, os condensadores C1 e C2 devem ser ligados, como mostrado no esquema seguinte. Sua capacidade no de grande
importncia.Portanto, os valores indicados no quadro a seguir devem ser tomados como uma recomendao do que regra estrita.

Ressonador cermico
Um ressonador de cermica mais barata e muito como uma funo de quartzo e modo de funcionamento. Portanto, os diagramas que
mostram ligao ao microcontrolador so idnticos. No entanto, os valores de condensadores diferem ligeiramente devido s diferentes
caractersticas elctricas. Consulte a tabela que se segue.

Estes ressoadores so normalmente ligados aos osciladores no deve ser necessrio fornecer frequncia extremamente preciso.

RC oscilador
Se a frequncia de operao no importante, ento no necessria a utilizao de componentes caros e adicionais para a
estabilizao. Em vez disso, simplesmente usar uma simples rede de RC, como mostrado na figura a seguir. Como este usado apenas a
entrada do oscilador local, o sinal de relgio com a frequncia Fosc / 4 aparece no pino OSC2. Esta a frequncia operacional do
microcontrolador, ou a velocidade de execuo de instrues.

Oscilador externo
Se necessrio para sincronizar a operao de vrios microcontroladores ou se, por algum motivo, no possvel utilizar qualquer um dos
esquemas acima, um sinal de relgio pode ser gerado por um oscilador externo. Consulte a figura a seguir.

Apesar do facto de o microcontrolador um produto da tecnologia moderna, que no to til sem estarem ligados aos componentes
adicionais. Em outras palavras, a tenso conduziu aos pinos do microcontrolador intil se no utilizado para realizar algumas operaes,
tais como ligado / desligado, movimento, etc. ver

4.2 COMPONENTES ADICIONAIS


Esta parte trata componentes adicionais usados com freqncia na prtica, tais como resistores, transistores, LEDs, displays de LED,
monitores LCD e circuitos de comunicao RS-232.

Interruptores e botes PRESSO

Interruptores e botes de presso so dispositivos simples para fornecer a maneira mais simples para detectar a ocorrncia de tenso em
um pino de entrada do microcontrolador. No entanto, no to simples como isso ... por um salto de contacto. O salto de contacto um
problema comum com chaves mecnicas.

Ao tocar os contatos, um salto ocorre por inrcia e elasticidade. Portanto, a corrente elctrica rapidamente pulsadas em vez de ter uma
transio clara entre zero e a corrente mxima. Normalmente, isso ocorre devido vibrao, os declives suaves e sujeira entre contatos.Este
efeito no apreende normalmente usar esses componentes na vida cotidiana porque o salto acontece rpido demais para afetar a maioria
dos aparelhos eltricos. No entanto, podem surgir problemas em alguns circuitos lgicos que respondem rpido o suficiente para que no
compreendem os pulsos produzidos por tocar os contatos como um fluxo de dados. De qualquer forma, todo o processo no dura muito
tempo (alguns micro - ou milissegundos), mas o tempo suficiente para que voc possa detectar o microcontrolador. Ao usar boto de presso
apenas como uma fonte de sinal de balco, quase 100% dos casos ocorrem erros.
O problema pode ser resolvido facilmente atravs da ligao de um circuito RC simples para suprimir a alteraes rpidas de tenso.Como o
perodo de recuperao no definido, os valores dos componentes no so precisamente determinado. Na maioria dos casos voc deve
usar os valores mostrados na figura a seguir.

Se for necessria estabilidade completa, ento voc tem que tomar medidas radicais. A sada do circuito representado na figura abaixo (flipflop RS, tambm chamado flip flop RS), a mudana de estado lgico, depois de detectar o primeiro impulso produzido por um ressalto de
contacto. Esta soluo mais caro (interruptor SPDT), mas o problema est resolvido.

Para alm destas solues de hardware, h tambm uma soluo de software simples. Enquanto o Estado lgica de teste de um programa
de pino de entrada se detectar uma mudana, tentar novamente aps um certo atraso. Se o programa confirma a mudana, isto significa que
um boto interruptor / push mudou de posio. As vantagens desta soluo so bvias: livre, os efeitos do contacto de rejeio apagada e
pode ser aplicado aos contactos de uma qualidade mais baixa tambm.

RELAY
Um rel um interruptor eltrico que abre e fecha sob o controle de um outro circuito eletrnico. Ento ele est conectado aos pinos do
microcontrolador sada e usado para ligar / desligar os dispositivos de alta capacidade, tais como motores, transformadores, aquecedores,
lmpadas etc. Estes dispositivos so geralmente posicionados longe dos componentes sensveis no tabuleiro. Existem vrios tipos de rels,
mas todos eles funcionam da mesma maneira. Como a corrente flui atravs da bobina, o rel opera, por meio de um electromagneto, abrindo
e fechando uma ou mais conjunto de contactos. Semelhante a Optoacopladores nenhuma conexo galvnica (contato eltrico) entre os
circuitos de entrada e sada. Relays muitas vezes exigem muito maior tenso e maior corrente para comear a correr. H tambm rels
miniatura, que podem ser postas em prtica por uma baixa corrente obtidos diretamente a partir de um pino microcontrolador.

A figura abaixo mostra a soluo mais frequentemente utilizada.

Para evitar a ocorrncia de uma indutncia de alta tenso causada por uma sbita paragem do fluxo de corrente atravs da bobina, um diodo
de polarizao invertida ligado em paralelo com a bobina. O objectivo da presente diodo este pico de tenso de "corte".

Dodos LED
Voc provavelmente sabe tudo que voc precisa saber sobre LEDs, mas deve tambm pensar sobre os jovens ... Vamos ver, como destruir
um LED? Bem ... muito fcil.

Queimar rapidamente
Como qualquer outro diodo, os LEDs tm duas pontas - um nodo e um ctodo. Conecte um diodo corretamente fonte de alimentao e
emite luz sem qualquer problema. Vire o diodo de cabea para baixo e conect-lo com a mesma fonte de energia (mesmo por um
momento). Ele no emite luz - nunca mais!

Queimam lentamente
H um limite de corrente nominal, isto , limite de corrente especificada mxima para cada LED que no ser excedida. Se isso acontece, o
diodo ir emitir luz mais intensa, mas apenas por um curto perodo de tempo.

Sem dormir
Da mesma forma, tudo que voc tem a fazer escolher um resistor para limitar a corrente mostrado abaixo. Dependendo da tenso de
alimentao, os efeitos podem ser dramtica.

LED DISPLAY

Basicamente, um display LED nada mais do que alguns LEDs moldadas na mesma caixa de plstico.Existem vrios tipos de
monitores e alguns deles so compostas por vrias dezenas de diodos embutidas que podem exibir diferentes smbolos. No
entanto, a exposio mais comumente utilizado o display de 7 segmentos. constituda por oito LEDs. Os sete segmentos
de um dgito esto dispostos como um rectngulo para exibir os smbolos, enquanto o segmento adicional usada para o
propsito de visualizao pontos decimais. Para simplificar a conexo, anodos e catodos de todos os diodos so conectados
ao pino comum para que os espectadores tm nodo comum displays e ctodo comum respectivamente. Os segmentos so
marcadas com as letras A a G e DP, como mostrado na figura a seguir. Quando ligado, cada LED tratado separadamente, o
que significa que cada uma delas tem a sua prpria resistncia para limitar a corrente.
Aqui esto algumas coisas importantes que voc deve prestar ateno quando for comprar um display LED:

Como j mencionamos, dependendo se nodos ou ctodos esto ligados ao pino comum, monitores tm nodo e do
ctodo comum telespectadores comuns. Visto de fora, parece que no h nenhuma diferena entre estas exposies,
incentivado para ver qual ser usado antes da instalao.
Cada pino microcontrolador tem um limite de corrente mxima que pode receber ou dar. Portanto, se vrios monitores
esto ligados ao microcontrolador, aconselhvel utilizar os chamados LEDs de baixa potncia usando apenas 2mA
para operao.
Segmentos do visor so geralmente marcadas com letras de AAG, mas no h nenhuma regra que broches estrictaa a
exibio ser conectado. Por isso, muito importante verificar antes de comear a escrever um programa ou projeto de
um dispositivo.

Os monitores conectados ao microcontrolador geralmente ocupam um grande nmero de pinos de E / S valiosos, o que pode ser um
problema, especialmente quando voc precisa exibir os compostos nmeros com vrios dgitos. O problema torna-se ainda mais evidente se,
por exemplo, necessrio para exibir dois nmeros de seis dgitos (um clculo simples mostra que, neste caso, so necessrios 96 pinos de
sada). A soluo para este problema chamado de multiplexao.
Aqui est como ele tornou-se uma iluso de tica com base no princpio de funcionamento mesmo que uma cmera de filme. Um nico dgito
ativo em um tempo, mas voc tem a impresso de que todos os dgitos de um nmero so simultaneamente activo para alterar as
condies to rapidamente on / off.

Veja a figura acima. Primeiro, um byte que representa unidades por PORT2 porta microcontrolador e do transistor T1 ativado ao mesmo
tempo aplica. Em pouco tempo, o T1 transistor est desligado, um byte que representa dezenas aplica-se a porta PORT2 eo transistor T2
ativado. Este processo se repete ciclicamente em alta velocidade em todos os dgitos e transistores correspondentes.
A coisa decepcionante que o microcontrolador apenas uma espcie de miniatura de computador projetado para interpretar a linguagem
de zeros e uns, o que se torna aparente quando vendo qualquer dgito. Especificamente, o microcontrolador no sabe como so as unidades,
dezenas, centenas ou dez dgitos para o qual estamos acostumados. Por esta razo, cada nmero a ser exibida tem de ir atravs do
seguinte procedimento:
Em primeiro lugar, um nmero de vrios dgitos deve ser dividida em unidades, centenas etc. em uma subrotina especfica. Em seguida, cada
um destes dgitos deve ser armazenado nos bytes particulares. Os dgitos tornar reconhecvel ao executar 'mascaramento'. Em outras
palavras, o formato binrio de cada dgito substitudo por uma combinao diferente de bits atravs de uma sub-rotina simples. Por
exemplo, o dgito 8 (0000 1000) substitudo pelo nmero binrio 0111 1111 para ativar todos os LEDs que indicam o nmero 8. O nico
diodo permanecendo inativo aqui reservado para o ponto decimal.
Se uma porta microcontrolador ligado ao visor, de modo que o bit 0 ativa segmento "A", o bit 1 activa segmento de 'b', o bit 2 activa
segmento c etc, em seguida, a tabela abaixo mostra "mscara" para cada dgito.

DIGIT

VI SEGMENTOS BITdp

para

Alm dos dgitos de 0 a 9, existem alguns pontos -A, C, E, J, F, L, M, L, b, c, d, o, r, t - visualizvel por mascaramento.
Se forem utilizados os nodo exibe comuns, todos aqueles contidos na tabela acima deve ser substitudo com zeros e vice-versa. Alm
disso, os transistores PNP devem ser utilizados como controladores.

Optocouplers
Um acoplador ptico um dispositivo freqentemente usado para isolar eletricamente o atual microcontrolador ou tenso ambiente
potencialmente perigoso. Acopladores pticos geralmente tm uma, duas ou quatro fontes de luz (LEDs), a sua entrada, enquanto a sua
produo em comparao com os dodos, o mesmo nmero de elementos sensveis luz (foto-transistores, foto- tiristores, foto-triac). A
questo que um acoplador ptico utiliza um caminho de transmisso ptica curto para transmitir um sinal de entre os elementos do circuito
que so electricamente isolados. Este isolamento s faz sentido se os diodos e elementos foto-sensveis so alimentados
separadamente. Assim, o microcontrolador e componentes adicionais e caros so completamente protegido de alta tenso e rudos que so
a causa mais freqente de destruio, danos e funcionamento instvel de dispositivos eletrnicos na prtica. Os optocouplers mais utilizados
so aqueles com phototransistors em suas sadas. Nos optocouplers com base interna conectados a 6 pinos (h tambm Optoacopladores
sem ele), a base pode ficar desconectado.

A rede de P / C representado por uma linha a tracejado na figura acima indica uma ligao opcional para a base do transistor dentro do
acoplador ptico, o que reduz os efeitos de rudo, eliminando impulsos muito curtos.

TELA DE LCD
Este componente fabricado especificamente para uso com microcontroladores, o que significa que no pode ser activada por circuitos
integrados convencionais. Ele usado para exibir mensagens diferentes em um display de cristal lquido em miniatura. O modelo aqui
descrito o mais utilizado na prtica por seu baixo preo e grandes capacidades. Ele baseia-se na HD44780 (Hitachi) e integrado
microcontrolador pode exibir mensagens em duas linhas com 16 caracteres cada. Voc pode ver todas as letras do alfabeto, letras do
alfabeto grego, sinais de pontuao, smbolos matemticos, etc. Voc tambm pode exibir smbolos criados pelo usurio. Entre outras
caractersticas teis a transferncia automtica de mensagens (esquerda e direita), a aparncia do cursor, retroiluminao LED etc.

Display LCD Pines


Ao longo de um lado de uma pequena placa de circuito impresso de visor LCD so os pinos que permitem que ele seja ligado ao
microcontrolador. H 14 pinos no total marcados com nmeros (16 se nenhuma luz de fundo). Sua funo mostrado na tabela abaixo:
FUN O

NMERO

NOME

E S T AD O L G I C O

DESCRIO

Terra

Vss

0V

Alimentao

Vdd

+ 5V

Contrastar

Vee

0 - Vdd

RS

0
1

D0
D7
considerado
D0 - D7 dados considerados

R/W

0
1

Escreve
dados
(microcontrolador
para
LCD)
Ler dados (a partir de LCD para o microcontrolador)

0
1
1-0 Transio

Acesso
para
deficientes
ao
visor
LCD
Operao
normal
Dados / comandos que esto sendo transmitidos para

Controle Operacional

comandos

LCD

Dados / comandos

D0

0/1

Bit 0 LSB

D1

0/1

O bit 1

D2

0/1

Bit 2

10

D3

0/1

Bit 3

11

D4

0/1

Bit 4

12

D5

0/1

O bit 5

13

D6

0/1

Bit 6

14

D7

0/1

MSB bit 7

Display LCD
Um LCD pode exibir duas linhas de 16 caracteres cada. Cada personagem 5x8 ou 5x11 pixels. Este livro cobre um pixel display 5x8 que
usado na maioria das vezes.

O contraste do visor depende da tenso de alimentao e se as mensagens so exibidas em uma ou duas linhas. Portanto, a tenso varivel
0-VDD aplicada ao pino identificado Vee. Um potencimetro trimmer freqentemente utilizado para este fim. Alguns monitores LCD tm
built-in de luz de fundo (azul ou LEDs verdes). Quando utilizados durante o funcionamento, isto , devido a uma resistncia em srie ligado a
um pino para limitar a corrente (similar aos LEDs).

Se nenhum dos caracteres exibidos ou se todos os caracteres so obscurecidos quando ligar o monitor, a primeira coisa que voc deve fazer
verificar o potencimetro para ajustar o contraste. Trata-se de definir corretamente? O mesmo se aplica se o modo de funcionamento foi
alterado (gravao em uma ou duas linhas).

LCD Memria
O visor LCD tem trs blocos de memria:

DDRAM Display Data RAM (RAM dos dados de exibio);


CGRAM Gerador de Caracteres RAM (RAM gerador de caracteres); e
ROM Gerador de Caracteres CGROM (gerador de caracteres ROM)

Memria DDRAM

A memria de DDRAM usado para armazenar os caracteres a serem exibidos. Tem uma capacidade para armazenar 80 caracteres.Alguns
locais de memria esto diretamente ligados aos personagens na tela.
Tudo funciona muito simples: basta definir a exibio para incrementar automaticamente endereos (deslocamento para a direita) e definir o
endereo de partida para a mensagem a ser exibida (por exemplo, 00 hex).
Em seguida, todos os caracteres enviados pelas linhas D0-D7 devem ser exibidos no formato de mensagem para o qual estamos
acostumados - da esquerda para a direita. Neste caso, o visor comea com o primeiro campo de primeira linha, como o endereo de partida
00hex. Se mais de 16 caracteres so enviados, todos so salvos, mas apenas o primeiro 16 ser visvel. Para exibir os outros, voc deve
usar o comando shift. Virtualmente, parece como se o LCD para fora de uma janela, movendo-se da esquerda para a direita em locais de
memria com personagens diferentes. Na verdade, esta a forma como o efeito de deslocar as mensagens na tela foi criado.

Se ativado ver o cursor vai aparecer no local atualmente abordadas. Em outras palavras, se um caractere aparece na posio do cursor, ele
ir se mover automaticamente para a prxima localizao endereada.
Este um tipo de memria RAM para que os dados podem ser escritos para ele e ler a partir dele, mas o seu contedo irremediavelmente
perdidos quando voc desliga a fonte de alimentao.

Memria CGROM
A memria CGROM contm um mapa padro de todos os caracteres que podem ser exibidos na tela. Cada personagem atribudo um local
de memria:

Endereos CGROM posies de memria correspondem aos caracteres ASCII. Se o programa est em execuo alcana o comando 'enviar
carter P porta', valor binrio 0101 0000 aparece no porto. Este valor o equivalente de caracteres ASCII P. Ao escrever este valor em um
LCD, o smbolo da cidade de CGROM 0101 0000 exibido. Em outras palavras, carter Pe exibido Isso se aplica a todas as letras do
alfabeto (maisculas e minsculas), mas no se aplica a nmeros.
Como mostrado no mapa acima, os endereos de todos os dgitos so deslocados por 48 em relao aos seus valores (o endereo 0 de 48
dgitos, um dgito endereo 49, dgito 2 endereo 50 etc.). Portanto, para exibir dgitos corretamente necessrio adicionar o nmero
decimal 48 para cada um antes de envi-los para um LCD.

O que o cdigo ASCII? Desde o seu surgimento at os dias atuais, os computadores tm sido capazes de reconhecer apenas nmeros,
no letras. Isto significa que todos os dados trocados com um perifrico de computador, reconhecidos como cartas por seres humanos
realmente esto em formato binrio (o teclado um bom exemplo). Em outras palavras, cada caractere corresponde a uma combinao
nica de zeros e uns. ASCII uma codificao de caracteres baseado no alfabeto Ingls. O ASCII especifica uma correspondncia entre
smbolos de caracteres padro e seus equivalentes numricos.

Memria CGRAM
Alm dos caracteres padro, o LCD pode exibir smbolos definidos pelo usurio. Isso pode ser qualquer smbolo de 5x8 pixels. RAM
chamado CGRAM 64 bytes permite que ele.
Registros de memria so de 8 bits, mas apenas 5 bits mais baixos so usados. A lgica de um (1) em cada registro representa uma mancha
escura, enquanto 8 locais agrupados representar um caractere. Isto mostrado na figura a seguir:

Os smbolos so geralmente definidas no incio do programa por simples zeros e uns escrita de memria CGRAM assim criar as formas
desejadas. Para visualizar apenas especificar o seu endereo. Preste ateno para a primeira coluna na CGROM mapa de caracteres. Ele
contm endereos de RAM, mas os smbolos que ns estamos falando aqui. Neste exemplo 'display 0' significa view 'sorriso', 'Display 1'
significa - ver "ncora" etc.

Comandos bsicos de exibio LCD


Todos os dados transmitidos para um visor LCD para as sadas D0-D7 ser interpretado como um comando ou de dados, dependendo do
estado lgico no pino RS:

RS = 1 - Os bits D0 - D7 so os endereos dos caracteres a serem exibidos. O processador LCD aborda um


personagem a partir do mapa de caracteres e exibida. O endereo DDRAM especifica o local onde voc est indo
para apresentar o personagem. Este endereo definido antes de transmitir o carter ou a direo do personagem
transmitida anteriormente automaticamente aumentado.
RS = 0 - Os bits D0 - D7 so comandos para ajustar o modo de exibio.

Uma lista de comandos reconhecidos pelo LCD mostrado na tabela seguinte:


COMANDO

RS

RW

D7

D6

D5

D4

D3

D2

D1

D0

RUNTIME

Remover o visor

1.64mS

Coloque o cursor no incio

1.64mS

Modo de entrada

I/D

40US

Ativar / desativar a exibio

40US

Mova o cursor / display

D/C

R/L

40US

Modo de operao

DL

40US

Defina o endereo CGRAM

CGRAM Endereo

Defina o endereo DDRAM

CGRAM Endereo

40US

Leia a bandeira "ocupado" (ocupado) (BF)

BF

CGRAM Endereo

Escreva no CGRAM ou DDRAM

D7

D6

D5

D4

D3

D2

D1

D0

40US

Leia o CGRAM ou DDRAM

D7

D6

D5

D4

D3

D2

D1

D0

40US

40US

I / D 1 = Incremento (por 1)
0 = Reduo (por 1) 0 = desvio esquerda

R / L 1 = tecla Shift direita

S 1 = Movendo o visor ligado


DL 1 = barramento de dados de 8 bits
Movendo o visor 0 = 0 = desativado barramento de dados de 4 bits
D 1 = Exibir em
N 1 = Exibir duas linhas
0 = 0 = exibio off exibio em uma linha
U 1 = cursor na
0 = 0 = deficientes Carter pontos Cursor 5x7

F 1 = 5x10 pontos de personagem

B = um cursor no piscar
D / C = 1 Movendo o visor
0 = piscando cursor off 0 = Mover o cursor
O QUE A bandeira ocupado (FLAG OCUPADO)?
Em comparao com o microcontrolador, o LCD um componente extremamente lento. Por esta razo, foi necessrio para proporcionar um
sinal, para executar um comando, o que indica que a tela estava pronto para receber os dados seguintes. Este sinal chamado bandeira
ocupado (bandeira ocupado) pode ser lido a partir da linha D7. O visor est pronto para receber novos dados quando a tenso sobre esta
linha 0V (BF = 0).

Conecte o monitor LCD


Dependendo do nmero de linhas so utilizadas para ligar um LCD para o microcontrolador, existem dois modos de LCD, de 8 bits e de 4
bits. O modo adequado est selecionado no incio da operao, em um processo chamado de "inicializao". Modo de LCD utiliza 8 bits D0D7 pinos para transmitir os dados, como explicado na pgina anterior. A principal finalidade do modo de 4 bits LCD salvar valioso pin I / S
do microcontrolador. Apenas 4 pedaos maiores (D4-D7) so usados para comunicao, enquanto outras podem ficar desconectado.Cada
dados so enviados para o visor LCD em dois passos - primeiro superiores 4 bits so enviados (normalmente por linhas D4 D7), e, em
seguida, os quatro bits menos significativos. Inicializao permite que o LCD se conectar e interpretar bits recebidos corretamente.

Raramente dados LCD (geralmente transmitidos a partir do microcontrolador para LCD) so lidos com tanta frequncia, voc pode salvar um
pino de I / S de sobra. simples, basta conectar o pino R / W para a terra. Esta "poupana" pin tem seu preo. As mensagens so
normalmente exibida, mas no ser possvel ler a bandeira ocupado, uma vez que no possvel ler os dados de exibio. Felizmente,
existe uma soluo simples. Aps o envio de um caractere ou comando importante para dar o LCD tempo suficiente para fazer sua lio de
casa. Devido ao facto de a execuo de um comando pode levar aproximadamente 1.64mS, o LCD leva 2mS mximos para desempenhar a
sua funo.

Inicializar o display LCD


Quando voc ligar a alimentao, o LCD ser reiniciado automaticamente. Isso leva cerca de 15ms. Depois disso, o LCD est pronta para
operao. Alm disso, o modo de operao definido por padro como segue:

1. Visor apagado.
2. Assim DL = 1 -

3. Mostrar

Cursor

barramento

on

de

off D =

dados

Exibir

bits N =

linha

off U =

cursor

LCD F =

para

fora B =

Carter

Cursor

po

piscar

4. Introduo de caracteres ID = 1 exibidos os endereos so automaticamente incrementado por uma S = Moven


exibio off
Normalmente, o reincio automtico realizado sem problemas. Na maioria dos casos, mas no sempre! Se por algum motivo a tenso de
alimentao no alcana seu valor mximo em 10mS, o monitor est definido para operar completamente imprevisvel. Se a tenso da
unidade incapaz de satisfazer as condies ou se necessrio prever uma operao completamente seguro, o processo de inicializao
ser aplicada. Inicializao, inter alia, o LCD novamente reiniciado, a operao normal para capacit-lo.
Existem dois algoritmos de inicializao. Que utilizado depende de se a ligao para o microcontrolador realizada atravs do bus de
dados de 4 ou 8 bits. Em ambos os casos, aps a inicializao est apenas especificam os comandos bsicos e, claro, apresentar as
mensagens.
Consulte a figura abaixo para o procedimento de inicializao por barramento de dados de 8 bits:

Este no um erro! Neste algoritmo, o mesmo valor transmitido trs vezes consecutivas.
O procedimento de inicializao por barramento de dados de 4 bits:

Vamos faz-lo em mikroC ...

/ * Em mikroC para PIC, basta digitar apenas uma funo para fazer todo o processo
Inicializao de LCD. Antes de chamar esta funo, declarar
Bocados LCD_D4-LCD_D7, LCD_RS e LCD_EN. * /
...
Lcd_Init (); // Inicializar o LCD
...

EXEMPLOS PRTICOS
O processo de criao de um novo projeto muito simples. Selecione Novo projeto do menu Projeto como mostrado na figura direita.

Uma janela ir gui-lo atravs do processo de criao de um novo projeto aparece. A janela de entrada do programa contm uma lista de
aes a serem tomadas para criar um novo projeto. Pressione Prximo .

O processo de criao de um novo projeto consiste em cinco etapas:

1. Selecione o tipo de programao de microcontroladores. Neste caso, o PIC16F887.


2. Selecione a freqncia de clock do microcontrolador. Neste caso, o valor definido de 8 MHz.
3. Selecione o nome eo caminho do projeto. Neste caso, o nome do projeto First_Project. Ele armazenado na pasta
Meus projetos. O nome do projeto atribudo automaticamente a .mcppi extenso. O arquivo de origem com o me
nome (First_Project .ch) ser criado no projeto.
4. Se o novo projeto consiste em vrios arquivos de origem, necessrio especificar e clique no boto Adicionar para in
los. Neste exemplo no h arquivos de origem adicionais.
5. Finalmente, precisamos confirmar todas as opes selecionadas. Clique em Concluir.
Depois de criar o projeto, um indicador branco em que para escrever o programa aparece. Veja a figura a seguir:

Uma vez criado o programa, necessrio compil-lo em um cdigo hexadecimal. Selecione no menu de opes para compilar o projeto :

Para criar um arquivo hex opo, selecione Build (Ctrl + F9) no menu Project ou clique no cone na barra de
ferramentas de construo do projeto.
Atravs da compilao todos os projetos (Shift + F9) todos os arquivos de projeto, as bibliotecas so compiladas (se o
cdigo fonte contm alguns deles) e os arquivos def para o microcontrolador utilizado.
A opo de construo + Programa (Ctrl + F11) importante porque permite que o mikroC PRO para PIC carregar
automaticamente o programa para o microcontrolador aps a compilao. O processo de programao realizada pelo
programador PICFlash.

Todos os erros encontrados durante a compilao aparecem na janela de mensagem. Se no houver erros no programa, o mikroC PRO para
PIC ir gerar os arquivos de sada correspondentes.

4.3 EXEMPLO 1
Faa cabea, colocou o pino I / S, utilizando a funo interruptor Delay e operador
O nico objectivo deste programa iluminar vrios LEDs na porta B. Use este exemplo para examinar como um programa real. A figura a
seguir mostra o esquema de ligaes, enquanto o programa est na pgina seguinte.

Quando voc liga a fonte de alimentao, a cada segundo, o LED na porta B emite luz, o que indica que o microcontrolador est conectado
corretamente e funcionando normalmente.
Este exemplo mostra como gravar um cabealho corretamente. O mesmo se aplica a todos os programas descritos neste livro. Para evitar a
repetio nos seguintes exemplos no vamos escrever o cabealho. Ele considerado como sendo o incio de cada programa, rotulada
"cabealho".

Para tornar este exemplo mais interessante, vamos permitir LEDs ligados ao PORTB porta piscante. Existem vrias maneiras de fazer isso:

1. Assim que o microcontrolador ligado, todos os LEDs emitem luz por um segundo. A funo Delay cuida do qu
programa. S necessrio ajustar o comprimento do tempo de atraso em milissegundos.
2. Depois de um segundo, o programa entra no lacete, e permanece l at que a varivel k inferior a 20. A variv
incrementado por 1 depois de cada iterao. Dentro do loop, o operador comutador monitora o estado lgico
PORTB. Se PORTB = 0xFF, o Estado investiu em 0x00 e vice-versa. Qualquer alterao desses estados lgicos faz t
os LEDs piscando. O ciclo de trabalho de 5: 1 (500ms: 100ms).
3. Ao sair do loop, o status da porta lgica muda POTRB (0xB 01010101) eo programa entra na infinita enquanto lo
permanece l at 1 = 1. O estado lgico porta PORTB invertido cada 200mS.

4.4 EXEMPLO 2
Usando instrues de montagem e LFINTOSC oscilador interno ...
Na verdade, esta uma continuao do exemplo anterior, mas lida com um problema um pouco mais complicado ... O objectivo era o de
fazer os LEDs PortB piscar lentamente. Isso pode ser feito atravs da introduo de um valor grande o suficiente para o parmetro de tempo
de atraso em funo do retardo. No entanto, existe uma maneira mais eficiente para executar o programa lentamente. Lembre-se que este
microcontrolador tem um oscilador LFINTOSC construdo operando a uma frequncia de 31kHz. Agora era hora de "dar uma chance".
O programa comea com o loop do-while e permanece l por 20 ciclos. Depois de dar a cada iterao, chega uma hora 100ms de atraso,
indicados por um nmero relativamente rpidas LEDs piscando no PORTB. Quando o programa sai deste ciclo, o microcontrolador comea a
usar o oscilador LFINTOSC como uma fonte de relgio. LEDs piscar lentamente enquanto o programa executa o mesmo loop do-while com
um tempo 10 vezes mais curto atraso.
A fim de tornar claras algumas situaes potencialmente perigosas, os bits de controle so ativados por instrues de
montagem.Simplificando, ao entrar ou sair de instrues um assembler no programa, o compilador no armazena dados em um banco de
RAM atualmente ativo, o que significa que nesta seo do programa, seleo de banco depende do registo SFR utilizado. Voltando seo

programa escrito em C, os bits RP0 e RP1 controlo devem restaurar o estado que tinham antes "assembler aventura". Neste programa, o
problema resolvido usando a saveBank varivel auxiliar, que salva o estado destes dois bits.

/ * Cabealho ********************************************* /
int k = 0;
carvo saveBank;
vazio main () {
ANSEL = 0;
ANSELH = 0;
PORTB = 0;
TRISB = 0;
fazer {
PORTB PORTB = ~;
delay_ms (100);
k ++;
}
enquanto (k <20);

// k Varivel int,
// varivel do tipo char saveBank
// Todos os pinos de I / S so configurados como digitais
// Tudo PortB pinos da porta esto definidos para 0
// pinos da porta esto configuradas como sadas PORTB
// reverter o estado lgico dos porta PORTB
// tempo de atraso de 100mS
// Aumento k 1
// loop at Ficar k <20

k = 0;
// k varivel Restart
saveBank = STATUS & 0b01100000; // Salva o estado do RP0 e RP1 pedaos
// (Bits 5 e 6 do registo STATUS)
asm {
// Incio do conjunto sequncia
bsf STATUS, RP0
// Seleciona o banco de memria que contm o
bcf STATUS, RP1
// OSCCON registo
BCF OSCCON, 6
// Select LFINTOSC o oscilador interno
bcf OSCCON 5
// freqncia 31KHz
OSCCON bcf, 4
BSF OSCCON, 0
// microcontrolador usa oscilador interno
}
// Fim da montagem da seqncia
Situao A & = 0b10011111;
Situao A | = saveBank;
fazer {
PORTB PORTB = ~;
delay_ms (10);
k ++;
}
enquanto (k <20);
}

// Bits RP0 e RP1 recuperar o estado original

// reverter o estado lgico dos porta PORTB


// Delay 10 ms
// Aumento k 1
// Permanecer no circuito at que k <20

4.5 Exemplo 3
Timer0 como um contador, declarando novo, enumerao constantes de variveis, use rels ...
Tal como para os exemplos anteriores, o programa do microcontrolador executada sem ser afectada, de qualquer forma pelo seu
ambiente. Na prtica, alguns dispositivos que funcionam deste modo (por exemplo, uma luz de non simples controlador). Os pinos de
entrada so tambm utilizados no presente exemplo. A figura a seguir mostra um diagrama, enquanto o programa est na pgina
seguinte. Tudo ainda muito simples. O temporizador Timer0 usado como um contador. A entrada do contador ligada a um boto de
presso, de modo que cada vez que o boto pressionado, o temporizador Timer0 tem um pulso.
Quando o nmero de pulsos corresponde ao nmero armazenado no registro de teste, uma lgica (5V) aparece na PORTD.3 pinos. Esta
tenso ativa um rel eletromecnico, de modo que este bit chamado de 'RELAY' no programa.

/ * Cabealho *********************************************** ***** /


vazio main () {
Char TEST = 5;
// TEST Constante = 5
enum sadas {RELAY = 3}; // RELAY constante = 3
ANSEL = 0;
ANSELH = 0;
PORTA = 0;
TRISA = 0xFF;
PORTD = 0;
TRISD = 0b11110111;

// Todos os pinos de I / S so configurados como digitais


//
//
//
//

Redefinir PORTA
Todos os pinos PORTA so configurados como entradas
redefinir a porta PORTD
RD3 pino configurado como uma sada, enquanto outros

// Esto configurados como entradas


OPTION_REG.F5 = 1;
// contador TMR0 receba pulsos atravs do pino RA4
OPTION_REG.F3 = 1;
// valor de prescaler 1: 1
TMR0 = 0;
fazer {
se (TMR0 == TEST)
constante TEST //?
(PORTD.RELAY = 1);
}
enquanto (1);
}

// repor o temporizador / contador TMR0


// coincidir com o nmero no cronmetro com
// nmeros jogo. RD3 colocar um pouco (sada de rel)
// Ficar no loop infinito

Apenas RELAY constante enumerao usada neste exemplo. atribudo um valor pelo comunicado.

enum sadas {RELAY = 3}; // RELAY constante = 3


Se vrios pinos de porta PORTD esto ligadas aos rels, a expresso anterior pode ser escrita da seguinte forma tambm:

enum sadas {RELAY = 3, aquecimento, MOTOR = 6, JET};

Em todas as constantes precedidas por constante com valores atribudos (rel = 3 e MOTOR = 6), so automaticamente atribudos os valores
das constantes acima, aumentaram 1. Neste exemplo, o aquecedor constantes e PUMP so atribudos os valores 4 e 7, ou seja, (JET
AQUECEDOR = 4 e = 7), respectivamente.

4.6 EXEMPLO 4
Usando Timer0, timer1 e Timer2 temporizadores. Para interrupes, declarar novas funes ...
Ao analisar os exemplos acima, provvel que tenha sido definido na inconveniente de fornecer tempo de espera atravs da funo de
atraso. Nestes casos, o microcontrolador "esttica" e no faz nada. Simplesmente esperado que haver uma certa quantidade de tempo.Tal
perda inaceitvel luxo tempo, de modo que um outro mtodo deve ser aplicado.
Voc se lembra do captulo de temporizadores? Voc se lembra o que as interrupes? Este exemplo conecta-los de uma forma prtica. O
regime mantm-se inalterado, eo desafio ainda est presente. necessrio prever um perodo de tempo longo o suficiente para detectar
mudanas na porta. Para este efeito, o temporizador Timer0 atribudo o divisor usado. Sempre que uma interrupo gerado com cada
estouro no registo temporizador, a varivel cnt automaticamente incrementado em 1 em cada interromper a execuo de rotina. Quando a
varivel atinge o valor de 400, o PORTB incrementado de 1. Todo o procedimento ocorre "entre as prateleiras", que permite que o
microcontrolador para fazer outra tarefa.

/ * Cabealho *********************************************** ******* /


no assinado cnt;
vazio interrupo () {
cnt ++;
TMR0 = 96;
INTCON = 0x20;
}
vazio main () {
OPTION_REG = 0x84;
ANSEL = 0;
ANSELH = 0;
TRISB = 0;

// Definir varivel cnt


// Com uma interrupo CNT incrementado por 1
// O valor inicial devolvido no temporizador TMR0
// T0IE bit definido como 1, o bit T0IF definido como 0

// prescaler atribudo ao temporizador TMR0


// Todos os pinos de E / S so configurados como digitais
// Tudo PortB pinos so configurados porto

// Como sadas
PORTB = 0x0;
TMR0 = 96;
INTCON = 0xA0;
cnt = 0;

//
//
//
//

Redefinir PORTB
Temporizador T0 conta 96-255
TMR0 Interrupes habilitadas
A varivel cnt atribudo um 0

no {
// loop infinito
se (== cnt 400) {
// Aumento PORTB aps interrupes 400
PORTB PORTB = ++; // Aumento do nmero PORTB 1
cnt = 0;
// Reinicie a varivel cnt
}
} enquanto (1);
}

Sempre que um estouro no registo temporizador TRM0 ocorre, ocorre uma interrupo.

/ * Cabealho *********************************************** ******* /


unsigned short cnt;

// Definir varivel cnt

vazio interrupo () {
cnt ++;
// Com uma interrupo CNT incrementado por 1
PIR1.TMR1IF = 0;
// Redefinir bit TMR1IF
TMR1H = 0x80;
// O valor inicial devolvido nos registos
TMR1L = 0x00;
// TMR1H e TMR1L temporizador
}
vazio main () {
ANSEL = 0;
ANSELH = 0;
PORTB = 0xF0;
TRISB = 0;
T1CON = 1;
PIR1.TMR1IF = 0;
TMR1H = 0x80;
TMR1L = 0x00;
PIE1.TMR1IE = 1;
cnt = 0;
INTCON = 0xC0;

// Todos os pinos de I / S so configurados como digitais


//
//
//
//
//

Valor inicial dos bits de PORTB


PortB pinos da porta so configurados como sadas
Definir o temporizador TMR1
Redefinir bit TMR1IF
definir o valor inicial do temporizador TMR1

// Habilitar interrupo para ocorrer estouro


// Reinicie a varivel cnt
// interrupo habilitado (bits GIE e PEIE)

fazer {
// loop infinito
se (== cnt 76) {
// Alterar o estado do PORTB 76 interrupes
PORTB PORTB = ~; // Nmero no PORTB investido
cnt = 0;
// Redefinir varivel cnt
}
} enquanto (1);
}

Neste caso, uma interrupo ativado aps um estouro ocorre no temporizador registar TMR1 (TMR1H, TMR1L). Alm disso, a combinao
de bits pode variar na porta POTRB difere do exemplo anterior.

/ * Cabealho *********************************************** ******* /


unsigned short cnt;
anular Replace () {

// Definir varivel cnt

PORTB PORTB = ~;
}

// definir a funo de novo 'Substituir'


// funo inverte o status da porta

vazio interrupo () {
se (PIR1.TMR2IF) {
// Se o bit TMR2IF = 1,
cnt ++;
// Aumento cnt varivel 1
PIR1.TMR2IF = 0;
// bit Reset e
TMR2 = 0;
// Reseta TMR2 registo
}
}
// Principal
vazio main () {
cnt = 0;
// Reinicie a varivel cnt
ANSEL = 0;
// Todos os pinos de E / S so configurados como digitais
ANSELH = 0;
PORTB = 0b10101010; // estado Logic nos pinos da PORTB
TRISB = 0;
// Todos os pinos do porto so configurados como sadas PORTB
T2CON = 0xFF;
// Definir o temporizador T2
TMR2 = 0;
// valor inicial do registrador TMR2 temporizador
PIE1.TMR2IE = 1;
// interrupo habilitado
INTCON = 0xC0;
// GIE e PEIE bits so definidos a 1
enquanto (1) {
// faz um loop infinito
se (cnt> 30) {
// Alterar o estado do PORTB depois de
mais de 30 interrupes //
Replace ();
// Funo Substituir inverte o estado PORTB
cnt = 0;
// Redefinir varivel cnt
}
}
}

Neste exemplo, uma interrupo ocorre aps um estouro ocorre no temporizador registar TMR2. Para reverter o estado lgico dos pinos da
porta a funo Replace, que normalmente no pertence a linguagem C padro usado.

4.7 EXEMPLO 5
Use o temporizador do co - Guardian
Este exemplo mostra como a no utilizar o temporizador do co guardio. Um comando utilizado para repor este temporizador omitido de
propsito no circuito principal do programa, que permite que o watchdog timer "ganhar a batalha do tempo" e redefinir o
microcontrolador. Portanto, o microcontrolador ir reiniciar sem parar, indicando que o LEDs piscantes porta PORTB.

/ * Cabealho *********************************************** ******* /


vazio main () {
OPTION_REG = 0x0E; // prescaler atribudo ao temporizador WDT (1:64)
asm CLRWDT;
// conjunto de comandos para reiniciar o temporizador WDT
PORTB = 0x0F;
// valor inicial de registar PORTB
TRISB = 0;
// Todos os pinos do porto so configurados como sadas PORTB
delay_ms (300);
// tempo de atraso 30ms
PORTB = 0xF0;
// valor PORTB diferente do inicial
enquanto (1);
// faz um loop infinito. O programa permanece aqui at
WDT // temporizador reiniciar o microcontrolador
}
Para este exemplo funcione corretamente, voc deve habilitar o temporizador do co de guarda-para selecionar as ferramentas de opo / I
Programador / Watchdog Timer - habilitado.

4.8 Exemplo 6
Mdulo CCP1 como gerador de sinal PWM
Este exemplo ilustra o uso do mdulo CCP1 no modo de PWM. Para tornar as coisas mais interessantes, a durao dos pulsos na P1A
(PORTC, 2) sada pode ser alterado usando os botes de presso simbolicamente chamado 'Dark' e 'CLEAR'. A durao ajustada
apresentada como uma combinao binria em PORTB. O funcionamento deste mdulo est sob o controlo das funes pertencentes loja
livro de PWM. Aqui eles so usados trs deles:

1. PWM1_init tem
o
prottipo: vazio Pwm1_Init
freq define a frequncia do sinal PWM expressa em Hertz. Este exemplo igual a 5 kHz.
2. PWM1_Start tem o prottipo: vazio Pwm1_Start ( vazio );
3. PWM1_Set_Duty tem
o
prottipo: vazio Pwm1_Set_Duty
( curto
no
duty_ratio ajusta a durao do pulso em uma seqncia de pulsos.

( long fr

assinado duty_rat

A biblioteca PWM tambm contm a funo PWM_Stop usada para desativar este modo. Seu prottipo : vazio Pwm1_Stop ( vazio );

/ * Cabealho *********************************************** ******* /


// Definir as variveis ciclo_de_trabajo_actual,
// Ciclo_de Trabajo_anterior
unsigned short ciclo_de_trabajo_actual;
unsigned short ciclo_de trabajo_anterior;
vazio initMain () {
ANSEL = 0;
// Todos os pinos de I / S so configurados como digitais
ANSELH = 0;
PORTA = 255;
// estado inicial PORTA
TRISA = 255;
pinos // Todos PORTA so configurados como entradas
PORTB = 0;
// estado inicial do PORTB
TRISB = 0;
// Todos os pinos do PORTB Eles so configurados como sadas
PORTC = 0;
// Estado do porto inicial PORTC
TRISC = 0;
// Todos os pinos do porto so configurados PORTC
// Como sadas
PWM1_Init (5000); // Inicializar o mdulo PWM (5 KHz)
}
vazio main () {
initMain ();
ciclo_de_trabajo_actual = 16;
ciclo_de trabajo_anterior = 0;
PWM1_Start ();
enquanto (1) {
se (Button (& PORTA, 0,1,1))
ciclo_de_trabajo_actual ++;
se (Button (& PORTA 1 , 1,1))
ciclo_de_trabajo_actual--;

// Valor inicial da varivel ciclo_de_trabajo_actual


// Redefinir trabajo_anterior ciclo_de Varivel
// Iniciar o mdulo PWM1
// faz um loop infinito
// Se o boto for pressionado conectado a RA0
// incrementar o valor da varivel current_duty
// Se o boto ligado a RA1 pressionado
// diminuir o valor da varivel current_duty

se (old_duty = ciclo_de_trabajo_actual!) {
// Se ciclo_de_trabajo_actual e
trabajo_anterior // ciclo_de no so iguais
PWM1_Set_Duty (ciclo_de_trabajo_actual);
// definir um novo valor PWM,
trabajo_anterior = ciclo_de_trabajo_actual ciclo_de; // Salva o novo valor
PORTB = trabajo_anterior ciclo_de;
// e exibi-lo em PORTB
}
Delay_ms (200); // tempo de atraso de 200mS
}
}

Para este exemplo funcione corretamente, voc precisa marcar as seguintes bibliotecas na janela Biblioteca Gerente antes de compilar o
programa:

PWM
Boto

4.9 EXEMPLO 7
Use o A / D
O A / D microcontrolador PIC16F887 utilizado neste exemplo. Eu preciso dizer que tudo um pedao de bolo? Um sinal analgico varivel
aplicada ao pino AN2, enquanto o resultado da converso de 10 bits mostrados na POTRB e PORTD (8 bits menos significativos no porto
PORTD e dois bits mais significativos em PORTB). Terra (GND) utilizada como tenso de referncia Vref- baixo, enquanto que a mais alta
tenso de referncia aplicada ao pino AN3. Isso permite que a escala de medida para esticar e encolher.
INa outras palavras, o A / D gera sempre um resultado binria de 10 bits, o que significa que reconhece 1024 nveis de tenso no total (2 10 =
1,024). A diferena entre os dois nveis de tenso no sempre o mesmo. Quanto menor for a diferena entre Vref + e Vref-, menor ser a
diferena entre os dois nveis de 1024. Como vimos, o A / D capaz de detectar pequenas alteraes na tenso.

/ * Cabealho *********************************************** ******* /


unsigned int temp_res;
vazio main () {
ANSEL = 0x0C;
TRISA = 0xFF;

// Pines AN2 e AN3 so configurados como analgica


PORTA // Todos os pinos so configurados

// Como entradas
ANSELH = 0;
TRISB = 0x3F;

// Outros pinos so configurados como digitais


// Pines de PORTB, RB7 e RB6 so configurados

// Como sadas

TRISD = 0;
ADCON1.F4 = 1;

// Todos os pinos so configurados como sadas PORTD


// tenso de referncia levado para o pino RA3.

fazer {
temp_res = ADC_Read (2); // O resultado do conversor A / D copiado para temp_res
PORTD temp_res =;
// 8 bits menos significativos so movidos para a porta PORTD
PORTB = temp_res >> 2;
// dois bits mais significativos mover RB6 e RB7 pedaos
} enquanto (1);
// loop infinito
}
Para tornar este exemplo funcione corretamente, necessrio verificar a biblioteca ADC na janela Biblioteca Gerente antes de compilar o
programa:

ADC

4,10 Exemplo 8
Use EEPROM
Este exemplo mostra como escrever e ler EEPROM construdo. O programa funciona da seguinte maneira. O lao principal constantemente
l o contedo da localizao de memria EEPROM, no endereo 5 (decimal). Em seguida, o programa entra no loop infinito no qual PORTB
incrementado eo estado de entradas porta PORTA.2 est marcada. No momento de premir o boto de chamada de notas, um nmero
armazenado no nmero PORTB vai ser armazenado na EEPROM, directamente lida e mostrada na porta PORTD em forma binria.

/ * Cabealho *********************************************** ******* /


vazio main () {{
ANSEL = 0;
ANSELH = 0;
PORTB = 0;
TRISB = 0;

// Todos os pinos de I / S so configurados como digitais


// valor inicial de PORTB
// Todos os pinos do porto so configurados PORTB

// Como sadas
PORTD = 0;
TRISD = 0;

// valor inicial de PORTB


// Tudo PORTD pinos da porta so configurados

// Como sadas
TRISA = 0xFF;

PORTA // Todos os pinos so configurados

// Como entradas
PORTD = EEPROM_Read (5);

// Leia o EEPROM no 5

fazer {
PORTB PORTB = ++;
delay_ms (100);

// Aumento PortB um
// tempo de atraso de 100ms

se (PORTA.F2)
EEPROM_Write (5, PORTB); // Se o boto MEMO, salvar o PORTB
PORTD = EEPROM_Read (5);
fazer {
enquanto (PORTA.F2);
}
}
enquanto (1);
}

// ler os dados escritos

// Fique neste loop at que o boto pressionado


// loop infinito

Para verificar o funcionamento deste circuito, basta pressionar o boto MEMO e desligar o dispositivo. Depois de reiniciar o dispositivo, o
programa exibir o valor armazenado no porto PORTD. Lembre-se que, no momento da escrita, o valor foi exibido no PORTB.
Para tornar este exemplo funcione corretamente, necessrio verificar a biblioteca EEPROM na janela Biblioteca Gerente antes de compilar
o programa:

EEPROM

4,11 Exemplo 9
Dois dgitos LED contador, multiplexao
Neste exemplo, o microcontrolador funciona como um contador de dois dgitos. A varivel i incrementado (lento o suficiente para ser visvel)
e seu valor exibido em um display LED dois dgitos (99-0). O ponto o de permitir uma converso de um nmero binrio para um nmero
decimal e dividi-lo em dois dgitos (dezenas e unidades). Como os segmentos do mostrador de LED so ligados em paralelo, necessrio
assegurar que se alternam rapidamente ter uma impresso que emitem luz em simultneo (Time Division Multiplexing).
Neste exemplo, o temporizador TMR0 responsvel por diviso de tempo de multiplexao, enquanto a funo de mscara converte um
nmero binrio para decimal.

/ * Cabealho *********************************************** ******* /


unsigned short mscara ( curto no assinado num);
unsigned short digit_no, digit10, digit1, dgito, i;

vazio interrupo () {
se (digit_no == 0) {
PORTA = 0;
// Desligue ambas as telas
PORTD = digit1;
// Definir mscara para unidades no visor
// Porto PORTD
PORTA = 1;
// Ative a exibio para unidades (LSD)
digit_no = 1;
} mais {
PORTA = 0;
// Desligue ambas as telas
PORTD = digit10; // Definir mscara para exibir pontuaes na
// Porto PORTD
PORTA = 2;
digit_no = 0;
}
TMR0 = 0;
INTCON = 0x20;

// Ative a exibio para as dezenas (MSD)

// Reinicie o contador TMRO


// Bit T0IF = 0, T0IE = 1

}
vazio main () {
OPTION_REG = 0x80; // Definir o temporizador TMR0
TMR0 = 0;
INTCON = 0xA0;
// Desativar PEIE, INTE, RBIE, T0IE Interrupes
PORTA = 0;
// Desligue ambas as telas
; TRISA = 0
PORTA // Todos os pinos so configurados
// Como sadas
PORTD = 0;
TRISD = 0;

// Desligue todos os segmentos do visor


// Tudo PORTD pinos da porta esto configuradas

// Como sadas
fazer {
para (i = 0; i <= 99; i ++) { // Contando 0-99
dgito = i% 10u;
digit1 = mscara (dgitos);
// Prepare a mscara para exibir unidades
dgito = ( carvo ) (i / 10U)% 10u;
digit10 = mscara (dgitos);
// Prepare a mscara para exibir dezenas
Delay_ms (1000);
}
} enquanto (1);
// loop infinito
}
mask.c

/ * Cabealho *********************************************** ******* /


unsigned short mscara ( curto no assinado num) {
interruptor (num) {
caso 0: voltar 0x3F;
caso 1: retorno 0x06;
caso 2: retorno 0x5b;
caso 3: voltar 0x4F;
caso 4: retorno 0x66;
caso 5: retornar 0x6D;
Caso 6: retornar 0x7D;
caso 7: retorno 0x07;
caso 8: regresso 0x7F;
caso 9: regresso 0x6F;
}
}
Para tornar este exemplo funcione corretamente, necessrio incluir o arquivo mask.c no projecto (para alm do arquivo example9.c) na
janela do Gerenciador de Projetos antes de compilar o programa:
Example9.mcppi - Fontes - Adicionar ficheiro ao projecto

mask.c
example9.c

4,12 Exemplo 10

Utilizar o visor LCD


Este exemplo mostra como usar um display LCD alfanumrico. Bibliotecas de funes simplificar este programa, o que significa que, no final,
o esforo para criar o software vale a pena.
Uma mensagem escrita em duas linhas no visor:
mikroElektronika
exemplo LCD
Dois segundos mais tarde, a mensagem no segundo as alteraes de linha, e esta tenso apresentada na entrada do conversor A / D (pino
RA2). Por exemplo:
mikroElektronika
tenso: 3.141V
Em um dispositivo real voc pode exibir valor da temperatura medida atual ou alguma outra tenso em seu lugar.

Para este exemplo funcione corretamente, voc precisa marcar as seguintes bibliotecas na janela Biblioteca Gerente antes de compilar o
programa:

ADC
LCD

/ * Cabealho *********************************************** ****** /


// Conexes Mdulo
Fim conexes do mdulo LCD
// Declare variveis
unsigned char ch;
unsigned int adc_rd;
Char * texto;
longo TLong;
vazio main () {
INTCON = 0;
ANSEL = 0x04;
TRISA = 0x04;
ANSELH = 0;
Lcd_Init ();
Lcd_Cmd (_LCD_CURSOR_OFF);
Lcd_Cmd (_LCD_CLEAR);

// Tudo interrompe deficientes


// pino RA2 configurado como uma entrada analgica
// Outros pinos so configurados como digitais
// Inicializar o display LCD
// Comando LCD (rode o cursor)
// LCD Command (apagar o LCD)

text = "mikroElektronika";
Lcd_Out (1.1, texto);

// Defina a primeira mensagem


// Escreve a primeira mensagem na primeira linha

text = "exemplo LCD";


Lcd_Out (2.1, texto);

// Define a segunda mensagem


// Defina a primeira mensagem

ADCON1 = 0x82;
TRISA = 0xFF;
Delay_ms (2000);

// Tenso de referncia para o A / D VCC


// Todos os pinos PORTA so configurados como entradas

text = "tenso";

// Definir a terceira mensagem

enquanto (1) {
adc_rd = ADC_Read (2);
// converso A / D. Pino RA2 uma entrada.
Lcd_Out (2.1, texto);
// Escreve o resultado na segunda linha
TLong = ( long adc_rd) * 5000; // Converte o resultado em milivolts
TLong = TLong / 1023;
// 0. 1023 -> 0-5000mV
ch = TLong / 1000;
// Remover volts (milhares de milivolts)
// O resultado
Lcd_Chr (2,9,48 + ch);
Lcd_Chr_CP ('.');
ch = (TLong / 100)% 10;
Lcd_Chr_CP (48 + ch);
ch = (TLong / 10)% 10;
Lcd_Chr_CP (48+ ch);
TLong% ch = 10;
Lcd_Chr_CP (48 + ch);
Lcd_Chr_CP ("V");
Delay_ms (1);
}
}

// Escreve resultado em formato ASCII


// Remover centenas de milivolts
// Escreve resultado em formato ASCII
// Remover dezenas de milivolts
// Escreve resultado em formato ASCII
// unidades Extrato de milivolts
// Escreve resultado em formato ASCII

4,13 EXEMPLO 11
Comunicao serial RS-232
Este exemplo mostra como usar o mdulo EUSART do microcontrolador. A conexo com um PC habilitado atravs da comunicao padro
RS-232. O programa funciona da seguinte maneira. Cada byte recebido atravs da comunicao serial exibido usando LEDs conectados
porta PORTB e, em seguida, volta automaticamente para o transmissor. Se ocorrer um erro de recepo, ele vai sinalizar para ligar o LED. A
maneira mais fcil verificar o funcionamento do dispositivo em uso quando usando um programa padro do Windows chamado Hyper
Terminal .

/ * Cabealho *********************************************** ******* /


unsigned short i;
vazio main () {
UART1_Init (19200); // Inicializar o mdulo USART
// (8 bits, 19200 taxa de transmisso, bit sem
paridade // ...)
enquanto (1) {
se (UART1_Data_Ready ()) { // se tiver sido derrubado
UART1_Read i = (); // ler
UART1_Write (i); // envi-lo de volta
}
}
}
Para tornar este exemplo funcione corretamente, necessrio verificar a biblioteca UART na janela Biblioteca Gerente antes de compilar o
programa:

UART

4,14 Exemplo 12
Medio de temperatura atravs do sensor DS1820. Usando o protocolo "1-wire '...

A medio de temperatura uma das tarefas mais comuns executados pelo microcontrolador. Neste exemplo, um sensor de DS1820
utilizado para medir a. Ele capaz de medir na gama de 55 C a 125 C com 0,5 C de preciso. Para transmitir dados para um tipo
especial de comunicao serial microcontrolador chamado 1-wire usado. Devido ao facto de estes sensores so simples de usar e de
grande capacidade, os comandos utilizados para a sua operao e tm a forma de funes de controlo armazenados na biblioteca
One_Wire. No total, os seguintes trs funes:

Ow_Reset usado para reiniciar o sensor;


Ow_Read utilizado para receber dados a partir do sensor; e
Ow_Write utilizado para enviar comandos para o sensor

Este exemplo mostra a vantagem da utilizao de bibliotecas com funes prontas para uso. Especificamente, no rever a documentao
fornecida pelo fabricante para usar o sensor. Basta copiar qualquer uma destas funes no programa. Se voc quiser saber como declarar,
basta clicar em qualquer um deles e selecionar a opo Ajuda.

/ * Cabealho *********************************************** ******* /


// Conexes Mdulo
Fim conexes do mdulo LCD
const unsigned short TEMP_RESOLUTION = 9;
Char * text = "000.0000";
no assinado temporrio;
vazio Display_Temperature ( sem assinatura int temp2write) {
unsigned short const RES_SHIFT = TEMP_RESOLUTION - 8;
carvo temp_whole;
unsigned int temp_fraction;
// Verifique se a temperatura negativa
se (temp2write & 0x8000) {
texto [0] = '-';
temp2write temp2write = ~ + 1;
}
// Extrair temp_whole
temp_whole = temp2write >> RES_SHIFT;
// Converte carter temp_whole
se (temp_whole / 100)
texto [0] = temp_whole / 100 + 48;
mais
texto [0] = '0';

texto [1] = (temp_whole / 10)% 10 + 48;


texto [2] = 10 + 48 temp_whole%;

// Extrair dezenas dgito


// Extrair unidades dgitos

// Extrair e converter temp_fraction unsigned int


temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction & = 0x000F;
temp_fraction * = 625;
Caracteres Temp_fraction // converte
texto [4] = temp_fraction / 1000 + 48;
// Extrair milhares dgito
texto [5] = (temp_fraction / 100)% 10 + 48; // Remover centenas dgitos
texto [6] = ( temp_fraction / 10)% 10 + 48;
// Extrair dezenas dgito
texto [7] = 10 + 48 temp_fraction%;
// Extrair unidades dgitos
// Temperatura Display LCD
Lcd_Out (2, 5, texto);
}
vazio main () {
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;

// definir o PIN AN como digitais


// Desabilitar os comparadores

Lcd_Init ();
// Inicializar o LCD
Lcd_Cmd (_LCD_CLEAR);
// Limpar o LCD
Lcd_Cmd (_LCD_CURSOR_OFF); // Desligue o cursor
Lcd_Out (1, 1, "Temperature");
// Mostrar a classe de personagem 'C' para C
Lcd_Chr (2,13,223); // outros monitores LCD possuem cdigos diferentes
// Personagem com o grau
// se voc v a letra grega alfa, tente digitar 178 em vez de 223
Lcd_Chr (2,14, 'C');
--- // Loop principal
do {
// --- realizar leitura de temperatura
Ow_Reset (& PORTE, 2);
// redefinir sinal OneWire
Ow_Write (& PORTE, 2, 0xCC); // Execute o comando SKIP_ROM
Ow_Write (& PORTE 2, 0x44); // Executa o comando CONVERT_T
Delay_us (120);
Ow_Reset (PORTE & 2);
Ow_Write (& PORTE, 2, 0xCC); // Execute o comando SKIP_ROM
Ow_Write (& PORTE, 2, 0xBE); // Executa o comando READ_SCRATCHPAD
temp = Ow_Read (PORTE & 2);
temp = (Ow_Read (PORTE & 2) << 8) + temperatura;
// --- Formato e exibir o resultado no LCD
Display_Temperature (temp);
Delay_ms (500);
} enquanto (1);
}
Para este exemplo funcione corretamente, voc precisa marcar as seguintes bibliotecas na janela Biblioteca Gerente antes de compilar o
programa:

One_Wire
LCD

4,15 EXEMPLO 13
Gerao de som, biblioteca de som ...
Os sinais de udio so usados frequentemente quando voc precisa chamar a ateno do usurio, confirmar que um dos botes for
pressionado, o aviso que atingiu os valores mnimos ou mximos etc. Eles podem ser um simples melodias de sinal sonoro e um perodo
mais longo ou mais curto. Neste exemplo, a gerao de som, por meio de funes pertencentes biblioteca de som mostrado.

Alm destas funes, a funo do boto pertencente mesma biblioteca utilizada para testar botes de presso.

/ * Cabealho *********************************************** ******* /


vazio Tone1 () {
Sound_play (659, 250); // = 659Hz frequncia, durao = 250ms
}
vazio Tone2 () {
Sound_play (698, 250); // = 698Hz frequncia, durao = 250ms
}
vazio Tone3 () {
Sound_play (784, 250); // = 784Hz frequncia, durao = 250ms
}
anular Melody1 ()
Tone1 (); Tone2
Tone1 (); Tone2
Tone1 (); Tone2
Tone1 (); Tone2
Tone1 (); Tone2
Tone3 (); Tone3
}

{ // compor uma melodia divertimento 1


(); Tone3 (); Tone3 ();
(); Tone3 (); Tone3 ();
(); Tone3 ();
(); Tone3 (); Tone3 ();
(); Tone3 ();
(); Tone2 (); Tone2 (); Tone1 ();

vazio Tonea () { // A Tone


Sound_play (880, 50);
}
vazio Tonec () { // Tom C
Sound_play (1046, 50);
}
anular Tonee () { // som P
Sound_play (1318, 50);
}
anular Melody2 () { // compor uma melodia divertimento dois
curto no assinado i;

para (i = 9; i> 0; i--) {


Tonea (); Tonec (); Tonee ();
}
}
vazio main () {
ANSEL = 0;
ANSELH = 0;
TRISB = 0xF0;

// Todos os pinos de I / S so digitais


// Pines RB7-RB4 so configurados como entradas

// A sada configurado como RB3


Sound_Init (& PORTB, 3);
Sound_play (1000, 500);
enquanto (1) {
se (Button (& PORTB, 7,1,1))
Tone1 ();
enquanto (PORTB e 0x80);
se (Button (& PORTB, 6,1,1))
Tone2 ();
enquanto (PORTB e 0x40);
se (Button (& PORTB, 5,1,1))
Melody2 ();
enquanto (PORTB e 0x20);
se (Button (& PORTB, 4,1,1))
Melody1 ();
enquanto (PORTB e 0x10);
}
}

// RB7 gera Tone1


// Aguarde at que o boto liberado
// RB6 gera Melody 2
// Aguarde at que o boto liberado
// RB5 gera melodia 2
// Aguarde at que o boto liberado
// RB4 gera melodia 1
// Aguarde at que o boto liberado

Para este exemplo funcione corretamente, voc precisa marcar as seguintes bibliotecas na janela Biblioteca Gerente antes de compilar o
programa:

Boto
Som

4,16 EXEMPLO 14
Utilizar o visor LCD grfica
Um LCD grfico (GLCD) fornece um mtodo avanado para a exibio de mensagens. Enquanto um personagem LCD pode exibir somente
caracteres alfanumricos, grfico LCD pode exibir mensagens sob a forma de desenhos e mapas de bits. O LCD grfico usado com mais
freqncia tem uma resoluo de tela de 128x64 pixels. Um contraste GLCD pode ser ajustado atravs do potencimetro P1.

Neste exemplo, o GLCD exibe uma seqncia de imagens, dos quais um bitmap um caminho armazenadas em outro arquivo chamado
truck_bmp.c. Para ativar esse programa funcione corretamente, voc deve adicionar este arquivo como um arquivo de origem para o seu
projecto.
Pr-processamento diretivas includas neste exemplo permite que voc escolha se deseja exibir toda a seqncia de imagens ou apenas a
um curto seqncia. Por padro toda a seqncia de imagens exibida. No entanto, adicionando um comentrio na frente da
directivaCOMPLETE_EXAMPLE #define desativado exibio de algumas imagens na seqncia. Se dito (ou excludo) desta directiva, as
instrues entre as directivas COMPLETE_EXAMPLE #ifdef e #endif no ser compilado, por isso no vai funcionar.

/ * Cabealho *********************************************** ******* /


// Declaraes ----------------------------------------------- -----------------const char code truck_bmp [1024]; // Declare a constante definida em truck_bmp.c
// Para usar para este arquivo
// ------------------------------------------------ -------- fim-de-declaraes
// Conexes Mdulo
GLCD conexes mdulo finais
vazios delay2S () {
Delay_ms (2000);
}

// tempo de atraso funo 2 segundos

vazio main () {
unsigned short ii;
Char * SomeText;
/ * Define um macro chamado COMPLETE_EXAMPLE esta directiva. Mais tarde, no
programa, testar a directiva ifdef se a macro est definido. Se esta apagada
line ou se ela se torna um comentrio, sees de cdigo entre o
ifdef e endif directivas no ser compilado. * /
#define COMPLETE_EXAMPLE // Coloque esta linha como um comentrio se voc quer
// exibe a verso curta da sequncia
ANSEL = 0;
// definir o PIN AN como digitais
ANSELH = 0;
C1ON_bit = 0;
comparadores // Desabilitar
C2ON_bit = 0;
Glcd_Init ();
// inicializar o GLCD
Glcd_Fill (0x00); // Apagar o GLCD
enquanto (1) {

// faz um loop infinito, as repeties de sequncias

/ * Desenhar a primeira imagem * /


#ifdef COMPLETE_EXAMPLE
Glcd_Image (truck_bmp);
// Desenha a imagem
delay2S (); delay2S ();
#endif
Glcd_Fill (0x00);
// Apagar o GLCD
/ * Desenhar a segunda imagem * /
Glcd_Box (62,40,124,56,1);
// Desenha a caixa
Glcd_Rectangle (5,5,84,35,1);
// Desenhar o retngulo
Glcd_Line (0, 0, 127, 63, 1);
// Desenha a linha
delay2S ();
para (i = 5; ii <60; ii + = 5) { // desenha linhas horizontais e verticais
Delay_ms (250);
Glcd_V_Line (2, 54, ii, 1);
Glcd_H_Line (2, 120, ii, 1);
}
delay2S ();
Glcd_Fill (0x00); // Apagar o GLCD
/ * Desenhar a terceira imagem * /
#ifdef COMPLETE_EXAMPLE

Glcd_Set_Font (Character8x7, 8, 7, 32);


// __Lib_GLCDFonts.c na pasta Usos
#endif
Glcd_Write_Text ("MIKROE", 1, 7, 2);
para (i = 1; ii <= 10; ii ++)
Glcd_Circle (63,32, 3 * ii, 1);
delay2S ();
Glcd_Box (12,20, 70,57, 2);
delay2S ();

// Selecione a fonte, consulte

// Escreve a seqncia de caracteres


// desenhar crculos

// Desenha a caixa

/ * Desenhe a quarta imagem * /


#ifdef COMPLETE_EXAMPLE
Glcd_Fill (0xFF); // Preencha o GLCD
Glcd_Set_Font (Character8x7, 8, 7, 32);
// Altere a fonte
SomeText = "font 8x7";
Glcd_Write_Text (SomeText, 5, 0, 2);
// Escreve a string
delay2S ();
Glcd_Set_Font (System3x5, 3, 5, 32);
// Altere a fonte
SomeText = "MAISCULAS 3x5 apenas";
Glcd_Write_Text (SomeText, 60, 2, 2);
// Escreve a string
delay2S ();
Glcd_Set_Font (font5x7, 5, 7, 32);
// Altere a fonte
SomeText = "font 5x7";
Glcd_Write_Text (SomeText, 5, 4, 2);
// Escreve a string
delay2S ();
Glcd_Set_Font (FontSystem5x7_v2, 5, 7, 32); // Altere a fonte
SomeText = "font 5x7 (v2)";
Glcd_Write_Text (SomeText, 5, 6, 2);
// Escreve a string
delay2S ();
#endif
}
}
truck_bmp.c :

/ * Cabealho *********************************************** ****** /


const unsigned char truck_bmp [1024] = {
0, 0, 0, 0, 0,248, 8, 8, 8, 8, 8, 8, 12, 12, 12, 12,
12, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9.137.137.137.137.137.137,
137.137.137.137.137.137.137, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 13,253, 13,195, 6,252, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
240.240.240.240.240.224.224.240.240.240.240.240.224.192.192.224,
240.240.240.240.240.224.192, 0, 0, 0.255.255.255.255.255.195,
195.195.195.195.195.195, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0.255.240, 79.224.255, 96, 96, 96, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 64, 64, 64, 64,128, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255.255.255.255.255, 0, 0, 0, 0.255.255.255.255.255, 0, 0,
0,255,255,255,255,255 0, 0, 0, 0.255.255.255.255.255.129,
129.129.129.129.129.129.128, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0255, 1248, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 16,224, 36,196 24, 70.130.130.133.217.102.112,
160,192, 96, 96, 32, 32.160.160.224.224.192, 64, 64128128192,
64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 63, 96, 96, 96,224, 96, 96, 96, 96, 96, 96,
99, 99, 99, 99, 99, 96, 96, 96, 96, 99, 99, 99, 99, 99, 96, 96,
96, 96, 99, 99, 99, 99, 99, 96, 96, 96, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 96, 96, 96, 96, 96, 96, 96, 64, 64,
64.224.224.255.246, 1, 14, 6, 6, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2,130, 67,114, 62, 35, 16, 16, 0, 7, 3, 3, 2,
4, 4, 4, 4, 4, 4, 4, 28, 16, 16, 16, 17, 17, 9, 9, 41,
112, 32, 67, 5.240.126.174.128, 56, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
1, 1.127.127.127.127.255.255.247.251.123.191, 95, 93125189,
189, 63, 93, 89.177.115.243.229.207, 27, 63.119.255.207.191.255,
255.255.255.255.255.255.255.127.127.127.127.127.127.127.127.255,
255.255.127.127.125.120.120.120.120.120.248.120.120.120.120.120,
120.248.248.232.143, 0, 0, 0, 0, 0, 0, 0, 0128240248,
120188220, 92,252, 28, 28, 60, 92, 92, 60120248248, 96,192,
143.168.216.136, 49, 68, 72, 50,160, 96, 0, 0, 0, 0, 0, 0,
0, 0, 0.128.192.248.248.248.248.252.254.254.254.254.254.254,
254.254.254.254.254.255.255.255.255.255.246.239.208.246.174.173,
169.128.209.208.224.247.249.255.255.252.220.240.127.255.223.255,
255.255.255.255.255.254.254.255.255.255.255.255.255.255.254.255,
255.255.255.255.255.255.254.254.254.254.254.254.254.254.254.254,
254.254.254.254.255.255.255.255.255.255.254.255.190.255.255.253,
240.239.221.223.254.168.136.170.196.208.228.230.248.127.126.156,
223.226.242.242.242.242.242.177, 32, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 7, 7, 7, 7, 7, 15,
15, 15, 7, 15, 15, 15, 7, 7, 15, 14, 15, 13, 15, 47, 43, 43,
43, 43, 43, 47.111.239.255.253.253.255.254.255.255.255.255.255,
191.191.239.239.239.191.255.191.255.255.255.255.255.255.255.255,
255.255.255.255.255.255.255.255.255.255.255.255.255.255.255.255,
255.255.255.255.127.127.127.127.255.255.191.191.191.191.255.254,
255.253.255.255.255.251.255.255.255.127.125, 63, 31, 31, 31, 31,
31, 31, 63, 15, 15, 7, 7, 3, 3, 3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 3, 3, 3, 11, 11, 11, 11, 7, 3, 14, 6, 6,
6, 2, 18, 19, 19, 3, 23, 21, 21, 17, 1, 19, 19, 3, 6, 6,
14, 15, 15, 7, 15, 15, 15, 11, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
Para tornar este exemplo funcione corretamente, necessrio verificar a janela livraria GLCD Library Manager antes de compilar o
programa. Tambm necessrio incluir o documento truck_bmp.c no projecto.

4,17 EXEMPLO 15
Use o touchpad ...
Um painel de toque um painel transparente auto-adesivo fino colocado sobre a tela de um LCD grfico. Ele muito sensvel presso
assim um toque macio faz com que algumas alteraes no sinal de sada. Existem diferentes tipos de painis de toque. O mais simples o
painel de toque resistivo que ser discutido aqui.

Um painel de toque composto por duas folhas rgidas, formando uma estrutura de "sanduche" tendo camadas resistivas em suas faces
internas. A resistncia destas camadas geralmente no exceda 1 kohm. Os lados opostos das folhas tm contactos de acesso a um cabo de
fita.

O procedimento para determinar as coordenadas da posio do painel que tenha sido pressionada pode ser dividido em duas etapas. O
primeiro est determinando a coordenada X, ea segunda determinar a coordenada Y da posio.
Para determinar a coordenada X, necessrio ligar o contacto deixado na superfcie de um solo (terra) e o contacto correcto com a fonte de
alimentao. Isso permite que um divisor de tenso, pressionando o painel de toque. O valor de tenso obtido no divisor pode ser lido na
superfcie de contacto inferior B. A tenso pode variar na gama de 0 V para a tenso fornecida pela fonte de alimentao e depende da
coordenada X. Se o ponto de contacto est perto Uma superfcie esquerda, a tenso prximo de 0V.

Para a determinao da coordenada Y, necessrio ligar o contacto com a superfcie de fundo B at o solo (terra), enquanto que o contacto
superior est ligado fonte de alimentao. Neste caso, a tenso pode ser lido na superfcie de contacto esquerdo A.
Para conectar uma tela sensvel ao toque para o microcontrolador necessrio criar um circuito para o controle do painel de toque.Atravs
deste circuito, o microcontrolador conecta os contactos adequados do painel de toque para terra e tenso de alimentao (conforme descrito
acima) para determinar as coordenadas X e Y. A menor superfcie de contato B eo contato esquerda da superfcie A Eles esto ligados a um
conversor A / D do microcontrolador. As coordenadas X e Y so determinados atravs da medio da tenso nos respectivos contactos. O
software para exibir um menu no LCD grfico, ligar e desligar o painel de toque (painel de controle sensvel ao toque) e ler os valores de
conversor A / D que, na verdade, representam as coordenadas X e Y da posio.
Depois de determinar as coordenadas, possvel decidir o que queremos fazer o microcontrolador. Este exemplo mostra como ligar e
desligar dois pinos do microcontrolador digitais, conectado a LEDs A e B.
Neste exemplo, as funes que pertencem ao GLCD ADC e bibliotecas so utilizadas.
Considerando que a superfcie do painel de toque um pouco maior do que o grfico LCD, quando necessitar de maior preciso na
determinao das coordenadas, necessrio incluir a calibrao do painel de toque de software.

/ * Cabealho *********************************************** **** /


// Conexes Mdulo
GLCD conexes mdulo finais
// Declarao
carvo animal
carvo animal
carvo animal
carvo animal
carvo animal
carvo animal
carvo animal
carvo animal

da string
msg1 [] =
msg2 [] =
msg3 [] =
msg4 [] =
msg5 [] =
msg6 [] =
msg7 [] =
msg8 [] =

a ser exibida nas GLCD


"EXEMPLO Touchpanel";
"mikroElektronika";
"BUTTON1";
"BUTTON2";
"OFF RC6";
"OFF RC7";
"ON RC6";
"RC7 ON";

// Declarao de variveis globais


longo x_coord, y_coord, x_coord128, y_coord64; // armazenar a posio do
// Coordenadas X e Y
// Leia a coordenada X
unsigned int getX () {
// leitura X
PORTC.F0 = 1;
// DRIVEA = 1 (eletrodo esquerda (LEFT) eletrodo conectado
// Direito (direito) ligado, elctrodo superior (TOP) off-line )
PORTC.F1 = 0;
// DRIVEB = 0 (eletrodo inferior (fundo) off-line)
Delay_ms (5);
retornar ADC_Read (0); // ler o valor de X de RA0 (parte inferior)
}
// Leia a coordenada Y
unsigned int Gety () {
// Leia e
PORTC.F0 = 0;
// DRIVEA = 0 (eletrodo esquerda (LEFT) desligada, eletrodo
// direito (RIGHT) desligada, elctrodo superior (TOP) conectado)
PORTC.F1 = 1;
// DRIVEB = 1 ligado (inferior eletrodo (BOTTOM))
Delay_ms (5);
retornar ADC_Read (1); // ler o valor de Y RA1 (LEFT eletrodo esquerdo)
}
vazio main () {
PORTA = 0x00;
TRISA = 0x03; // RA0 e RA1 so entradas analgicas
ANSEL = 0x03;
ANSELH = 0;
// definir outras AN pin como digital I / S
PORTC = 0;
// Tudo PORTC pinos da porta so 0 (incluindo
// RC6 pino e RC7)
TRISC = 0;

// PORTC uma produo

// Inicializao GLCD
Glcd_Init ();
// Glcd_Init_EP5
Glcd_Set_Font (FontSystem5x7_v2, 5, 7, 32); // Selecione o tamanho da fonte 5x7
Glcd_Fill (0);
// Delete GLCD
Glcd_Write_Text (msg1,10,0,1);
Glcd_Write_Text (msg2,17,7,1);
// exibe botes no GLCD:
Glcd_Rectangle (8,16,60,48,1);
Glcd_Rectangle (68,16,120,48,1);
Glcd_Box (10,18,58,46,1);
Glcd_Box (70,18,118,46,1);
// Exibir mensagens em botes
Glcd_Write_Text (msg3,14,3,0);
Glcd_Write_Text (msg5,14,4,0);
Glcd_Write_Text (msg4,74,3,0);
Glcd_Write_Text (msg6,74,4,0);
enquanto (1) {
// l XY e converter a resoluo de 128x64 pixels
x_coord = getX ();
y_coord = Gety ();
x_coord128 = (x_coord * 128) / 1024;
y_coord64 = 64 - ((y_coord * 64) / 1024);
// Se BUTTON1 foi pressionado
se ((x_coord128> = 10) && (x_coord128 <= 58) && (y_coord64> = 18) &&
(Y_coord64 <= 46)) {
se (PORTC.F6 == 0) {
// Se RC6 = 0
PORTC.F6 = 1;
// reverter o estado lgico do pino RC6
Glcd_Write_Text (msg7,14,4,0);
// exibe uma nova mensagem: RC6 ON
}
mais { // Se RC6 = 1
PORTC.F6 = 0;
// reverter o estado lgico do pino RC6
Glcd_Write_Text (msg5,14,4,0);
// exibe uma nova mensagem: RC6 OFF
}

}
// Se BUTTON2 foi pressionado
se ((x_coord128> = 70) && (x_coord128 <= 118) && (y_coord64> = 18) &&
(Y_coord64 <= 46)) {
se (PORTC.F7 == 0) { // Se RC7 = 0
PORTC.F7 = 1;
// reverter o estado lgico do pino RC7
Glcd_Write_Text (msg8,74,4,0);
// exibe uma nova mensagem: RC7 ON
}
mais { // Se RC7 = 1
PORTC.F7 = 0;
// reverter o estado lgico do pino RC7
Glcd_Write_Text (msg6,74,4,0);
// exibe uma nova mensagem: RC7 OFF
}
}
Delay_ms (100);
}
}
Para este exemplo funcione corretamente, voc precisa marcar as seguintes bibliotecas na janela Library Manager antes de compilar o
programa.

GLCD
ADC
C_Stdlib

Apndice A: hora de se divertir


Um microcontrolador como um "gnio da garrafa" e no precisa saber muito de usar. Para criar um dispositivo controlado por um
microcontrolador, voc precisa de um PC, um programa para compilar e um dispositivo para transmitir o cdigo a partir do PC para o chip em
si. Embora este processo parece muito lgico, perguntas surgem frequentemente, no porque complicado, mas muitas variaes.Vamos
ver ...

A.1 DEIXE O COMEO ...


PROGRAMA A.2 COMPILATION
A.3 programa do microcontrolador
Desenvolvimento de Sistemas A.4

vamos comear ...


Programas especiais no ambiente do Windows so usadas para escrever um programa para o microcontrolador. Este livro descreve o
programa chamado PRO para PIC mikroC. A principal vantagem deste programa so ferramentas adicionais instalados para facilitar o
processo de desenvolvimento.
Se voc tem experincia em programas de escrita, voc sabe que a escrita todas as instrues na forma a ser executado pelo
microcontrolador e observar as regras da linguagem C. Em outras palavras, basta seguir sua idia para escrever o programa. isso!

PROGRAMA A.2 COMPILATION


O microcontrolador no entende a linguagem de programao de alto nvel, por isso necessrio para compilar o programa em linguagem
de mquina. Basta premir apenas uma vez no cone apropriado dentro do compilador para criar um novo documento com extenso .hex. Na
verdade, o mesmo programa, mas compilado em linguagem de mquina do microcontrolador entende. Este programa muitas vezes
chamado de um cdigo hexadecimal e formam uma seqncia de nmeros hexadecimais aparentemente sem sentido.

Uma vez terminado, o programa deve ser carregado no chip. Voc precisa de um hardware adequado para tornar isso possvel - um
programador.

Programar o microcontrolador
Como mencionado, para permitir carregar um cdigo hexadecimal para o microcontrolador necessrio proporcionar um dispositivo especial
chamado o programador, com o software apropriado. Um grande nmero de programas e circuitos electrnicos utilizados para este fim pode
ser encontrado na internet. O procedimento basicamente o mesmo para todos eles e se parece com o seguinte:

1. Coloque o microcontrolador no soquete apropriado do programador;


2. Use um cabo apropriado para conectar o controlador a um PC;
3. Abra o programa em cdigo hexadecimal no software programador, configurar vrios parmetros, e clique no cone
transmitir o cdigo. Poucos segundos depois, uma sequncia de zeros e uns ser programado para o microcontrolador
Ele s foi instalado no chip programado dispositivo de destino. Se voc precisa fazer algumas mudanas no programa, o procedimento acima
pode ser repetido qualquer nmero de vezes.

A.3 haver um final feliz?


Esta

seo

descreve

brevemente

uso

do

programa

(compilador) mikroC

PRO

para

PIC e

software

de

programao

(programador)PICflash . Tudo muito simples ...


Voc j instalou o mikroC PRO para PIC , certo? Quando iniciado, abra um novo projeto e um novo documento com .c dentro. Digite o seu
programa ...

OK. O programa tem-se escrito e testado com o simulador. Ele no relatou quaisquer erros durante o processo de compilao no cdigo
hexadecimal ? Parece que tudo est sob controle ...
Aprovada. O programa foi escrito e testado com o simulador. Voc no relatou qualquer erro durante o processo de compilao no cdigo
hexadecimal? Parece que tudo funciona perfeito ...
O programa foi compilado com sucesso. Apenas carregado para o microcontrolador. Agora voc precisa de um programador que
compreende software e hardware. Inicie o programa PICFlash .
A configurao simples e sem necessidade de explicaes adicionais (tipo de frequncia do oscilador do relgio microcontrolador e etc.).

Conecte o computador ao hardware programador para um cabo USB;


Coloque o cdigo hexadecimal usando o comando: arquivo para carregar HEX; e
Clique no boto Gravar e aguarde ...

isso! O microcontrolador programado e tudo est pronto para a operao. Se voc no estiver satisfeito, fazer algumas alteraes no
programa e repita o procedimento. Quanto tempo? At que esteja satisfeito ...

Desenvolvimento de Sistemas A.4


Um dispositivo que pode simular qualquer dispositivo na fase de testes, chamado um sistema de desenvolvimento. Alm do controlador,
fonte de alimentao da unidade soquete sistema de desenvolvimento microcontrolador tem componentes para ativar os pinos de entrada do
monitor e pinos de sada. A verso mais simples de cada pino ligado ao seu respectivo boto de presso e LED.

A verso de alta qualidade tem os pinos ligados aos indicadores LED, LCD exibe, sensores de temperatura e outros componentes que
podem ser constitudos por um dispositivo de destino. Se necessrio, todas estas perifricos possam ser ligados ao microcontrolador atravs
de pontes. Isso permite que o teste de programa inteiro na prtica, mesmo durante o processo de desenvolvimento, porque o
microcontrolador no "sabe ou no se importa" se a sua entrada para boto de presso ou um construdo em um sensor de dispositivo real
ativada.
Se voc tem um sistema de desenvolvimento, o processo de programa e testar um programa ainda mais simples. Dado que o mikroC PRO
para PIC (no seu PC) eo PICflash hardware programador (em seu sistema de desenvolvimento) funcione corretamente, o processo de
compilao de um programa e programar o microcontrolador realizada em uma nica passagem - quando voc clica no cone do Programa
Construir e no compilador. A partir de agora, qualquer alterao no programa afetam imediatamente o funcionamento de qualquer
componente do sistema de desenvolvimento.
Voc concorda com a gente que hora de se divertir?

As principais caractersticas do sistema de desenvolvimento EasyPIC6

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.

Regulador de tenso de alimentao


Conector USB para o programador na placa
Programador USB 2.0 com suporte mikroICD
Tomada para o sensor de temperatura DS1820
Connector para o depurador externo (ICD2 ou ICD3) Microchip
Conector USB para a comunicao
Os inputs de teste de A / D
Conector PS / 2
LCD 2x16 no prato
DIP switches permitir a operao de resistncia pull-up / pull-down
Ponte para seleccionar a resistncia de pull-up / pull-down
Conectores de portas E / S
Socket para colocar o microcontrolador PIC
Pensamento controlador do painel Tactics
Portos Extender
LCD conector grfico128x64
Potencimetro contraste grfico LCD
Conector do painel de toque
Menu de Teclado
Teclado 4x4
Botes de presso para simular as entradas digitais
Ponte para selecionar o estado lgico dos botes
O curto-circuito proteo resistncia ponte
Boto para reiniciar o microcontrolador
36 LEDs indicam o estado dos pinos
Contraste Ajuste alfanumrico LCD
Conector LCD alfanumrico
28. Conector para a comunicao RS-232