Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
1
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
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.
goto Conectado_a_massa
goto Conectado_ao_positivo
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.
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).
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
MOVLW B’00000111’
4
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
CMCON
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.
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.
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.
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.
8
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
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
9
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
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.
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
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.
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.
12
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
13
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
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..
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.
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
Quando utilizando as entradas analógicas, o usuário deve se assegurar que os bits correspondentes de TRISE
estejam configurados como de ENTRADAS.
16
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
17
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
movwf TRISE
18
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
Façamos um exemplo prático: Imagine que queremos conectar um led sobre o pino RB0 e uma botão de contato momentâneo
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):
Para apagá-lo:
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 é:
19
Prof. Valter Luís Arlindo de Camargo
Projeto de Sistemas Microcontrolados utilizando PIC
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).
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.
Observe que houve apenas uma inversão das linhas de execução posteriores à instrução de teste.
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.
;**************************************
;* DEFINIÇÃO DOS BANCOS DE RAM *
;**************************************
; OS PSEUDOS-COMANDOS "BANK0" E "BANK1", AQUI DEFINIDOS, AJUDAM
; A COMUTAR ENTRE OS BANCOS DE MEMÓRIA.
;**************************************
;* 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)
;**************************************
;* 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)
;**************************************
;* VETOR DE RESET *
;**************************************
;**************************************
;* 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
;**************************************
;* 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
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
;**************************************
;* 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