Você está na página 1de 25

Projeto de Sistemas Microcontrolados utilizando PIC

PORTAS DE ENTRADA E DE SAÍDA

Alguns pinos são multiplexados com funções alternativas. Em geral, quando estes periféricos estão habilitados, o pino não
pode ser utilizado como uma entrada genérica de Entrada e Saída.

Vamos começar olhando a arquitetura e função de cada porta individualmente.


PORTA e TRISA

PORTA é uma porta bidirecional de 6 bits de largura. O registrador correspondente que controla a direção dos dados (Entrada
ou Saída) é o TRISA. Fazendo um bit de TRISA igual a “1”, vai fazer o pino correspondente funcionar como entrada (Coloca
o driver de saída deste pino em modo de alta impedância). Tornando o bit igual a “0” vai fazer o pino correspondente a este bit
funcionar como saída (Coloca na saída do pino o conteúdo do armazenado no lacth.

Diagrama em blocos dos pinos RA0, RA1, RA2, RA3.

1
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

Tomaremos como exemplo a linha RA0 e analisaremos o seu funcionamento.

FUNCIONAMENTO COMO ENTRADA

Para configurar a linha RA0 em entrada, devemos colocar em 1 o bit 0 do registro TRISA com a instrução:

bsf TRISA,0

Esta instrução determinará que a saída Q do flip-flop do tipo D-latch, indicado no bloco com o nome de TRIS Latch, vá para o
nível “1”. A saída Q do TRIS latch é conectada a entrada de uma porta lógica do tipo OR. Isto significa que, independente do
valor presente na outra entrada, a saída da porta OR estará sempre em “1”. E nesta condição o transistor P não conduz e
mantém a linha RA0 desconectada do positivo da alimentação.

Do mesmo modo a saída complementar Q do TRIS latch é conectada a entrada de uma porta AND onde a saída desta estará
sempre em “0”’ enquanto uma de suas entradas valer 0. Nesta condição o transistor N não conduz mantendo a linha RA0
desconectada da massa. Estando ambos os transistores sem conduzir, é como se ambos os transistores não existissem, ou seja,
o estado lógico da linha RA0 dependerá exclusivamente do circuito externo a que estiver conectado.

Aplicando 0 ou 5 volts ao pino RA0, será possível lermos o estado presente no circuito externo a entrada do bloco representado
por TTl input buffer e do latch de entrada.

LEITURA DO VALOR PRESENTE NO PINO RA0

Para lermos o estado da chave conectada a linha RA0, o código será:

btfss PORTA,0 ; LÊ O PINO RA0

goto Conectado_a_massa

goto Conectado_ao_positivo

FUNCIONAMENTO COMO SAÍDA

Para configurar a linha de RA0 como saída, devemos colocar em 0 o bit 0 do registro TRISA com a instrução:

bcf TRISA,0

Esta determina a comutação para “0” da saida Q do TRIS latch ( e “1” a saida Q complementar). Neste estado o valor da saída
da porta OR e AND dependem exclusivamente do estado de saída do Q complementar do Data Latch.

2
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

Se o valor do data latch for “1”, a saída complementar valerá “0” e também a saída Q do TRIS latch valerá zero, portanto
teremos “0” na saída da porta OR, assim o transistor P será levado à condução, conectando a linha positiva à saída. Ao mesmo
tempo a saída da porta AND terá valor “0” e neste caso o transistor N fica bloqueado.

Se o valor do data latch for “0”, a saída complementar valerá “1” e também a saída Q do TRIS latch valerá zero, portanto
teremos “1” na saída da porta OR, assim o transistor P será levado ao bloqueio, desconectando a linha positiva da saída. Ao
mesmo tempo a saída da porta AND terá valor “1” e neste caso o transistor N será levado à condução, conectando a linha de
massa à saída.

ESCREVENDO UM VALOR NO PINO RA0

Se colocarmos em “0” o bit 0 do registro PORTA com a instrução:

bcf PORTA,0

obteremos a condução do transistor N e portanto linha RA0 conterá “0” em sua saída.. Se ao contrário, colocarmos em “1” o
bit 0 com a instrução:

bsf PORTA,0

obteremos a condução do transistor P e portanto a linha RA0 irá para +5 volts (valor lógico 1).

RESUMO DOS REGISTRADORES ASSOCIADO COM PORTA

ENTRADAS ANALÓGICAS

Os pinos RA0, RA1, RA2 e RA3 da PORTA A são multiplexados com entradas analógicas e entrada de referência para os
conversores A/D e os comparadores. A operação de cada pino é selecionada através da programação apropriada dos bits dos
registradores ADCON1 e/ou CMCON.

O registrador TRISA controla a direção dos pinos mesmo quando usados como entradas analógicas. O programador deve
assegurar que os bits de TRISA são mantidos em “1” quando utilizados como entrada analógica.

3
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

ADCON1

CONFIGURAÇÃO DOS BITS 3-0 DE ADCON1

VALORES DE ADCON1 LOGO APÓS O RESET

POR OUTROS RESETS

ADCON1 0000 0000 0000 0000


ATENÇÃO: No POR (POWER ON RESET) A PORTA A INTEIRA é configurada para funcionar
como ANALÓGICA. Se desejar utilizá-la como DIGITAL deve se configurar a porta A
convenientemente.

INICIALIZANDO A PORTA A (PORTA) PARA USO DIGITAL

BCF STATUS, RP0

BCF STATUS, RP1 ; Seleciona Banco 0

CLRF PORTA ; Limpa os latches de saída

BSF STATUS,RP0 ; Seleciona Banco 1

MOVLW B’00000111’

4
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

MOVWF ADCON1 ;Desliga conversores A/D

; (A PORTA INTEIRA É CONFIGURADA COMO DIGITAL)

MOVLW B’00001111’ ;RA<3:0>ENTRADAS,RA<5:4> SAÍDAS

MOVWF TRISA ;Define direção dos dados

CMCON

POR OUTROS RESETS

CMCON 0000 0111 0000 0111

ATENÇÃO: No POR (POWER ON RESET) Os comparadores estão desligados (entrada digital).

PINO RA4/T0CKI

O quinto pino da porta A tem uma função dupla O pino RA4 é multiplexado com a entrada de clock externa do temporizador
TIMER0. Cada uma destas opções é escolhida pondo em ‘1’ ou ‘0’ o bit TOCS (bit e seleção de fonte de clock de TMR0).
Conforme o valor deste bit, assim o temporizador TMR0 incrementa o seu valor devido a um impulso do oscilador interno ou
devido a um impulso externo aplicado ao pino RA4/TOCKI.

A entrada RA4/T0CKI é do tipo Schmitt Trigger e a saída e do tipo dreno aberto. Todos os demais pinos da PORTA A têm
nível de entrada TTL e saída CMOS.

DIAGRAMA EM BLOCOS DO PINO RA4/T0CKI

5
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

Analisaremos agora o funcionamento da linha RA4, que é diferente de todas as outras linhas de I/O enquanto compartilha o
mesmo pino com o TOCKI o qual iremos analisar posteriormente.

A lógica de funcionamento é praticamente idêntica ao grupo das linha RA0 a RA3 com exceção da ausência da porta OR e do
transistor P, ou seja, quando o latch de saída estiver em nível 1, o pino não será ligado ao positivo. Este pino ficará
“flutuando”, ou seja, sem conexão com nenhuma fonte de potencial. Isto significa em termos práticos, que quando a linha RA4
esta programada como saída poderá assumir um nível que dependerá do circuito externo. Este tipo de circuito de saída chama-
se "dreno aberto" e é útil em aplicações quando é necessário compartilhar uma mesma ligação com mais de um pino de saída
ou que se tenha valores de tensão diferentes.

Se quisermos garantir que a linha RA4 tenha o nível “1” quando o valor do dado de saída é “1”, devemos conectar
externamente um resistor de pull-up, ou seja, um resistor conectado ao positivo da alimentação.

Sua entrada é um dispositivo Schmitt-Trigger (ST).

Observe também que a saída de RA4 é do tipo dreno aberto (open drain), então quando esta for usada como saída
são requeridos componentes externos adicionais, normalmente um resistor de polarização alta, para completar o
circuito de saída.

DIAGRAMA EM BLOCOS DO PINO RA5

6
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

PORTB e TRISB

PORTB é uma porta bidirecional de 8 bits. O registrador de controle correspondente é TRISB. Tornando um bit de TRISB
igual a “1” vai fazer com que o correspondente pino de PORTB funcione como entrada (coloca o driver de saída em modo de
alta impedância). Fazendo o bit igual a “0” vai fazer com que o pino correspondente de PORTB funcione como saída. Três
pinos de PORTB são multiplexados com o ICD (IN CIRCUIT DEBUGGER) e programação de baixa voltagem (RB3/PGM,
RB6/PGC e RB7/PGD).

7
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

A porta B tem 8 pinos associados a ele. O respectivo registro de direção de dados chama-se TRISB. Ao por em ‘1’ um bit do
registro TRISB, define-se o correspondente pino da porta como entrada e se pusermos em ‘0’ um bit do registro TRISB, o pino
correspondente vai ser uma saída.

Cada pino da porta B possui uma pequena resistência de polarização positiva (do inglês Weak Pull-Up – WPU) . Esta
pequena resistência define o potencial do pino como tendo o valor lógico ‘1’. Um único bit de controle
(RBPU) pode habilitar ou desabilitar estes circuitos de polarização para o PORTB inteiro. A lógica de
ativação é invertida, ou seja, para desativar, o bit RBPU (OPTION_REG<7>) deverá ser colocado em
“1”. A polarização é automaticamente desabilitada quando este é colocado no modo de funcionamento
como saída.

As polarizações fracas positivas (WPU) estão desabilitadas quando a alimentação do microcontrolador é ligada.

AS INSTRUÇÕES ABAIXO HABILITAM “WPU” DE PORTB

BSF STATUS, RP0 ; seleciona o banco 1

8
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

BCF OPTION_REG,7 ;0=pull-up habilitado

AS INSTRUÇÕES ABAIXO DESABILITAM ‘WPU’ DE PORTB

BSF STATUS, RP0 ; seleciona o banco 1

BSR OPTION_REG,7 ; 1=pull-up desabilitado

DIAGRAMA EM BLOCOS DE RB0, RB1, RB2 e RB3

O pino RBO/INT pode funcionar como uma entrada de interrupção externa, sendo para isso configurado o bit INTEDG
(OPTION_REG<6>).

CLRF STATUS

CLRF PORTB

BSF STATUS, RP0 ; Seleciona o banco 1

9
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

MOVLW B’00001111’ ; Define RB0:3 como entrada, RB4:7 como saída

MOVWF TRISB ; Escrever no registrador TRISB

BCF OPTION_REG,7 ; HABILITA POLARIZAÇÃO POSITIVA FRACA

BCF STATUS, RP0 ; Volta para o banco 0

O exemplo acima mostra como os pinos 0, 1, 2 e 3 são definidos como entradas e 4, 5, 6 e 7 como saídas.

PINOS RB4, RB5, RB6 e RB7

DIAGRAMA EM BLOCOS DE RB4, RB5, RB6 e RB7

O circuito de comutação deste grupo de pinos é idêntico ao do grupo RB0:3. Estes pinos dispõem também de um circuito de
weak pull-up.

10
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

Quatro pinos da Porta B (RB4:RB7) tem uma interrupção associada à mudança de seus valores. Somente os pinos configurados
como entradas podem causar este tipo de interrupção.

Os valores dos pinos de entrada (RB4:RB7) são comparados com os valores anteriores armazenados nos latches da PORTA
B. Caso sejam diferentes será gerada uma interrupção que será sinalizada no flag RBIF (INTCON<0>).

Se qualquer um destes 4 pinos (RB4:RB7) for configurado como saída, não será gerada uma interrupção quando
houver alteração de estado

Esta modalidade de interrupção, acompanhada da existência de resistências de pull-up internas, torna


possível resolver mais facilmente problemas freqüentes que podemos encontrar na prática, como por
exemplo a ligação de um teclado matricial. Se as linhas de um teclado ficarem ligadas a estes pinos,
sempre que se pressiona uma tecla será provocada uma interrupção. Ao processar a interrupção, a rotina
terá que identificar qual tecla que a produziu.

Não é recomendável utilizar a porta B enquanto se está processando o tratamento de uma interrupção.

esta interrupção acordará o “acordará” o dispositivo caso este esteja em modo “Sleep” . O usuário, dentro da Rotina de
Tratamento da Interrupção, pode limpar o flag de interrupção de duas maneiras diferentes:

a) Qualquer operação de leitura ou escrita na PORTA B. Isto terminará a condição de não coincidência dos bits.
b) Tornar “0” o bit RBIF.

Esta interrupção é muito útil em dispositivos de teclado portáteis que são usados eventualmente. O microprocessador fica em
espera “Sleep” (modo de baixo consumo) até que qualquer tecla seja pressionada. Quando isto ocorre, este se ativa, processa a
tarefa determinada e volta para o repouso até que seja novamente pressionada qualquer tecla, quando então, recomeçará o
mesmo ciclo.

RESUMO DOS REGISTRADORES ASSOCIADOS COM PORTB

11
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

PORTC e TRISC

PORTC é uma porta bidirecional de 8 bits. O registrador correspondente para configurar a direção dos dados é TRISC.
Configurando um bit TRISC com o nível alto ("1") faz com que o pino correspondente de PORTC funcione como
ENTRADA. Colocando o valor lógico "0" em um bit de TRISC vai fazer com que o pino correspondente de PORTC
funcione como SAÍDA.

PORTC é multiplexado com muitos outros periféricos (veja tabela). Todos os pinos de PORTC são buffers de entrada do tipo
Schmitt-Trigger.

Quando o protocolo de comunicação serial I2C é habilitado, os pinos RC3 e RC4 podem ser configurados ou para trabalhar
com os níveis normais de I2C ou com os níveis do protocolo SMBus, através da configuração do bit CKE (SSPSTAT<6>).

Quando habilitada alguma função de periférico, deve se tomar o cuidado de se definir cada um dos bits de TRISC com cada
pino de PORTC. Alguns periféricos podem sobrescrever o bit de TRISC para fazê-lo funcionar como saída, outros podem
sobrescrever para funcionarem como entradas. Assim uma vez habilitado o funcionamento dos periféricos, deve se evitar de
realizar operações de escrita nos bits de TRISC, portanto, instruções como BSF, BCF e XORWF não devem ser utilizadas.

PORTC é multiplexado com vários periféricos, conforme a tabela abaixo:

OS pinos de entrada de PORTC são do tipo Schmitt-Trigger.

FUNÇÕES DOS PINOS DE PORTC

12
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

DIAGRAMA EM BLOCOS DE PORTC (RC<2:0> e RC(7:5>)

13
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

DIAGRAMA EM BLOCOS DE PORTC (RC<4:3)

RESUMO DOS REGISTRADORES ASSOCIADOS COM PORTC

PORTD e TRISD

PORTD é uma porta de 8 bits com entrada “Schmitt Trigger”. Cada pino pode ser configurado individualmente para ser
entrada ou saída..

DIAGRAMA EM BLOCOS DE PORTD (EM MODO E/S)

14
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

PORTD pode ser configurado como uma porta de 8 bits, configurado como Porta Paralela Escrava (PSP – Parallel Slave Port)
através de tornar “1” o bit PSPMODE (TRISE<4>). Neste modo de operação, os buffers de entrada são do tipo TTL.

RESUMO DOS REGISTRADORES ASSOCIADOS COM PORTD

15
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

PORTE e TRISE

PORTE é composto por 3 pinos (RE0/RD/AN5, RE1/WR/AN6 e RE2/CS/AN7) que podem ser
configurados individualmente como entradas ou saídas. O buffer de entrada destes pinos é do tipo Schmitt
Trigger (ST).

Tanto PORTE quanto TRISE não estão implementados nos dispositivos de 28 pinos

Quando o bit PSMODE (TRISE<4>) estiver em nível lógico alto ("1"), PORTE torna-se a porta de
controle de dispositivos de E/S. Neste modo, o usuário deve se certificar de que os bits RB0, RB1 e RB2
de TRISE estão em nível "1", ou seja, configurados como pinos de entradas. Da mesma maneira, deve se
certificar que o registrador ADCON1 esteja configurado como porta digital de entrada ou saída. Neste
modo os buffers de entrada são do tipo TTL.

Ao ligar-se o processador (POR - Power On Reset) estes pinos são configurados como ENTRADAS

O Registrador TRISE também controla a operação da Porta Paralela Escrava. PORTE

Quando utilizando as entradas analógicas, o usuário deve se assegurar que os bits correspondentes de TRISE
estejam configurados como de ENTRADAS.

DIAGRAMA DE BLOCOS DE PORTE (EM MODO DIGITAL)

16
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

TABELA DE FUNÇÕES DE PORTE

RESUMO DOS REGISTRADORES ASSOCIADOS COM PORTE

17
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

POR OUTROS RESETS

TRISE 0000 0111 0000 0111

BSF STATUS, RP0 ; Muda para o banco 1 (RP0=1)

Movlw B’00000111’ ; RE<2:0>=ENTRADA

movwf TRISE

18
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

COMO ESCREVER UMA INFORMAÇÃO EM UMA PORTA?

Façamos um exemplo prático: Imagine que queremos conectar um led sobre o pino RB0 e uma botão de contato momentâneo

sobre a linha RB4. O código será o seguinte:

BSF STATUS, RP0 ; Muda para o banco 1 (RP0=1)

movlw B’11111110’ ; RB0=SAÍDA, RB4=ENTRADA

movwf TRISB

onde aqui será colocado em "0" o bit 0 (linha RB0 em escrita (saída), e em "1" o bit 4 (linha RB4) configurando-a como
entrada. Recorde-se de que na notação binária do assembler o bit mais a direita corresponde com o bit menos significativo, ou
seja, corresponde ao bit 0.

Para acender o led colocado na saída RB0 devemos escrever o seguinte código (lógica positiva):

bsf PORTB,0 ; faz o bit 0 de PORTB igual a "1" (RB0=1)

Para apagá-lo:

bcf PORTB,0 ; faz o bit 0 de PORTB igual a "0" (RB0=0)

Vamos trabalhar outro exemplo. Suponha que o valor de PORTB em um determinado instante é B'00000000'. Desejamos
mudar o valor dos bits 1,3 e 5 para o valor um. Uma maneira de fazer isto é:

VALOR INICIAL DE PORTB


BIT RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
PORTB 0 0 0 0 0 0 0 0

BSF PORTB,1 ; RB1=1


BSF PORTB,3 ; RB3=1
BSF PORTB,5 ; RB5=1

Após a execução das instruções acima, o valor de PORTB será:


BIT RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
PORTB 0 0 1 0 1 0 1 0

Outra maneira de fazer a mesma coisa acima, seria fazer:

19
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

MOVLW B'00101010' ; W=B'00101010'


MOVWF PORTB ; PORTB=B'00101010'

COMO LER O SINAL PRESENTE EM UM PINO?

Para lermos o estado da chave conectada a linha RB4, o código será:

Para testarmos o conteúdo de um pino de entrada, utilizaremos a instrução BTFSS f,b (Bit Test File Skip if Set) que significa:
Teste o bit b do registrador f e pule a próxima instrução se seu valor for "1" ("1" = Set).

Analogamente, também pode se utilizar a instrução BTFSC f, b (Bit Test File Skip if Clear) que significa: Teste o bit b

do registrador f e pule a próxima instrução se seu valor for "0" ("0" = Clear).

btfss PORTB,4 ; se RB4=1 pule a próxima instrução

goto Conectado_a_massa ; executada quando RB4=0

goto Conectado_ao_positivo ;executada quando RB4=1

Veja que também podemos executar testar o mesmo pino com a lógica inversa, ou seja, testar se é "0" e
tomar a ação correspondente caso seja.

btfsc PORTB,4 ; se RB4=0 pule a próxima instrução

goto Conectado_ao_positivo ;executada quando RB4=1

goto Conectado_a_massa ; executada quando RB4=0

Observe que houve apenas uma inversão das linhas de execução posteriores à instrução de teste.

COMO ACENDER UM LED ATRAVÉS DO PRESSIONAMENTO DE UMA TECLA

OBJETIVO: Deseja se acender um led controlado por uma tecla. Quando a tecla é pressionada o led deve se manter aceso.
Uma vez solta a tecla o led deve se apagar. Utilize a tecla SA16 (LINHA4, COLUNA 4) do kit SD-1700 DA Minipa. O led a
ser acendido é o led 0 (ligado ao pino RD0).

20
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

21
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

;**************************************
; * EXEMPLO DE CÓDIGO PARA UTILIZAÇÃO COM O SD-1700 *
;* *
; * LEITURA DE UMA TECLA E ACIONAMENTO DE UM LED *
;* *
;**************************************
; * VERSÃO : 1.0 *
; * DATA : 01/04/2005 *
;**************************************
;
;**************************************
;* DESCRIÇÃO GERAL *
;**************************************
; Quando a tecla SA16 for pressionada o LED ligado ao pino RD4 deve se
; acender e permanecer aceso enquanto a tecla se mantiver
; pressionada. Quando a tecla é solta, o led deve se apagar.
;**************************************
;* OPÇÕES DE CONFIGURAÇÕES DE GRAVAÇÃO *
;**************************************

LIST f=INHX8M
; f= formato Intel 8 bits (INHX8M)
PROCESSOR 16F877A ;Define o processador utilizado
22
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

__CONFIG _CP_OFF & _CPD_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF &
_PWRTE_ON & _WDT_OFF & _XT_OSC

;**************************************
;* VARIÁVEIS *
;**************************************
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS
; UTILIZADAS PELO SISTEMA
;**************************************
;* DEFINIÇÃO DAS VARIÁVEIS INTERNAS DO PIC *
;**************************************
; O ARQUIVO DE DEFINIÇÕES DO PIC UTILIZADO DEVE SER REFERENCIADO
; PARA QUE OS NOMES DEFINIDOS PELA MICROCHIP POSSAM SER
; UTILIZADOS, SEM A NECESSIDADE DE REDIGITAÇÃO.

#INCLUDE <P16F877A.INC> ; MICROCONTROLADOR UTILIZADO

;**************************************
;* DEFINIÇÃO DOS BANCOS DE RAM *
;**************************************
; OS PSEUDOS-COMANDOS "BANK0" E "BANK1", AQUI DEFINIDOS, AJUDAM
; A COMUTAR ENTRE OS BANCOS DE MEMÓRIA.

#DEFINE BANCO_1 BSF STATUS,RP0 ; SELECIONA O BANCO 1


#DEFINE BANCO_0 BCF STATUS,RP0 ; SELECIONA O BANCO 0

;**************************************
;* FLAGS INTERNOS *
;**************************************
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

;**************************************
;* CONSTANTES *
;**************************************
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

;**************************************
;* PINOS DE ENTRADAS *
;**************************************
; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA
; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS
; (0 E 1)

#DEFINE TECLA PORTB,3 ; TECLA LIGADA EM RB3


; 1 -> PRESSIONADA
; 0 -> LIBERADA

;**************************************
;* PINOS DE SAÍDAS *
;**************************************
; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA
; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS
; (0 E 1)

#DEFINE ACENDE_LED BSF PORTD,0


#DEFINE APAGA_LED BCF PORTD,0
#DEFINE HABILITA_TECLA BSF PORTB,7
23
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

#DEFINE HABILITA_LEDS BSF PORTA,4

;**************************************
;* VETOR DE RESET *
;**************************************

ORG 0x00 ; ENDEREÇO INICIAL DE PROCESSAMENTO


GOTO INICIO

;**************************************
;* INÍCIO DA INTERRUPÇÃO *
;**************************************
; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS
; SUBSTITUIR TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO
; APRESENTADO ABAIXO.
; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS
; FUTUROS

ORG 0x04 ; ENDEREÇO INICIAL DA INTERRUPÇÃO


RETFIE ; RETORNA DA INTERRUPÇÃO

;**************************************
;* INICIO DO PROGRAMA *
;**************************************

INICIO:
CLRF PORTA ; LIMPA A PORTA A
CLRF PORTB ; LIMPA A PORTA B
CLRF PORTC ; LIMPA A PORTA C
CLRF PORTD ; LIMPA A PORTA D
CLRF PORTE ; LIMPA A PORTA E

BANCO_1 ; SELECIONA O BANCO 1 DE MEMÓRIA

MOVLW B'00101111'
MOVWF TRISA ; CONFIGURA E/S DA PORTA A

MOVLW B'00001111'
MOVWF TRISB ; CONFIGURA E/S DA PORTA B

MOVLW B'11011001'
MOVWF TRISC ; CONFIGURA E/S DA PORTA C

MOVLW 0x00
MOVWF TRISD ; CONFIGURA E/S DA PORTA D

MOVLW 0x00
MOVWF TRISE ; CONFIGURA E/S DO PORTA E

MOVLW B'00000111'
MOVWF CMCON ;DESLIGA COMPARADORES
ANALÓGICOS

MOVLW B'00000111'
MOVWF ADCON1 ; DESLIGA CONVERSORES A/D
24
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC

MOVLW B'10000000'
MOVWF OPTION_REG
; PRESCALER 1:2 NO TMR0
; PULL-UPS DESABILITADOS
; AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW B'00000000'
MOVWF INTCON ; TODAS AS INTERRUPÇÕES
DESLIGADAS

BANCO_0 ; RETORNA PARA O BANCO 0

;**************************************
;* INICIALIZAÇÃO DO HARDWARE *
;**************************************
HABILITA_TECLA ; ATIVA LINHA 4 DO TECLADO MATRICIAL
HABILITA_LEDS

;**************************************
;* ROTINA PRINCIPAL *
;**************************************

MAIN:
BTFSS TECLA ; O BOTÃO ESTÁ PRESSIONADO?
; 1 -> PRESSIONADA
; 0 -> LIBERADA
GOTO TECLA_LIBERADA ; NÃO, ENTÃO TRATA TECLA LIBERADA
GOTO TECLA_PRESSIONADA ; SIM, ENTÃO TRATA TECLA
PRESSIONADA

TECLA_LIBERADA:
APAGA_LED ; APAGA O LED
GOTO MAIN ; RETORNA AO LOOP PRINCIPAL

TECLA_PRESSIONADA:
ACENDE_LED ; ACENDE O LED
GOTO MAIN ; RETORNA AO LOOP PRINCIPAL

;**************************************
;* FIM DO PROGRAMA *
;**************************************

END ; OBRIGATÓRIO

EXERCÍCIOS PROPOSTOS
1. Altere a lógica do sistema para que o sistema funcione inversamente ao programado inicialmente, ou seja, o led fica
aceso permanentemente e só fica apagado enquanto o o botão for pressionado.
2. Utilize outra tecla, como por exemplo, a tecla da linha4 coluna 2 e ligue agora o led 3 ao invés do led 0.

25
Prof. Valter Luís Arlindo de Camargo

Você também pode gostar