Você está na página 1de 38

Sumário

INTRODUÇÃO.................................................................................................................................................................. 1
TEMA E PROBLEMA DE PESQUISA..........................................................................................................................2
OBJECTIVOS.................................................................................................................................................................3
HIPÓTESES....................................................................................................................................................................4
JUSTIFICATIVA............................................................................................................................................................5
METODOLOGIA...........................................................................................................................................................6
DESENVOLVIMENTO..................................................................................................................................................7
COMPONENTES E MATÉRIAS UTILIZADOS UTILIZADOS.........................................................................8
FUNDAMENTAÇÃO TEÓRICA............................................................................................................................8
PIC16F628A...........................................................................................................................................................8
CRISTAL OSCILADOR 4MHZ........................................................................................................................10
DISLPAY DE 7 SEGMENTOS CATODO COMUM 2 DIGITOS/TELAS....................................................11
CÓDIGO ASSEMBLY E IMPLEMENTAÇÃO DO CIRCUITO.......................................................................13
EXPLICAÇÃO DETALHADA DO CÒDIGO..................................................................................................14
CONCLUSÂO..............................................................................................................................................................28
REFERÊNCIAS............................................................................................................................................................29
LISTA DE FIGURAS

Figura 1 Datasheet do PIC16F628A.................................................................................................................................9


Figura 2 DIAGRAMA DE BLOCOS DO PIC16F628A.........................................................................................................10
Figura 3 Datasheet das portas do PIC16F628A................................................................................................................6
Figura 4 Diagrama de Bloco do Timer0............................................................................................................................9
Figura 5 Diagrama de Bloco do Timer1...........................................................................................................................9
Figura 6 CRISTAL OSCILADOR 4MHz..............................................................................................................................10
Figura 7 Diagrama de display de 7 segmentos catodo comum para multiplexação......................................................11
Figura 8 Tabela de verdade do display de 7 segmentos catodo comum.......................................................................11
Figura 9 Simulação do circuito do projeto no proteus...................................................................................................26
INTRODUÇÃO

O advento da eletrônica e da computação tem proporcionado avanços significativos na automação e


controle de sistemas, permeando diversas áreas da vida moderna. Dentro desse contexto, os
microcontroladores surgem como elementos-chave, desempenhando um papel crucial na implementação de
sistemas embarcados. Este trabalho propõe-se a explorar e analisar minuciosamente o emprego do
microcontrolador PIC16F628A em um projeto de notável relevância: a multiplexação de displays de 7
segmentos cátodo comum.

O PIC16F628A, um integrante da renomada família de microcontroladores PIC da Microchip,


destaca-se por sua versatilidade e capacidade de processamento, tornando-se uma escolha amplamente
utilizada em projetos de automação e controle. O cerne deste estudo reside na eficácia do PIC16F628A em
orquestrar a multiplexação de displays, um desafio técnico que envolve não apenas a manipulação eficiente
dos recursos do microcontrolador, mas também uma compreensão profunda dos princípios subjacentes à
multiplexação.

A multiplexação dos displays de 7 segmentos, enquanto técnica de otimização, representa um campo


vasto de aplicação, indo desde a construção de dispositivos de visualização até a implementação de sistemas
de monitoramento. Este trabalho busca não apenas apresentar a aplicação prática dessa técnica, mas também
oferecer uma compreensão abrangente de como o PIC16F628A é empregado nesse contexto, explorando
suas características intrínsecas, como portas e funções específicas.

Ao longo deste estudo, serão abordados os objetivos propostos, a fundamentação teórica que sustenta
a escolha do PIC16F628A, a descrição detalhada do circuito montado, o código em Assembly utilizado para
programação, as simulações realizadas no MPLAB e Proteus, bem como os resultados obtidos, culminando
em uma análise crítica e conclusiva. Este trabalho aspira contribuir significativamente para o entendimento e
a aplicação prática do PIC16F628A, consolidando-se como um marco na exploração da multiplexação de
displays de 7 segmentos.

1
TEMA E PROBLEMA DE PESQUISA

O tema central desta pesquisa é a "Aplicação do PIC16F628A na Multiplexação de Displays de 7


Segmentos Cátodo Comum".

No contexto da automação e controle, surge o seguinte problema: Como otimizar a exibição de


informações em displays de 7 segmentos cátodo comum por meio da técnica de multiplexação, explorando
as capacidades do microcontrolador PIC16F628A?

Este problema envolve desafios relacionados à eficiência na utilização do PIC16F628A para


controlar múltiplos displays, minimizando o consumo de recursos e garantindo uma apresentação visual
precisa. A busca por uma solução eficaz destaca a necessidade de compreender profundamente as
características do PIC16F628A, sua programação em Assembly e a implementação prática da multiplexação.
Este estudo visa oferecer insights valiosos para otimizar a visualização de informações em sistemas
eletrônicos por meio da sinergia entre o PIC16F628A e displays de 7 segmentos cátodo comum.

2
OBJECTIVOS

OBJECTIVO GERAL

Desenvolver e implementar um sistema de multiplexação de displays de 7 segmentos cátodo comum


utilizando o microcontrolador PIC16F628A, explorando suas capacidades de controle e programação.

OBJECTIVOS ESPECÍFICOS

1. Estudar as características e funcionalidades do microcontrolador PIC16F628A, com foco nas portas


de I/O e capacidades de controle.

2. Projetar o circuito de multiplexação, integrando o PIC16F628A, displays de 7 segmentos, resistores e


demais componentes necessários.

3. Estudar o código em Assembly relativo ao PIC16F628A, entendendo a implementação da lógica de


multiplexação para a correta exibição de informações nos displays.

4. Realizar simulações detalhadas no MPLAB e Proteus para verificar o comportamento do sistema,


identificando possíveis falhas.

5. Efetuar testes práticos do circuito, utilizando o osciloscópio para validar o correto funcionamento da
multiplexação e analisar as formas de onda geradas.

6. Avaliar a eficiência do PIC16F628A na execução da tarefa de multiplexação, considerando aspectos


como consumo de energia, estabilidade e desempenho geral do sistema.

3
HIPÓTESES

a) Eficiência da Programação em Assembly: A programação em Assembly desenvolvida para o


PIC16F628A será eficiente na gestão da multiplexação, permitindo uma transição suave e precisa
entre os dígitos do display de 7 segmentos.

b) Correta Configuração das Portas e Pinos: A configuração das portas e pinos do PIC16F628A será
corretamente implementada, garantindo a interação adequada entre o microcontrolador e o display de
7 segmentos catodo comum.

c) Lógica de Controle para Sincronização: A lógica de controle incorporada ao código em Assembly


assegurará uma sincronização adequada entre os dígitos, evitando artefatos visuais indesejados, como
cintilação ou sobreposição.

d) Compatibilidade com Ambientes de Simulação: O código Assembly será compatível e executável


nos ambientes de simulação MPLAB e Proteus, possibilitando uma análise minuciosa do
comportamento da multiplexação e facilitando a identificação de possíveis melhorias.

e) Documentação Detalhada do projeto: A documentação do projeto destacará detalhadamente a


lógica de multiplexação implementada, incluindo pontos cruciais na programação do PIC16F628A e
suas interações com o display de 7 segmentos e outros componentes.

4
JUSTIFICATIVA

Este projeto visa criar um circuito de multiplexação para displays de 7 segmentos, utilizando o
microcontrolador PIC16F628A e explorando programação em Assembly. A importância dessa investigação
reside na aplicação prática dos conceitos de programação e controle de dispositivos, permitindo um
mergulho aprofundado na linguagem Assembly e nas características específicas do PIC16F628A.

A relevância do tema se destaca no contexto da crescente demanda por profissionais capacitados em


sistemas embarcados e programação de microcontroladores. A habilidade de desenvolver eficientemente a
multiplexação de displays de 7 segmentos contribui não apenas para a compreensão teórica, mas também
para a formação de habilidades técnicas aplicáveis em setores como automação, controle e eletrônica.

A contribuição deste trabalho reside na oportunidade proporcionada aos estudantes de Arquitetura de


computadores de aplicar seus conhecimentos teóricos em um projeto prático. O relatório resultante não
apenas descreverá as etapas do projeto, desde a configuração do PIC16F628A até a simulação e testes
práticos da multiplexação, mas também compartilhará insights sobre desafios enfrentados e conclusões
relevantes para o desenvolvimento da aplicação em sistemas embarcados.

5
METODOLOGIA

A abordagem metodológica empregada neste projeto é de cunho experimental, combinando


elementos qualitativos e quantitativos para alcançar uma compreensão abrangente da multiplexação de
displays de 7 segmentos usando o microcontrolador PIC16F628A. A metodologia é estruturada da seguinte
forma:

 Revisão Bibliográfica: Pesquisa bibliográfica de natureza exploratória para entender os princípios


fundamentais da linguagem Assembly e das características específicas do PIC16F628A.

 Configuração do Ambiente de Desenvolvimento: Abordagem prática, envolvendo a configuração do


ambiente de desenvolvimento (MPLAB e Proteus) para facilitar o processo de programação e
simulação.

 Simulação e Depuração: Adoção de uma abordagem experimental com simulações detalhadas no


MPLAB e Proteus, permitindo a identificação e correção de erros durante a fase de depuração.

 Testes Práticos e Otimização: Metodologia indutiva, conduzindo testes práticos no ambiente de


prototipagem para validar a funcionalidade do código e otimizar o desempenho.

 Análise de Resultados: Abordagem analítica para comparar os resultados obtidos com as


expectativas, identificando padrões e anomalias.

 Documentação e Relatório Final: Abordagem descritiva, documentando de forma minuciosa todas as


etapas do projeto, com a inclusão de artefatos visuais e explicações detalhadas.

Ao combinar elementos de pesquisa exploratória, dedutiva, indutiva e analítica, busca-se obter uma
compreensão holística do processo de multiplexação de displays de 7 segmentos com o PIC16F628A. A
abordagem experimental proporcionará insights práticos, enquanto a análise detalhada dos resultados
enriquecerá a compreensão do leitor sobre o funcionamento do circuito proposto.
6
DESENVOLVIMENTO

A fase de implementação do projeto concentrou-se na criação e validação prática do circuito de


multiplexação de displays de 7 segmentos cátodo comum, utilizando o microcontrolador PIC16F628A. O
objetivo primordial foi demonstrar a funcionalidade efetiva do circuito desenvolvido e a compreensão e
aplicação da linguagem assembly.

O desenvolvimento do circuito envolveu um conjunto de componentes pré-selecionados, incluindo displays


de 7 segmentos cátodo comum, o microcontrolador PIC16F628A e um cristal oscilador de 4MHz, entre
outros. A escolha desses elementos foi baseada em suas características específicas, alinhadas com os
requisitos do projeto, visando garantir desempenho, eficiência e confiabilidade.

A etapa inicial consistiu na montagem física do circuito em uma protoboard. As conexões entre os displays,
resistores, PIC16F628A, cristal oscilador e outros componentes foram organizadas para assegurar uma
integração eficiente. A disposição estratégica dos elementos visou minimizar interferências e otimizar a
resposta do circuito.
A implementação prática foi complementada por uma bateria rigorosa de testes. O circuito, com ênfase na
multiplexação dos displays, foi minuciosamente avaliado quanto ao correto funcionamento, precisão e
estabilidade. Os testes realizados permitiram identificar e corrigir eventuais falhas, assegurando a robustez
do projeto.

Antes da execução prática, o circuito foi submetido a simulações detalhadas no Proteus e MPLAB. Essa
etapa visou validar as expectativas teóricas, explorando diferentes cenários e condições de operação. A
simulação proporcionou uma visão abrangente do comportamento do circuito em ambiente virtual, antes da
aplicação prática.

Este relatório apresentará em detalhes o processo de montagem, desde as especificações do projeto até a
disposição física dos componentes. As etapas de simulação no Proteus e MPLAB serão descritas, seguidas
pela análise dos resultados obtidos nos testes práticos.

7
COMPONENTES E MATÉRIAS UTILIZADOS UTILIZADOS

A montagem do projeto de Multiplexação de Displays de 7 segmentos cátodo comum utilizando o


PIC16F628A envolveu a utilização dos seguintes componentes e materiais:

Display de 7 Segmentos Cátodo Comum: Display numérico para a exibição de dígitos, fundamental para a
representação visual das informações.
Resistores:
 7 x Resistores de 220 ohms: Limitam a corrente nos LEDs do display, assegurando uma operação
segura.
 1 x Resistor de 10k ohms: Parte do circuito de pull-up para o botão, garantindo uma leitura estável.
Botão: Fornece uma interface de entrada para interações do usuário, como iniciar ou interromper a
contagem.
Microcontrolador PIC16F628A: O cérebro do projeto, responsável pelo controle da multiplexação e pela
gestão da exibição nos displays.
Conexões GND (terra) e VCC (alimentação): GND é a referência de terra, e VCC é a alimentação para o
circuito.
Conexão BUS: Permite a comunicação e troca de dados entre os diversos componentes do circuito.
Portas NOT (portas lógicas inversoras): Componentes lógicos essenciais para a implementação de certas
operações no circuito.
Osciloscópio: Instrumento de medição utilizado para visualização e análise das formas de onda no circuito.
Cristal de 4MHz: Fornecer uma referência de tempo estável para o PIC16F628A, garantindo sincronia nas
operações.
Capacitor Cerâmico: Utilizado para filtrar flutuações na alimentação, melhorando a estabilidade do sistema.

Além desses componentes eletrônicos, também são utilizados outros materiais, como fios de conexão
(condutores e jumpers), protoboard para montagem do circuito.

FUNDAMENTAÇÃO TEÓRICA

PIC16F628A

8
O PIC16F628a é um microcontrolador fabricado pela Microchip Technology
(www.microchip.com), com as seguintes características:
 composto de 18 pinos;
 possui somente 35 instruções no seu microcódigo;
 sinal de clock de freqüência até 20 MHz;
 memória de programa do tipo Flash de 2048 words (1 word = 32 bits);
 224 bytes de memória RAM para dados;
 128 bytes de memória EEPROM para dados;
 instruções de 14 bits com 200ns de tempo de execução;
 dados de 8 bits por endereço de memória;
 15 registradores especiais;
 16 pinos os quais podem ser configurados como entrada e/ou saída;
 outras características especiais como programação in-circuit serial, proteção por código,
 watchdog timer (temporizador cão de guarda), módulo CCP, comparador interno, USART,....

Pinagem do PIC16F628a:

Figura 1 Datasheet do PIC16F628A

Os pinos de RA0 à RA7 e de RB0 à RB7 podem ser configurados como entradas ou saídas digitais. A
alimentação se dá no pino Vdd, ligado normalmente em 5V com faixa de tolerância de 2 à 6V e o pino Vss é
a referência de terra. O pino OSC1/CLKIN é utilizado para sinal de clock poduzido por cristal ou um
circuito externo e o pino OSC2/CLKOUT para sinal de clock por cristal (utilizado em conjunto com
OSC1/CLKIN). O pino MCLR é uma entrada de sinal de reset em nível baixo (zero). O PIC16F628a é
composto pelos subsistemas digitais conforme diagrama de blocos abaixo:

9
Figura 2 DIAGRAMA DE BLOCOS DO PIC16F628A

ARQUITETURA HARVARD

O PIC16F628a possui uma arquitetura denominada Harvard para acesso aos dados e às instruções do
programa, a qual é caracterizada por utilizar um bus (via de acesso) para comunicação dos dados e outro bus
distinto para comunicação com o programa. A maioria dos microcomputadores e microcontroladores no
mercado utilizam um único bus, tanto para dados quanto para instruções do programa. Nota-se a diferença
no uso desta arquitetura na visualização da memória do microcontrolador PIC: existe uma memória para o
programa e outra para os dados a serem utilizados. A memória RAM de um microcomputador PIC, em que
dados e instruções do programa estão na mesma memória, denominada memória principal (geralmente a
RAM do computador).

10
INSTRUÇÕES RISC

Na tabela abaixo observa-se o conjunto de instruções do PIC16F628a, com os mnemônicos, os


operandos de cada instrução, um resumo descritivo, o número de ciclos do clock exigido, o código em
linguagem de máquina, os bits do registrador de status que são afetados e anotações sobre cada instrução. O
número de instruções é limitado, sendo denominado arquitetura RISC - Reduced Instruction Set (Grupo
Reduzido de Instruções). O número de instruções é pequeno, porém cada instrução é formada por 14 bits que
codificam uma operação e os operandos ou os dados sujeitos à respectiva operação. A tabela abaixo mostra o
microcódigo para os microcontroladores da linha PIC, com a instrução assembly na primeira coluna, os
operandos possíveis para a respectiva instrução, a descrição, o número de ciclos do clock que a instrução
exige para ser executada e o código em linguagem de máquina.

MNEMÔNICOS OPERANDOS DESCRIÇÃO CICLOS OPCODE DE 14 BITS


DO
CLOCK
OPERAÇÕES DE REGISTRADORES ORIENTADAS A BYTE
ADDWF f, d Soma o conteúdo do registrador 1 00 0111 dfff ffff
“W” e de “f”
ANDWF f, d Operação lógica “E” entre o 1 00 0101 dfff ffff
conteúdo de “W” e “f”
CLRF f Limpa o conteúdo de “f” 1 00 0001 lfff ffff
CLRW -f, Limpa o conteúdo do 1 00 0001 0xxx xxxx
registrador “W”
COMF d Complemento do conteúdo de 1 00 1001 dfff ffff
“f”
DECF f, d Decrementa o valor 1 00 0011 dfff ffff
armazenado em “f”
DECFSZ f, d Decrementa o valor armazenado 1 (2) 00 1011 dfff ffff
em “f”, pula a
próxima instrução se for igual a
“0”
INCF f, d Incrementa o valor 1 00 1010 dfff ffff
armazenado em “f”
INCFSZ f, d Incrementa o valor armazenado em 1 (2) 00 1111 dfff ffff
“f”, pula a
próxima instrução se for igual a
“0”
IORWF f, d Operação lógica “OU 1 00 0100 dfff ffff
INCLUSIVO” do conteúdo do
registrador “W” com o
conteúdo de “f”
MOVF f, d Move o conteúdo de “f” para o 1 00 1000 dfff ffff
registrador “W”
MOVWF f Move o conteúdo do 1 00 0000 lfff ffff
registrador “W” para “f”
11
NOP -f, Sem operação 1 00 0000 0xx0 0000

12
RLF d Rotaciona os bits armazenados 1 00 1101 dfff ffff
em “f” para a
esquerda com Carry
RRF f, d Rotaciona os bits 1 00 1100 dfff ffff
armazenados em “f” para a
direita com Carry
SUBWF f, d Subtração do conteúdo em 1 00 0010 dfff ffff
“W” de “f”
SWAPF f, d Troca o primeiro nibble (4 1 00 1110 dfff ffff
bits) com o último nibble
armazenados em “f”
XORWF f, d Operação lógica “OU 1 00 0110 dfff ffff
EXCLUSIVO” do conteúdo de
“W” com o conteúdo de “f”
OPERAÇÕES DE REGISTRADORES ORIENTADAS A BIT
BCF f, b Muda para “0” o valor do bit 1 01 00bb bfff ffff
“b” de “f”
BSF f, b Muda para “1” o valor do bit 1 01 01bb bfff ffff
“b” de “f”
BTFSC f, b Verifica o valor do bit “b” do 1 (2) 01 10bb bfff ffff
registrador “f” e pula a próxima
instrução se for igual
a “0”
BTFSS f, b Verifica o valor do bit “b” do 1 (2) 01 11bb bfff ffff
registrador “f” e pula a próxima
instrução se for igual
a “1”
OPERAÇÕES DE CONTROLE E LITERAIS
ADDLW k Adiciona um número “k” ao 1 11 111x kkkk kkkk
conteúdo do registrador “W”
ANDLW k Operação lógica “E” de um 1 11 1001 kkkk kkkk
número “k” com “W”
CALL k Chamada de uma subrotina 2 10 0kkk kkkk kkkk
indicada por “k”
CLRWDT Limpa o temporizador cão de 1 00 0000 0110 0100
Guarda
GOTO k Vai ao endereço dado por “k” 2 10 1kkk kkkk kkkk
IORLW k Operação OU INCLUSIVO de 1 11 1000 kkkk kkkk
um número “k” com “W”
MOVLW k Move um número de valor “k” 1 11 00xx kkkk kkkk
para “W”
RETFIE Retorno de uma interrupção 2 00 0000 0000 1001
RETLW k Retorna com um valor “k” no 2 11 01xx kkkk kkkk
registrador “W”
RETURN Retorno de uma subrotina ao 2 00 0000 0000 1000
programa principal
SLEEP Entra no modo standby 1 00 0000 0110 0011
SUBLW k Subtrai o conteúdo do 1 11 110x kkkk kkkk
registrador “W” de um número
“k”
XORLW k Operação lógica “OU 1 11 1010 kkkk kkkk
EXCLUSIVO” de um número “k”
com o conteúdo do
registrador “W”

Nos operandos, as letras f, d, b, k indicam:


 f: registrador na memória RAM, como o PORTA, TRISB, STATUS, ou uma posição qualquer;
 d: direção para a qual pode se designada a função;
 b: o número de um bit dentro de um registrador. Para o PIC16F628a, são de 0 a 8, porque os
registradores possuem 8 bits;
 k: um literal, que envolve letras (ASCII), números no formato decimal, hexadecimal ou binário, até o
limite especificado pelo tamanho do registrador.

PORTS (PORTAS) DE ENTRADA E SAÍDA

Os microcontroladores da linha PIC possuem pinos que podem ser configurados como entrada ou
saída digital. Cada conjunto de oito destes pinos é denominado Port, geralmente classificado por uma letra
do alfabeto (PortA, PortB, PortC). Para isto, existem implementados na memória RAM do PIC registradores
especiais para configurar e ler/modificar o valor destes pinos. No PIC16F628a, dois destes registradores, o
TRISA e o TRISB, são responsáveis pela configuração destes pinos para funcionamento como entrada ou
saída digital. A abreviatura TRIS para estes registradores provem de tri-state (três estados) porque alguns
pinos podem funcionar de três modos diferentes: como entrada digital, saída digital ou com outra função
específica.

Pinos do portA Pinos do portA

Pinos do portB Pinos do portB

Figura 3 Datasheet das portas do PIC16F628A


Por exemplo: os pinos RB6 e RB7 do PIC16F628a podem funcionar como entrada digital, saída
digital ou terminal de comunicação serial para programar e ler o programa presente na memória do PIC.
Outros modelos de microcontroladores da linha PIC possuem pinos que podem funcionar como E/S digital e
entrada analógica, ou porta de comunicação de dados, Como cada registrador em um PIC pode armazenar no
máximo oito bits, os registradores TRISA e TRISB podem configurar no máximo oito pinos cada um, com o
valor de cada bit nestes registradores correspondendo à configuração de um pino. O PIC16F628a possui
treze pinos de E/S digital, então o registrador TRISB é responsável pela configuração de 8 pinos (RB0 a
RB7) e o registrador TRISA para o restante (RA0 a RA4, e três bits não são utilizados neste registrador).

Cada registrador acima configura um pino como entrada digital se o bit respectivo possuir valor “1”;
ou saída digital, se o bit respectivo possuir o valor “0”. Os exemplos abaixo mostram os valores que devem
estar presentes nos registradores TRISA eTRISB dada a respectiva configuração dos pinos:
 pinos RA0 a RA7 configurados como entradas digitais e pinos RB0 a RB7 como saídas digitais:

TRISA 1 1 1 1 1 1 1 1

0 0 0 0 0 0 0 0
TRISB

O conjunto de instruções do PIC16F628A é composto por um conjunto reduzido de operações,


facilitando o desenvolvimento e a otimização do código Assembly. As instruções são de tamanho fixo, o que
simplifica o processo de decodificação.

O microcontrolador oferece modos de economia de energia, tornando-o apropriado para aplicações


alimentadas por bateria, onde a eficiência energética é essencial.

Os registradores especiais, como STATUS, PCL, e FSR, desempenham um papel crucial na


manipulação de dados e controle do fluxo de programa. O entendimento desses registradores é fundamental
para uma programação eficiente.
O PIC16F628A possui dois timers/contadores, o Timer0 e o Timer1, que são componentes fundamentais
para diversas aplicações de temporização e controle de eventos. Vamos explorar cada um deles:

1. Timer0:
 O Timer0 é um timer de 8 bits que pode operar de forma assíncrona ou síncrona com o clock do
sistema (Fosc/4 ou Fosc/8). Ele é frequentemente utilizado em aplicações que requerem
temporização mais curta e precisa.
 Modos de Operação:
 Temporizador: Pode ser configurado como um temporizador de contagem descendente de 8
bits.
 Contador: Pode operar como um contador ascendente de 8 bits.
 Interrupções:
 O Timer0 pode gerar uma interrupção quando seu valor atinge um determinado limite,
proporcionando uma funcionalidade útil para a temporização precisa.
2. Timer1:
 O Timer1 é um timer/contador de 16 bits, oferecendo maior resolução em comparação com o
Timer0. Ele opera em modo de 16 bits e pode ser configurado para funcionar em diversas fontes de
clock.
 Modos de Operação:
 Temporizador: Pode ser configurado como um temporizador de contagem descendente de
16 bits.
 Contador: Opera como um contador ascendente de 16 bits.
 Fontes de Clock:
 Pode utilizar o clock do sistema (Fosc/4), um oscilador externo ou o sinal de clock do pino
T1CKI.
 Interrupções:
 O Timer1 pode gerar interrupções quando seu valor atinge um limite predefinido, oferecendo
um recurso valioso para aplicações que requerem temporização mais longa.
 Modo Síncrono e Assíncrono:
 Pode operar em modo síncrono ou assíncrono, proporcionando flexibilidade na configuração
conforme a necessidade da aplicação.
Configuração Geral dos Timers:
 A configuração dos timers envolve a manipulação de registradores específicos, como TMR0,
TMR1L, TMR1H, T0CS (Timer0 Clock Source), T0SE (Timer0 Source Edge Select), entre outros.
 Prescaler:
 Ambos os timers possuem um prescaler que permite dividir a frequência do clock antes de
aplicá-la ao contador. Isso é útil para ajustar a faixa de contagem ou economizar energia.
Figura 4 Diagrama de Bloco do Timer0

Figura 5 Diagrama de Bloco do Timer1


CRISTAL OSCILADOR 4MHZ

O cristal de 4MHz é uma fonte de clock externa que pode ser utilizada como a base de tempo para o
microcontrolador PIC16F628A. Ao conectar um cristal externo ao microcontrolador, em conjunto com
capacitores apropriados, é possível obter uma precisão de clock superior em comparação com o clock
interno do dispositivo.

Figura 6 CRISTAL OSCILADOR 4MHz

A utilização de um cristal externo, como o de 4MHz, proporciona as seguintes características e


considerações:

1. Precisão e Estabilidade:
 Cristais externos oferecem maior precisão e estabilidade em comparação com osciladores internos.
Isso é particularmente importante em aplicações que demandam sincronização precisa, como em
sistemas de comunicação ou temporização crítica.
2. Configuração do Microcontrolador:
 O cristal de 4MHz é conectado aos pinos XTAL1 e XTAL2 do PIC16F628A. Para utilizar um cristal
externo, é necessário configurar o microcontrolador para usar a fonte de clock externa. Isso
geralmente é feito através do bit OSCON.IRCF para selecionar a frequência desejada.
3. Maior Capacidade de Processamento:
 Ao utilizar um clock externo mais rápido, como o proporcionado por um cristal de 4MHz, o
microcontrolador pode processar instruções mais rapidamente, resultando em uma capacidade de
processamento maior.
DISLPAY DE 7 SEGMENTOS CATODO COMUM 2 DIGITOS/TELAS

O Módulo de Usuário LED7SEG é um componente versátil capaz de multiplexar até oito displays de
7 segmentos, oferecendo compatibilidade com cátodo comum, ânodo comum ou qualquer polaridade de
inversor. Este módulo é particularmente útil quando se deseja otimizar o uso de pinos de E/S, sendo capaz de
acionar até oito displays com apenas 16 pinos ou no caso específico deste projeto 2 displays com apenas.

Figura 7 Diagrama de display de 7 segmentos catodo comum para multiplexação

O display de 7 segmentos de cátodo comum de 2 dígitos é um dispositivo de visualização numérica


comum em aplicações eletrônicas. Cada dígito é composto por sete segmentos (A-G) que podem ser
iluminados para representar números de 0 a 9, além de possivelmente um ponto decimal (DP). A
multiplicidade de combinações desses segmentos permite a representação de todos os dígitos decimais.

Figura 8 Tabela de verdade do display de 7 segmentos catodo comum


COMO FUNCIONA A MULTIPLEXAÇÃO
Quando 2 ou mais monitores são multiplexados, apenas um dígito fica ligado por vez, embora
aparentemente todos os dígitos fiquem ligados continuamente. Para conseguir esta ilusão, a velocidade com
que os ecrãs são ligados e desligados deve ser superior à resposta do olho humano. Para um display de
quatro dígitos, a taxa multiplex deve estar próxima de 1 kHz; para um display de oito dígitos, a taxa
multiplex deve ser o dobro, ou 2 kHz. Ao multiplexar um display de N dígitos, cada dígito é válido por 1/N
do tempo total. Por exemplo, para um sistema com 8 dígitos e uma taxa de atualização de 2 kHz (período de
500 uS), cada display fica ligado por 500 uSeg a cada 4 mSeg (8 dígitos * 500 uSeg/dígitos).

A técnica de multiplexação é frequentemente empregue para controlar displays de vários dígitos de


forma eficiente, economizando pinos de controle. Nesse contexto, "multiplexar" significa alternar
rapidamente entre diferentes dígitos de forma sequencial. Para um display de 2 dígitos, isso envolve alternar
entre o primeiro e o segundo dígito.
Além dos pinos de segmento e dígito, o display possui pinos de alimentação (VCC e GND) para
fornecer energia. A técnica de multiplexação pode ser controlada por meio de um temporizador ou outra
lógica de controle, garantindo a rápida alternância entre os dígitos para criar uma exibição contínua.

POR QUE MULTIPLEXAR?


O principal motivo para multiplexar um display é salvar os pinos de E/S. Um display multiplexado
de oito dígitos requer apenas 16 pinos. Se o mesmo display fosse acionado diretamente, seriam necessários
64 pinos de E/S. Por outro lado, a multiplexação requer alguma sobrecarga de CPU. Na maioria dos
sistemas, a sobrecarga é pequena o suficiente para não ser motivo de preocupação. Com este módulo de
usuário, se a velocidade da CPU estiver definida para 12 MHz, o overhead será inferior a 2% com uma taxa
multiplex de 1 kHz.

Essa abordagem permite a economia de pinos de controle, pois apenas um conjunto de segmentos é
compartilhado entre os dígitos em um determinado momento. A taxa de multiplexação é crucial para garantir
que a alternância seja rápida o suficiente para que os dígitos pareçam estar ligados simultaneamente aos
olhos humanos, evitando cintilação perceptível. Portanto, a seleção adequada da taxa de multiplexação é
essencial para o funcionamento eficaz do display de 7 segmentos de cátodo comum de 2 dígitos em um
sistema multiplexado.
CÓDIGO ASSEMBLY E IMPLEMENTAÇÃO DO CIRCUITO

O código utilizado é um programa em Assembly para o microcontrolador PIC16F628A que realiza a


multiplexação de um display de 7 segmentos.

1.Configuração e Inicialização
O código começa com a configuração dos bits de fusíveis para o PIC16F628A.
Há definições para o mapeamento de hardware, registradores de uso geral e instruções para a
páginação de memória.

2.Interrupção
O programa utiliza a interrupção do Timer0 (`T0IF`). A cada estouro do Timer0, ele alterna entre os
dígitos mais significativos e menos significativos do display.
Os dígitos são controlados pelos pinos `digit1` e `digit2`, e os dados são enviados para o display
através do `PORTB`.

3.Loop Principal
No loop principal (`loop`), os valores `13` são constantemente carregados nas variáveis `dez` e `uni`,
o que indica que o display deve exibir "13".

4.Sub-rotina `send_disp`
Essa sub-rotina converte os valores binários das variáveis `dez` e `uni` nos segmentos necessários
para exibir os dígitos de 0 a 9 no display de 7 segmentos.

5.Observações Gerais
O código faz uso de bancos de memória (`bank0` e `bank1`) para acessar diferentes conjuntos de
registradores.
Os registradores `W_TEMP` e `STATUS_TEMP` são utilizados para salvar e recuperar o contexto
durante a rotina de interrupção.

6.Configuração de Hardware
A configuração inicial inclui a definição dos pinos de saída (`TRISA` e `TRISB`), configuração do
Timer0 (`OPTION_REG`), desabilitação de comparadores (`CMCON`), e habilitação das interrupções
globais e do Timer0 (`INTCON`).

7.Loop Infinito
O loop infinito (`loop`) parece configurar constantemente as variáveis `dez` e `uni` para "13". A
razão para isso pode ser mais clara no contexto geral do projeto.

EXPLICAÇÃO DETALHADA DO CÒDIGO

1-CONFIGURAÇÕES INICIAIS

Listagem do Processador Utilizado:


Esta diretiva informa ao montador qual processador está sendo utilizado. Neste caso, é o
PIC16F628A.
list p=16F628A

Arquivos Inclusos no Projeto:


Inclui o arquivo de configuração específico para o PIC16F628A. Esse arquivo contém definições e
constantes específicas para o processador.

#include <p16f628a.inc>

FUSE Bits (Bits de Fusível):


Configura os bits de fusível do microcontrolador. Cada configuração tem um significado específico. Aqui
estão algumas das configurações:
 _XT_OSC: Configuração para uso de cristal externo.
 _WDT_OFF: Desabilita o Watchdog Timer.
 _PWRTE_ON: Habilita o Power-Up Timer.
 _BOREN_OFF: Desabilita o Brown-Out Reset.
 _LVP_OFF: Desabilita a programação de baixa tensão.
 _CP_OFF e _CPD_OFF: Desabilitam a proteção de código.
 _MCLRE_OFF: Desabilita o pino MCLR como entrada.
__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _BOREN_OFF & _LVP_OFF & _CP_OFF &
_CPD_OFF & _MCLRE_OFF

Paginação de Memória:
Define macros para facilitar a seleção de bancos de memória. bank0 e bank1 são utilizadas para selecionar o
banco 0 e o banco 1, respectivamente.

#define bank0 bcf STATUS,RP0


#define bank1 bsf STATUS,RP0

Essas configurações iniciais estabelecem o ambiente de desenvolvimento para o código,


especificando o processador, incluindo arquivos de configuração relevantes, configurando os bits de fusível
e definindo macros para facilitar a manipulação dos bancos de memória. Isso permite ao programador
configurar o ambiente de execução do programa de acordo com os requisitos específicos do projeto.

2- MAPEAMENTO DO HARDWARE

#define LED1 PORTA,3


#define LED2 PORTA,2
#define S1 PORTB,0
#define S2 PORTA,5
#define digit1 PORTA,1
#define digit2 PORTA,0

Mapeamento de hardware:
 - `LED1`: Define o pino do LED1 como o pino RA3 do registrador PORTA.
 - `LED2`: Define o pino do LED2 como o pino RA2 do registrador PORTA.
 - `S1`: Define o pino do botão S1 como o pino RB0 do registrador PORTB.
 - `S2`: Define o pino do botão S2 como o pino RA5 do registrador PORTA.
 - `digit1`: Define o pino do dígito mais significativo do display como o pino RA1 do registrador
PORTA.
 - `digit2`: Define o pino do dígito menos significativo do display como o pino RA0 do registrador
PORTA.
Essas definições tornam o código mais legível e fácil de entender, pois os nomes simbólicos (`LED1`,
`LED2`, etc.) são usados em vez de números de pinos brutos. Isso é útil porque, se a configuração de
hardware precisar ser modificada posteriormente, apenas essas definições precisam ser ajustadas, facilitando
a manutenção do código.
Esses mapeamentos são usados ao longo do código para se referir aos diferentes pinos do
microcontrolador, proporcionando uma abstração que torna o código mais claro e modular. Por exemplo, em
vez de usar constantemente números de pino brutos, o programador pode usar esses nomes simbólicos para
melhorar a legibilidade do código e facilitar futuras modificações no hardware.

3- REGISTRADORES DE USO GERAL

A seção de "Registradores de Uso Geral" destina-se a reservar uma área específica de memória para
o armazenamento temporário de dados. Isso é feito por meio da definição de um bloco de registradores
utilizando a diretiva `cblock`.

cblock H'20'
W_TEMP ; Registrador para armazenar o conteúdo temporário de W
STATUS_TEMP ; Registrador para armazenar o conteúdo temporário de
STATUS
counter ; Registrador auxiliar de contagem
timer ; Registrador para atualizar o valor do display
dez ; Dezena do número exibido no display
uni ; Unidade do número exibido no display
endc

1. cblock H'20:
 A diretiva `cblock` define um bloco de registradores de uso geral. `H'20'` especifica o endereço de
início do bloco. Isso cria um espaço de armazenamento em que o programador pode atribuir nomes
simbólicos para facilitar o acesso e manipulação de dados temporários.

2. `W_TEMP`:
 `W_TEMP` é um registrador destinado a armazenar temporariamente o conteúdo do registrador W
(registrador de trabalho). Durante a execução de certas operações, o conteúdo do registrador W pode
ser temporariamente transferido para `W_TEMP` e, posteriormente, restaurado.

3. `STATUS_TEMP`:
 `STATUS_TEMP` é um registrador usado para armazenar temporariamente o conteúdo do
registrador de status. O registrador de status contém informações sobre o estado do microcontrolador,
incluindo sinalizadores de status e informações sobre o banco de memória atual.

4. `counter`:
 `counter` é um registrador auxiliar de contagem. Pode ser utilizado para contar eventos ou iterações
em determinadas partes do código.

5. `timer`:
 `timer` é um registrador usado para rastrear o tempo ou a contagem. Parece ser utilizado para
controlar a multiplexação do display, conforme mencionado na seção de interrupção do Timer0.

6. `dez` e `uni`:
 `dez` e `uni` são registradores destinados a armazenar a dezena e a unidade do número que será
exibido no display, respectivamente.

Esses registradores são definidos para facilitar o armazenamento temporário de dados durante a
execução do programa. O uso de nomes simbólicos melhora a legibilidade do código e facilita a
manutenção, pois os registradores são referenciados por seus nomes significativos em vez de endereços
brutos de memória.

4- VETOR DE RESET

org H'0000' ; Origem no endereço 0000h de memória


goto inicio ; Desvia para a label início

A diretiva `org` (origem) define o endereço no qual o vetor de RESET começa. No caso, `H'0000'`
representa o endereço de memória 0000h, que é onde o programa começa a ser executado quando o
microcontrolador é ligado ou é realizado um reset.

2. `goto inicio`
 A instrução `goto` é uma instrução de desvio incondicional. `inicio` é uma label (rótulo) que
marca o início do programa principal. Essa instrução desvia a execução do programa para o
ponto rotulado como `inicio`.

O vetor de RESET é a primeira parte do código a ser executada quando o microcontrolador é ligado
ou é realizado um reset. Sua principal função é iniciar a execução do programa principal, e no caso deste
código, o programa principal é marcado pela label `inicio`.
Ao usar a instrução `goto inicio`, o código pula diretamente para o início do programa, evitando a
execução de quaisquer instruções no vetor de RESET além daquela que direciona para o início. Essa é uma
prática comum em programação de microcontroladores, onde o vetor de RESET é usado apenas para
direcionar a execução para a parte principal do programa.

5-VETOR DE INTERRUPÇÃO
org H'0004' ; As interrupções deste processador apontam para
este endereço

; -- Salva Contexto --
movwf W_TEMP ; Copia o conteúdo de Work para W_TEMP
swapf STATUS,W ; Move o conteúdo de STATUS com os nibbles
invertidos para Work
bank0 ; Seleciona o banco 0 de memória (padrão do RESET)
movwf STATUS_TEMP ; Copia o conteúdo de STATUS com os nibbles
invertidos para STATUS_TEMP
; -- Final do Salvamento de Contexto --

btfss INTCON,T0IF ; Houve overflow do Timer0?


goto exit_ISR ; Não, desvia para a saída da interrupção
bcf INTCON,T0IF ; Sim, limpa a flag
btfss digit1 ; Digito mais significativo ativado?
goto digit2_off ; Não, desvia para desligar digito menos
significativo
bcf digit1 ; Sim, desliga digito mais significativo
clrf PORTB ; Limpa PORTB
bsf digit2 ; Liga digito menos significativo
goto copy_uni ; Desvia para copiar unidade ao display

digit2_off:

bcf digit2 ; Desliga digito menos significativo


clrf PORTB ; Limpa PORTB
bsf digit1 ; Liga digito mais significativo
movf dez,W ; Move conteúdo de dezena para work
call send_disp ; Chama sub-rotina para atualizar display
movwf PORTB ; PORTB recebe o dado convertido
goto exit_ISR ; Desvia para saída da interrupção

copy_uni:

movf uni,W ; Move conteúdo de unidade para work


call send_disp ; Chama sub-rotina para atualizar display
movwf PORTB ; PORTB recebe o dado convertido

exit_ISR:
swapf STATUS_TEMP,W ; Copia em Work o conteúdo de STATUS_TEMP com os
nibbles invertidos
movwf STATUS ; Recupera o conteúdo de STATUS
swapf W_TEMP,F ; W_TEMP = W_TEMP com os nibbles invertidos
swapf W_TEMP,W ; Recupera o conteúdo de Work
retfie ; Retorna da interrupção

1. `org H'0004'`:
 - Assim como no vetor de RESET, a diretiva `org` define o endereço onde o vetor de
interrupção começa. No caso, `H'0004'` representa o endereço de memória 0004h.
2. Salvando o Contexto (início):
 Antes de realizar qualquer operação no vetor de interrupção, o código salva o contexto atual.
 `movwf W_TEMP`: Move o conteúdo do registrador de trabalho (W) para o registrador
temporário W_TEMP.
 `swapf STATUS,W`: Move o conteúdo do registrador de status com os nibbles invertidos
para o registrador W.
 `bank0`: Seleciona o banco 0 de memória.
 `movwf STATUS_TEMP`: Move o conteúdo de W para o registrador STATUS_TEMP.

3. Verificação da Condição da Interrupção:


 - `btfss INTCON,T0IF`: Verifica se houve um overflow no Timer0.
 - `goto exit_ISR`: Se não houver overflow, o código desvia para a saída da interrupção.

4. Manipulação da Interrupção:
 - Diversas operações são realizadas dependendo das condições.
 - O código manipula a multiplexação dos dígitos do display e a limpeza de flags de
interrupção.

5. Recuperação do Contexto (fim):


 - `exit_ISR` é uma label que marca o fim do tratamento da interrupção.
 - O contexto salvo é recuperado:
 - `swapf STATUS_TEMP,W`: Move o conteúdo de STATUS_TEMP com os nibbles
invertidos para W.
 - `movwf STATUS`: Recupera o conteúdo de STATUS.
 - `swapf W_TEMP,F`: W_TEMP = W_TEMP com os nibbles invertidos.
 - `swapf W_TEMP,W`: Recupera o conteúdo de W_TEMP.
 - `retfie`: Retorna da interrupção.

O vetor de interrupção é responsável por tratar a interrupção gerada pelo Timer0. Ele salva o
contexto, verifica a condição da interrupção, executa ações específicas e, em seguida, recupera o contexto
antes de retornar à execução normal do programa.

6- PROGRAMA PRINCIPAL

inicio:
bank1 ; Muda para o banco 1 de memória
movlw H'F0' ; Move o literal F0h para work
movwf TRISA ; Configura RA3, RA2, RA1 e RA0 como saída
movlw H'01' ; Move o literal 01h para work
movwf TRISB ; Configura todo PORTB como saída, exceto RB0
movlw H'D3' ; Move o literal D3h para work
movwf OPTION_REG ; Timer0 incrementa com ciclo de máquina,
prescaler 1:32
bank0 ; Muda para o banco 0 de memória
movlw H'07' ; Move o literal 07h para work
movwf CMCON ; Desabilita comparadores
movlw H'A0' ; Move o literal A0h para work
movwf INTCON ; Habilita a interrupção global e do timer0
clrf dez ; Limpa dezena
clrf uni ; Limpa unidade

loop:
movlw D'1'
movwf dez
movlw D'3'
movwf uni

goto loop ; Não, desvia de volta para loop

1. `inicio`:
 - `inicio` é uma label que marca o início do programa principal.

2. Configurações Iniciais:
 - `bank1`: Muda para o banco 1 de memória.
 - `movlw H'F0'`: Move o literal F0h para o registrador de trabalho (W).
 - `movwf TRISA`: Configura os pinos RA3, RA2, RA1 e RA0 como saída.
 - `movlw H'01'`: Move o literal 01h para W.
 - `movwf TRISB`: Configura todo o registrador PORTB como saída, exceto RB0.
 - `movlw H'D3'`: Move o literal D3h para W.
 - `movwf OPTION_REG`: Configura o Timer0 para incrementar com o ciclo de máquina e
prescaler 1:32.
 - `bank0`: Muda de volta para o banco 0 de memória.
 - `movlw H'07'`: Move o literal 07h para W.
 - `movwf CMCON`: Desabilita os comparadores.
 - `movlw H'A0'`: Move o literal A0h para W.
 - `movwf INTCON`: Habilita a interrupção global e do Timer0.

3. Limpeza e Inicialização:
 - `clrf dez`: Limpa o registrador de dezena.
 - `clrf uni`: Limpa o registrador de unidade.

4. Loop Infinito:
 - `loop` é uma label que marca o início de um loop infinito.
 - `movlw D'1'`: Move o literal 1 para W.
 - `movwf dez`: Atribui 1 ao registrador de dezena.
 - `movlw D'3'`: Move o literal 3 para W.
 - `movwf uni`: Atribui 3 ao registrador de unidade.

5. Retorno para o Loop:


- `goto loop`: Retorna para o início do loop, reiniciando o processo.

O programa principal configura o ambiente inicial do microcontrolador, define as condições iniciais e


entra em um loop infinito. Durante cada iteração do loop, são definidos valores para os registradores de
dezena e unidade, iniciando o ciclo novamente. O programa ficará continuamente repetindo essas operações
enquanto estiver em execução.

7- SUB ROTINAS DE CONVERSÂO PARA DISPLAY DE 7 SEGMENTOS


send_disp: ; Sub-rotina para conversão
binário
addwf PCL, F ; PCL = PCL + W

; 'gfedcba ' ; Reposicionamento correto


dos segmentos
retlw B'01111110' ; Retorna o símbolo '0'
retlw B'00001100' ; Retorna o símbolo '1'
retlw B'10110110' ; Retorna o símbolo '2'
retlw B'10111110' ; Retorna o símbolo '3'
retlw B'11001100' ; Retorna o símbolo '4'
retlw B'11011010' ; Retorna o símbolo '5'
retlw B'00001010' ; Retorna o símbolo '6'
retlw B'00001110' ; Retorna o símbolo '7'
retlw B'11101110' ; Retorna o símbolo '8'
retlw B'11011110' ; Retorna o símbolo '9'

1. `send_disp:`:
 `send_disp` é uma label que marca o início da sub-rotina de conversão.

2. `addwf PCL, F`:


 - `addwf PCL, F` é uma instrução que incrementa o Program Counter (PCL) pelo valor contido em
W. Neste caso, W é implicitamente considerado como 1, resultando em um desvio para o próximo
endereço de memória.

3. Comentários de Posicionamento de Segmentos:


 - Os comentários `'gfedcba '` indicam a correspondência entre os bits do byte retornado e os
segmentos de um display de 7 segmentos. Cada bit representa um segmento do display.

4. Retorno de Valores para Dígitos:


 - `retlw B'01111110'`: Retorna o valor binário correspondente ao dígito 0 em um display de 7
segmentos.
 - `retlw B'00001100'`: Retorna o valor binário correspondente ao dígito 1.
 - ... e assim por diante, até o dígito 9.

Essa sub-rotina é usada para converter valores binários (de 0 a 9) em representações adequadas para um
display de 7 segmentos. O valor binário que precisa ser convertido é usado como índice para a tabela, e o
byte correspondente (representando os segmentos acesos para exibir o dígito) é retornado pela sub-rotina.
8- RECUPERAÇÂO DO CONTEXTO E FINALIZAÇÂO

exit_ISR:

Swapf STATUS_TEMP,W ; Copia em Work o conteúdo de


STATUS_TEMP com os nibbles invertidos
decfsz timer, F ; Decrementa o contador auxiliar
(timer)
goto exit_ISR ; Se não for zero, continua na
rotina de saída da interrupção
bsf LED1 ; Se for zero, liga o LED1
swapf W_TEMP,F ; W_TEMP = W_TEMP com os nibbles
invertidos
swapf W_TEMP,W ; Recupera o conteúdo de Work
retfie ; Retorna da interrupção

1. `exit_ISR:`:
 `exit_ISR` é uma label que marca o início da rotina de saída da interrupção.

2. `Swapf STATUS_TEMP,W`:
 `Swapf STATUS_TEMP,W` copia o conteúdo do registrador `STATUS_TEMP` com os nibbles
invertidos para o registrador `W`. Isso é feito para recuperar o conteúdo original de `STATUS` no
final da rotina.

3. `decfsz timer, F`:


 `decfsz timer, F` decrementa o registrador `timer` (contador auxiliar). Se o resultado for zero, o
código não pula para `exit_ISR` e continua para a próxima instrução.

4. `goto exit_ISR`:
 `goto exit_ISR` faz um loop de volta para a label `exit_ISR` se o contador `timer` não atingiu zero.

5. `bsf LED1`:
 `bsf LED1` (Bit Set File) liga o LED1 (assumindo que o LED1 está conectado ao pino RA3) se o
contador `timer` atingiu zero.

6. `swapf W_TEMP,F`:
 `swapf W_TEMP,F` inverte os nibbles em `W_TEMP`. Este passo não é claramente explicado no
código fornecido, e o propósito exato pode depender de detalhes não apresentados.

7. `swapf W_TEMP,W`:
 `swapf W_TEMP,W` recupera o conteúdo de `W_TEMP`.

8. `retfie`:
 `retfie` é uma instrução que retorna da interrupção.

Essa parte do código lida com a recuperação do contexto após a interrupção do Timer0. Ela verifica se o
contador `timer` ainda não atingiu zero. Se ainda houver contagem, a rotina de saída da interrupção continua
no loop. Quando o contador atinge zero, o LED1 é ligado, e o contexto é recuperado antes de retornar da
interrupção.
Figura 9 Simulação do circuito do projeto no proteus

O projeto, quando em execução, utiliza o microcontrolador PIC16F628A para controlar um display


de 7 segmentos. O oscilador, operando a uma frequência de 4MHz, fornece o pulso de clock essencial para o
processamento. O código em linguagem de montagem realiza a multiplexação entre os dígitos mais
significativos e menos significativos do display, usando a interrupção do Timer0 para sincronizar o processo.
Os valores constantes "13" são carregados repetidamente nas variáveis dezena (dez) e unidade (uni),
indicando a constante exibição do número "13". A lógica de controle, configuração de portas, e a sub-rotina
de conversão para o display de 7 segmentos estão integradas para assegurar a correta exibição do conteúdo
no display. A estrutura do código, junto com a configuração adequada do hardware, permite que o projeto
opere de maneira eficiente, proporcionando uma visualização contínua do número "13" no display de 7
segmentos.
Figura 10 Simulação do circuito do projeto no proteus, funcionando corretamente
CONCLUSÂO

Em conclusão, o código em linguagem de montagem para o microcontrolador PIC16F628A


implementa com sucesso a multiplexação de um display de 7 segmentos, exibindo continuamente o número
"13". O projeto, configurado para operar com um oscilador de 4MHz, demonstra eficiência no controle do
tempo e na manipulação de interrupções para alcançar a exibição desejada. A estrutura organizada do
código, juntamente com as configurações adequadas do hardware, evidencia a habilidade do
microcontrolador em gerenciar operações complexas. A compreensão detalhada de cada linha de código,
desde a configuração inicial até a implementação da lógica de exibição, oferece uma visão abrangente do
funcionamento do projeto. Este trabalho destaca a capacidade de programação de sistemas embarcados e a
aplicação prática do PIC16F628A na criação de soluções eficientes para controle de displays e
temporização.

Ao consolidar o conhecimento teórico em uma aplicação real, o projeto contribui para a compreensão
profunda de conceitos fundamentais de arquitetura de computadores. As considerações finais abordarão não
apenas os resultados e desafios encontrados, mas também a aplicação prática dos conceitos estudados,
destacando a relevância do projeto para o aprendizado e desenvolvimento técnico na área de
microcontroladores e sistemas embarcados.
Ao alcançar esses objetivos, conseguiu-se não apenas implementar o projeto com sucesso, mas
também adquirir conhecimentos práticos sobre a utilização do PIC16F628A em aplicações de controle e
exibição, contribuindo para o avanço na compreensão e aplicação de microcontroladores em projetos
eletrônicos.
REFERÊNCIAS

a) Microchip Technology Inc. (2003). PIC16F627A/628A/648A Data Sheet 18/20/28-Pin Flash-Based, 8-Bit
CMOS Microcontrollers with nanoWatt Technology. [Online]. Disponível em:
https://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdf
b) WR Kits. (2016, 30 de maio). DISPLAYS MULTIPLEXADOS | Assembly para PIC #056 [Vídeo].
YouTube. https://www.youtube.com/watch?
v=YnPCLhgVJvE&list=PLZ8dBTV2_5HQd6f4IaoO50L6oToxQMFYt&index=56
c) Infineon Technologies AG. (2017). 7-Segment LED Controller Datasheet. [Online]. Disponível em:
https://www.infineon.com/dgdl/Infineon-7_Segment_LED_Controller-UM-v01_00-EN.pdf?
fileId=5546d462576f34750157750826c4223b
d) Docsity. (n.d.). Descrição rápida sobre o PIC16F628A. [Online]. Disponível em:
https://www.docsity.com/pt/descricao-rapida-sobre-o-pic16f628a/4434569/
e) SlideShare. (2014, 24 de abril). Pic16f628a | PDF. [Online]. Disponível em:
https://www.slideshare.net/secret/2SKzH5XmUqJfSC
f) Passei Direto. (n.d.). Análise de Circuitos Digitais – PIC16F628A. [Online]. Disponível em:
https://www.passeidireto.com/arquivo/23338332/datasheet-pic-16-f-628-a

Você também pode gostar