You are on page 1of 13

microcontroladores PIC Portas I/O - Entrada/Saída

ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
80
Portas I/O - Entrada/Saída
Funcionalidades e Funções
Uma das mais importantes funcionalidades do microcontrolador, é o número de pinos I/O usados para ligação
aos periféricos externos. Neste caso do PIC16F887, há um total de 35 pinos I/O de uso geral.
De maneira a que o funcionamento dos pinos I/O coincida com a organização a 8 bits, todos eles estão, simi-
larmente aos registos, agrupados em Portas denominadas A, B, C, D e E.
Todas têem características em comum:
Por razões práticas, a maioria dos pinos I/O têm várias funções. Se um pino é usado para uma qualquer
função, não pode ser usado como I/O;
Cada porta tem um par, isto é, o correspondente registo TRIS: TRISA, TRISB, TRISC, TRISD e TRISE,
que determina o funcionamento, mas não o conteúdo.
Limpando os bits do TRIS (bit=0), o correspondente pino da Porta é configurado como Saída.
De igual forma, activando os bits do TRIS (bit=1), o correspondente pino da Porta é configurado como En-
trada.
Esta regra é simples de memorizar: 0 = Output (Saída), 1 = Input (Entrada)


microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
81
Portas I/O - Entrada/Saída
Registos PORTA e TRISA
A Porta A é um registo de 8 bits bidireccionais. Os bits do TRISA e ANSEL controlam os pinos da PORTA.
Todos os pinos da PORTA funcionam como I/O digital, e cinco deles ainda podem trabalhar como entradas
analógicas (descritas a AN):
microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
82
Similarmente aos bits do TRISA, que determinam quais dos pinos vão ser configurados como entrada ou
saída, os bits respectivos do ANSEL determinam quais os pinos que vão ser usados como entradas analógicas
ou I/O digitais.
RA0 = AN0 (determinado pelo bit ANS0 do registo ANSEL);
RA1 = AN1 (determinado pelo bit ANS1 do registo ANSEL);
RA2 = AN2 (determinado pelo bit ANS2 do registo ANSEL);
RA3 = AN3 (determinado pelo bit ANS3 do registo ANSEL); e
RA5 = AN4 (determinado pelo bit ANS4 do registo ANSEL).
Cada bit desta porta tem uma funcção adicional, relacionada com algum periférico interno. Estas funções
adicionais vão ser discutidas mais à frente.
Unidade ULPWU
O microcontrolador é normalmente usado em dispositivos que têem que funcionar periodicamente e, comple-
tamente independentemente, usando energia de baterias. Nestes casos, o consumo de energia deverá ser o mais
reduzido possível e prioritário. Exemplos típicos dessas são: termómetro, sensores de detecção de incêndio e
produtos de baixo consumo similares. Também é sabido que, uma redução na frequência de relógio reduz o
consumo energético, então, uma das mais convenientes soluções para esta situação é reduzir o relógio (usar um
cristal de 32KHz em vez de 4MHz ou 20MHz).





microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
83
Colocar o microcontrolador em modo de adormecido
(Sleep) é outro passo a dar. No entanto, mesmo com ambas
as medidas aplicadas, outra situação aparece. Como acordar
o microcontrolador, e colocá-lo em modo normal de opera-
ção. É obviamente necessário ter um sinal externo, que mude
de estado lógico em um dos pinos. Mesmo assim, a situação
ainda persisnte. Este sinal deverá ser gerado por electrónica
adicional, o que causa um aumento do consumo de energia
do sistema.
A solução ideal será a de, o microcontrolador, acordar sózinho periódicamente, o que é perfeitamente possível.
O circuito que o permite fazer, é mostrado aqui.
O princípio de operação é simples:
Um pino é configurado como saída, e é activado a nível lógico 1. Isso causa o condensador ser carregado.
Imediatamente depois, o mesmo pino é configurado como entrada. A mudança de estado lógico, habilita uma
interrupção, e o microcontrolador é posto em modo Sleep.
Seguidamente não há nada a fazer, excepto aguardar que o condensador se descarregue, através da corrente
de fuga que flui pelo pino de entrada. Quando isso ocorre, uma interrupção é gerada e o microcontrolador
continua a execução do programa em modo normal. A sequência é outra vez repetida.
Teoricamente, esta é uma solução perfeita. O problema é que, todos os pinos possíveis de gerar uma interrup-
ção, são digitais, e têem uma corrente de fuga excessivamente grande, quando a sua voltagem não está próxima
dos limites de Vdd ou Vss. Neste caso, o condensador é descarregado rapidamente, pois a corrente de descarga
é de várias centenas de microamperes. Esta é a razão pela qual o circuito ULPWU foi desenhado para ter lentas
quedas de tensão, e muito baixo consumo. A sua saída gera uma interrupção, enquanto que a entrada é ligada
a um dos pinos do microcontrolador. Está no pino RA0. Vendo a figura abaixo, com R=200ohms e C=1nF,
descarrega em aproximadamente 30ms, enquanto que o consumo total do microcontrolador reduz-se em 1000
vezes (algumas centenas de nanoamperes).
microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
84
Unidade ULPWU
Registos PORTB e TRISB
A Porta B é um registo de 8 bits bidireccionais. Os bits do registo TRISB determinam a função dos seus
pinos.
Similarmente à Porta A, um 1 lógico no registo TRISB, configura o pino respectivo como entrada, e vice-versa.
Seis pinos desta porta podem ser configurados como entrada analógica (AN). Os bits do registo ANSELH
determinam quais destes pinos vão trabalhar como entradas analógicas ou I/O digitais.
microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
85
RB0 = AN12 (determinado pelo bit ANS12 do registo ANSELH);
RB1 = AN10 (determinado pelo bit ANS10 do registo ANSELH);
RB2 = AN8 (determinado pelo bit ANS8 do registo ANSELH);
RB3 = AN9 (determinado pelo bit ANS9 do registo ANSELH);
RB4 = AN11 (determinado pelo bit ANS11 do registo ANSELH); e
RB5 = AN13 (determinado pelo bit ANS13 do registo ANSELH).
Cada bit desta porta tem uma função adicional, relacionada com algum periférico interno. Estas funções adi-
cionais vão ser discutidas mais à frente.
Todos os pinos desta porta têem resistências pull-ups internas, o que faz deles ideais para ligar botões-
de-pressão, interruptores, foto-acopladores, entre outros. De forma a ligar estas resistências às portas dos
microcontroladores, o bit apropriado do registo WPUB deve ser activado.
Além dos bits do WPUB, há outro bit que afecta a operação das resistências pull-up: o bit RBPU do registo
OPTION_REG. É um bit de uso geral, porque afecta a instalação global destas resistências.
Sendo de alta impedância, estes resistências virtuais não afectam os pinos configurados como saídas, mas
servem de extraordinária ajuda para as entradas. Assim, estão ligadas às entradas dos circuitos lógicos CMOS.
De outra maneira, comportar-se-iam como se estivessem a flutuar, devido ao estado de alta impedância.







microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
86
Resistências de Pull-up
Se habilitado, cada pino da Porta B configurado como entrada, pode causar uma interrupção, mudando o
seu estado lógico. De maneira a habilitar os pinos que podem gerar a interrução, o bit respectivo no registo
IOCB deverá ser activado.
Devido a estas particularidades, os pinos da Porta B são normalmente usados para ligar botões-de-pressão, ou
teclados, pois não há necessidade de perder ciclos de programa a fazer o “varrimento” destas entradas.

microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
87
Exemplo de Teclado
Quando os pinos X, Y e Z estão configuradas como saídas activadas ao estado lógico 1, é apenas necessário
esperar por um pedido de interrupção, que chega quando qualquer botão é premido. Fazendo, então, o var-
rimento das teclas, pode encontrar-se qual a que está a ser premida.
Pino RB0/INT
O pino RB0/INT é uma fonte verdadeira de interrupção externa. Pode ser configurado para reagir a um flanco
ascendente ou descentence. O bit INTEDG do registo OPTION_REG selecciona qual o sinal.
Pinos RB6 e RB7
O leitor já deve ter notado que o microcontrolador PIC não tem quaisquer pinos especiais para a programação
(escrever para a memória de programa). Os pinos I/O normalmente usados para o funcionamento normal, são
usados para este fim (RB6 para o clock e RB7 para dados). Também, é necessário alimentar o chip com 5V em
microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
88
Vdd e 0V em Vss, como também a tensão de programação Vpp da FLASH (12-14V). Durante a programa-
ção, a tensão Vpp é aplicada no pino de Reset (MCLR).
Apesar destas ligações serem necessárias, o microcontrolador pode ser gravado mesmo estando já montado
no sistema final. Normalmente, um programa já gravado pode ser alterado pelo mesmo processo. Esta função
chama-se ICSP (In-Circuit Serial Programming - Programação Série Dentro do Circuito).
É necessário planear o sistema, se se pretende usar esta funcionalidade.
Não é nada de complicado, basta instalar um conector de 5 pinos no sistema a gravar, para que as tensões do
hardware programador possam aceder ao microcontrolador. De maneira a que estas tensões não interfiram
com a restante electrónica, deverá ser pensado um circuito para travar as mesmas, usando resistências, díodos
ou jumpers.
Ligação ICSP
Registos PORTC e TRISC
A Porta C é um registo de 8 bits bidireccionais. Os bits do registo TRISC determinam a função dos seus pinos.
Todas as funções adicionais desta porta, serão explicadas mais à frente.
microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
89
Registos PORTD e TRISD
A Porta D é um registo de 8 bits bidireccionais. Os bits do registo TRISD determinam a função dos seus
pinos.
Registos PORTE e TRISE
A Porta E é um registo de 8 bits bidireccionais. Os bits do registo TRISE determinam a função dos seus pinos.
A única excepção é o pino RE3, que apenas serve de entrada, e o seu bit TRIS lê sempre “1”.
microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
90
Similarmente às Portas A e B, três pinos podem ser configurados como entradas analógicas. Os bits do registo
ANSELH determinam se o pino vai funcionar como entrada analógica (AN), ou se como I/O digital :
RE0 = AN5 (determinado pelo bit ANS5 do registo ANSELH);
RE1 = AN6 (determinado pelo bit ANS6 do registo ANSELH); e
RE2 = AN7 (determinado pelo bit ANS7 do registo ANSELH).
Registos ANSEL e ANSELH
Ambos estes registos são usados para configurar os pinos como analógico, ou I/O digital.



microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
91
Como fazê-lo:
Para configurar um pino como entrada analógica, o bit respectivo do ANSEL, ou ANSELH, deverá ser acti-
vado a 1. Para configurar o pino como I/O digital, o bit respectivo deverá ser desactivado (0).
O estado dos bits ANSEL, não tem qualquer efeito nas funções de saída digitais. O resultado de qualquer
tentativa de leitura de um pino configurado como entrada analógica, é 0.


microcontroladores PIC Portas I/O - Entrada/Saída
ant óni o sér gi o sena
www. senaeng. com : : pr oj ect os e sol uções em el ect r óni ca
+351. 967033209
92
Quando se projecta um sistema, escolher a porta através da qual o microcontrolador vai comunicar com os
periféricos circundantes. Se se pretender usar apenas I/O digitais, pode escolher-se qualquer das portas. Se
se pretender usar algumas das entradas analógicas, deverá escolher-se as portas apropriadas que suportam
essa configuração, AN0-AN13;
Qualquer pino pode ser configurado como entrada ou saída, excepto o RE3 apenas como entrada. Os bits
dos TRISA, TRISB, TRISC, TRISD e TRISE, determinam como os respectivos pinos das PORTA,
PORTB, PORTC, PORTD e PORTE se vão comportar;
Se se usarem quaisquer entradas analógicas, activar o bit respectivo no ANSEL e ANSELH, no início do
programa;
Se se usarem interruptores ou botões-de-pressão, deverão ser ligados à Porta B, porque esta têm resistências
de pull-up. O uso destas resistências é habilitado pelo bit RBPU no OPTION_REG, e onde a activação
de resistências individualmente é possivel nos bits do WPUB; e
É normalmente necessário reagir, assim que os pinos de entrada mudam de estado lógico. No entanto, não é
necessário escrever um programa para mudar o estado lógico dos pinos. É mais simples ligar estas entradas
aos pinos da PORTB, e habilitar a interrupção a cada mudança de estado lógico. Os bits dos registos
IOCOB e INTCON servem para tal.