Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Pic PDF
Apostila Pic PDF
¾ Introdução
¾ O microcomputador
¾ Blocos Funcionais
1 - OS BLOCOS FUNCIONAIS DO MICROCOMPUTADOR
1.1 - Introdução
2
1.3 - Blocos funcionais
CPU
INTERFACE
DISPOSITIVO
MEMÓRIA DMA DE I/0
3
Um microprocessador pode ser divido segundo seus blocos funcionais:
• registradores e contadores;
• unidade lógica e aritmética;
• unidade de controle e sincronização.
Os registradores e contadores são utilizados para o armazenamento temporário dos bits
dentro do microprocessador. Este tipo de tarefa é executado pelo registrador e decodificador de
instrução, pelo contador de programa e pelo acumulador.
A Unidade Lógica Aritmética (ULA) é responsável pelas operações lógicas e
aritméticas entre os bits, gerando uma outra palavra como saída. Estas operações são executadas
entre o acumulador e o registrador temporário do microprocessador com os quais a ULA se
comunica internamente e o resultado é armazenado no próprio acumulador.
A unidade de controle e sincronização coordena e controla todas os blocos funcionais
do computador em uma seqüência lógica e sincronizada. Ela recebe as instruções vindas do
programa armazenado na memória de programa já decodificado pelo decodificador de instruções
e emite os sinais de sincronização e controle para as diversas partes do computador.
Unidade de Memória
A unidade de memória é à parte do sistema na qual são armazenados os dados e os
programas que podem ser executados pelo computador.
A unidade de memória possui dois tipos de memória:
• Memória de Leitura (ROM - Read Only Memory);
• Memória de Acesso Aleatório (RAM - Randomic Acess Memory).
Na ROM, correspondente à parte de unidade de memória que armazena as instruções
que constituem o programa monitor. A memória RAM é à parte da memória responsável pelo
armazenamento dos dados que serão usados durante a execução do programa.
Para que seja possível localizar uma entre muitos dados armazenados na memória é
necessário que as posições destes dados sejam numeradas. Essas posições são chamadas de
endereços. No próximo capitulo vamos estudar os diversos tipos e principais características das
memórias.
Unidade de I/O
As unidades de I/O são as interfaces pelos quais o usuário comunica-se com o
computador e vice-versa. As unidades de I/O possuem conexão com dispositivos chamados
unidades periféricas, tais como: teclados, terminais de vídeo, impressoras, etc.
Interface
A interface é um dispositivo que auxilia na transferência de informações entre a
Unidade Central de Processamento e dispositivos periféricos. Ela é usada principalmente em
sistemas que possuem somente uma CPU e vários dispositivos periféricos.
DMA
“DMA” ou Direct Memory Acess (Acesso Direto à Memória) é o processo de
comunicação direta entre dispositivos periféricos e memória.
Este processo se deve ao fato da necessidade de se aumentar à velocidade de
transferência de dados.
4
1.4 – Exercícios
1 – Qual o principal objetivo da aplicação do microcontrolador na industria ?
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
3 – Defina:
a – Hardware
__________________________________________________________________
__________________________________________________________________
b – Software
__________________________________________________________________
__________________________________________________________________
c – firmware
__________________________________________________________________
__________________________________________________________________
5
Anotações:
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
6
CAPÍTULO 2
Memória
¾ RAM
¾ ROM
7
2 – MEMÓRIA
RAM: “Random Access Memory” – Memória de Acesso Randômico – também conhecida como
memória de leitura e gravação, a qual é um tipo de memória que se pode ler e escrever dados
binários. A RAM é utilizada para armazenar programas temporários e dados que serão alterados
no decorrer da execução do programa. Os dados na memória RAM são retidos apenas enquanto a
fonte permanece ligada, a RAM é uma memória volátil.
Endereço
An
.
A0
Saída / Entrada
RAM de dados
Controle
8
Existem vários tipos de memórias DRAM que diferem no modo que elas se comunicam
com o sistema, mas cujo principio de armazenamento é o mesmo, abaixo citamos algumas delas:
• EDO – (Extended Data Output). Pode manter a saída de dados de um endereço enquanto
seta um novo endereço. Utilizada em sistemas de fonte de informação.
• VRAM – (Vídeo RAM). Utilizadas em aceleradores de vídeo.
• RDRAM - (Rambus DRAM). Fabricada pela Rambus Inc, por isso RDRAM, possui
algumas desvantagens em alguns aspectos, em compensação tem uma taxa de
transferência de dados muito alta, cerca de 1000Mbps contra 200Mbps das DRAM
comuns. É utilizada principalmente em aceleradores de vídeo e em certos videogames,
como o Ultra 64 da Nintendo.
• PSRAM – (Pseodo Static Ram). Memória RAM dinâmica que simula uma RAM
estática. É uma alternativa barata para substituir as RAMs estáticas, que são mais caras. É
utilizada em sistemas embutidos.
• SDRAM – (Synchronous DRAM). Soma um sinal de clock separado. Pode conter
estados de maquinas mais complexos.
• CDRAM – (Cached DRAM). Combinam a memória principal e memória cachê num
único chip. O controlador da memória cachê deve ser adicionado externamente.
RAM estática: (SRAM “Static Random Access Memory”). É uma memória que não necessita
de circuitos adicionais em um microprocessador e as informações permanecem registradas
enquanto não houver nova escrita, ou não faltar alimentação aos biestáveis utilizados na
construção da célula de memória. Enquanto a alimentação for mantida constante, o biestável
permanece travado e pode armazenar o bit indefinidamente. É mais rápida que a DRAM, mas
por causa de sua pouca densidade de informação temos menor capacidade de armazenamento do
que uma DRAM. Geralmente são mais caras que as DRAM e são utilizadas principalmente em
locais onde a velocidade é extremamente importante como na memória cachê.
Saida
em tri
Saída state
9
Os transistores T3 e T4 funcionam como chaves lógicas que levam a saída a nível 1 e 0
respectivamente. Todavia, quando a entrada desabilitadora está em nível 0 coloca os dois
transistores em corte por meio do diodo D. Este drena o potencial de T2 para massa. Assim, a
saída fica em alta impedância em relação à fonte (nível 1) e ao terra (nível 0). O símbolo do
dispositivo de três estados é apresentado abaixo.
Entrada Saída
D
Figura 4 – Símbolo
Dispositivos de três estados podem ser acrescentados às linhas de dados de uma memória
para que vários chips do sistema possam usar o mesmo barramento de comunicação. Essas
chaves de três estados já incorporadas ao C. I. permitem conectar ou desconectar as linhas de
saída do barramento de dados.
Tempo de acesso da RAM é o tempo necessário para que o dado registrado em uma
posição endereçada seja transferido para os terminais de saída (tempo de acesso à leitura); ou o
tempo necessário para que o dado colocado nos terminais de entrada seja gravado na posição
endereçada (tempo de acesso à escrita). O tempo de acesso depende do chip utilizado e é
fornecido pelo manual do fabricante. A tabela abaixo mostra os tempos relacionados à tecnologia
de fabricação do chip.
Tecnologia Tempo de acesso (em ns)
TTL 60 a 200
ECL 10 a 40
PMOS estática 500 a 1000
NMOS estática 300 a 600
CMOS estática 400 a 700
PMOS dinâmica 400 a 700
NMOS dinâmica 200 a 550
2.4 – RAM
Entre as milhares memórias do tipo RAMs comercializadas atualmente, a 6116 de
tecnologia de fabricação MOS, será apresentada como exemplo. Essa memória é equivalente a
2128. Possui as seguintes características.
• Capacidade: 2K x 8 bits
• Alimentação: simples de 5v
• Tempo de acesso de chip enable (CE): 400 ns (Máximo)
• Nível de tensão: compatível com nível TTL
• Saída / entrada de dados comum
• Não requer clocks ou “strobe”
10
Descrição da pinagem
11
21 WE Habilita escrita quando em nível zero; habilita leitura quando em nível 1
22 A9 Bit 9 de endereço
23 A8 Bit 8 de endereço
24 VCC Alimentação – Vcc = +5v
2.5 – ROM
ROM: “Ready Only Memory” – “Memória somente de leitura” – Memória não volátil, ou seja,
sua informação é mantida mesmo sem alimentação. A memória ROM é equivalente a um grupo
de registradores, onde cada um é capaz de armazenar permanentemente uma palavra. Os
microcomputadores podem usar mais de uma ROM.
O número dessas memórias depende da extensão do programa a ser armazenado. As
ROMs são usadas para armazenar não só programas principais como também sub-rotinas e
microprogramas.
São também bastante úteis para o armazenamento de tabelas trigonométricas, tabelas de
divisão e multiplicação, tabelas de logaritmos, tabela de raiz quadrada ou programas de partida e
gerenciamento do sistema (programa monitor). Veja abaixo o esquema de uma ROM.
Endereço
An
.
A0
Saída de leitura
ROM S de dados
Controle
12
A PROM (“Programmable Read Only Memory”) permite que o próprio usuário armazene os
dados / programas desejados. Isso é feito com o auxílio de um programador PROM. A memória
possui uma malha de linhas cruzadas em forma de grade semelhante à da ROM. Em cada
interseção da grade está localizado um dispositivo (Diodo, transistor bipolar ou MOS) e em serie
com cada dispositivo existe um elemento de interrupção (fusível ou diodo). Os elos fusíveis são
queimados por meio da saturação de um transistor localizado na interseção linha / coluna cujo
endereço foi selecionado pelo circuito de decodificação. Nas PROMs que utilizam diodos, os
cruzamentos linha / coluna da grade são unidos por dois diodos ligados em serie oposta.
Abaixo temos uma figura que mostra a estrutura e o esquema elétrico de uma PROM que se
utiliza diodos.
A EPROM (“Erasable Programmable Read Only Memory”), isto é, uma memória programável
e apagável apenas de leitura. É uma ROM que pode ser apagada e reprogramada um número
indeterminado de vezes. As informações são apagadas pela exposição do chip à luz ultravioleta
(UV) de alta intensidade, a qual penetra por uma abertura de cristal (quartzo) existente no centro
do circuito integrado. A EPROM não pode ser apagada seletivamente, isto é, não pode ter apenas
parte de seus bits apagados. Quando exposta a UV, todos os bits são apagados.
A EEPROM ou EAROM (“Eletrically Erasable Programmable Read Only Memory”) ou
(“Eletrically Alterable Programmable Read Only Memory”), não necessitam de UV para serem
apagadas e sim de impulsos elétricos. Uma outra vantagem é o fato de não ser necessário retirar
esta memória do circuito para ser reprogramada. Apesar de serem memórias que apresentam
características não voláteis, as informações que se encontram armazenadas tendem a se
deteriorar com o tempo, o que não ocorre com as outras memórias da família ROM. Tem como
grande desvantagem um custo elevado e que podem ser apagada somente 10 mil vezes.
A FLASH MEMORY são memórias com características similares a EEPROM e EPROM, em
um produto que oferece as vantagens destas memórias sem o alto custo, onde temos:
- Não volátil, apagável eletricamente total ou por setor, no próprio circuito, grande densidade,
alta velocidade de acesso e o já citado baixo custo.
A célula de memória Flash é semelhante à célula de uma EPROM, e é constituída por um
único transistor. Na memória Flash, uma fina camada de oxido de silício forma a porta do
transistor, permitindo apagar eletricamente a memória e uma maior densidade que as EEPROMs,
com um custo menor.
13
2.6 - EPROM
As memórias bipolares são mais rápidas que as memórias MOSFETs. Entre as milhares
memórias ROMs comercializadas atualmente, a 2732-A de tecnologia de fabricação EPROM-
MOS, será apresentada como exemplo. Possui as seguintes características.
• Capacidade: 4K x 8 bits
• Alimentação: fonte única de 5v
• Tempo de acesso: 450 ns (Máximo)
• Tempo de programação total: 200s
• Nível de tensão de programação: +21 v
Descrição da pinagem
14
12 Vss Alimentação – GND = referencia 0 volt
13 D3 Bit 3 de dado
14 D4 Bit 4 de dado
15 D5 Bit 5 de dado
16 D6 Bit 6 de dado
17 D7 Bit 7 de dado
18 CE Habilita o chip quando em nível zero.
19 A10 Bit 10 de endereço
20 OE / Vpp Habilita barramento de dado quando em nível zero (tri-state). Passa
para o modo de programação quando em +21 v
21 A11 Bit 11 de endereço
22 A9 Bit 9 de endereço
23 A8 Bit 8 de endereço
24 VCC Alimentação – Vcc = +5v
Antes de programar uma memória EPROM, é necessário verificar se esta apagada, onde
deve apresentar todos os endereços em nível 1 e a leitura em qualquer posição de memória
devera apresentar o dado FFh.
Para apagar esta memória o fabricante recomenda a exposição do CI à luz ultravioleta de
intensidade 12mW por cm2, por um intervalo de tempo aproximado de 600s. A tabela abaixo
mostra os níveis necessários para ativar os pinos CE / OE e WE.
15
2.8 – Exercícios
3 – Qual a diferença entre uma memória RAM dinâmica e uma RAM estática ?
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
16
c – Memória com pinos de endereçamento de A0 até A15 e 8 bits de dados.
17
Anotações:
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
18
CAPÍTULO 3
¾ Microprocessador
¾ Dispositivo de entrada e saída
¾ Sistema de barramento
¾ Flags condição
19
3 – CONCEITOS BASICO MICROPROCESSADORES
3.1 – Microprocessador
Podemos definir o barramento como um conjunto de linhas físicas que possuem funções
específicas dentro do sistema. É composto de 3 barramentos independentes: o barramento de
endereços, o barramento de dados e o barramento de controle.
Barramento de endereços: é apenas saída tri-states ativas em nível alto, responsável pelo
caminho de comunicação dentro do sistema.
Barramento de dados: Funciona como barramento bidirecional para intercâmbio de dados entre
a UCP e a memória ou entre a UCP e periféricos de entrada e saída. Na saída de dados da CPU,
estes são gerados pelo microprocessador e enviados a uma unidade selecionada pelo barramento
de endereços. Na entrada de dados, estes são gerados por uma unidade particular e enviados ao
microprocessador.
Barramento de controle: É responsável por enviar e receber sinais de controle necessários à
transferência de dados no sistema. É composto basicamente de 4 tipos de sinais, sendo os de
leitura e escrita em memória e os de entrada e saída através de dispositivos externos.
21
Abaixo temos a arquitetura padrão de um microprocessador.
Sinais de controle
do Sistema
Decodificador de Controle da
Instruções CPU
Sinais de Controle
Registrador de
Instruções
Controle do
ALU Registrador da Controle de
Barramento de
(Aritmetic Logic Unit) CPU Endereços
Dados
Barramento Barramento
de Dados de
de 8 bits Endereços
de 16 bits
Um Flag é considerado “setado” quando se força o valor do bit para 1 e é “resetado”, forçando-
se o bit do Flag para 0. Uma instrução que afeta Flag o modifica da seguinte forma.
Carry: Se o resultado da instrução provoca um “carry” na adição ou um “borrow” na subtração
ou comparação, então a Flag de carry será setada. Se C = 1 resultado da operação com “carry ou
borrow”, se não C = 0 então não ocorreu “carry ou borrow”.
Carry auxiliar: Quando a instrução causou um “carry” do bit 3 para o bit 4. Se AC = 1 significa
que foi 1 na operação realizada, se AC = 0 não houve o “carry”.
Paridade: Se a soma dos bits do resultado da operação é 0. Se P = 1 significa que a paridade é
par, se P = 0 significa que a paridade é impar.
Sinal: Se o bit mais significativo do resultado da operação tem valor 1 então o sinal da operação
é negativo. Se S = 1 resultado negativo, se não S = 0 operação positiva.
Zero: Se o resultado da instrução tem valor zero. Se Z = 1 resultado zero da operação, se não Z
= 0 resultado da operação diferente de zero.
Condição
Flags Função setado ressetado setado se:
C Bit de carry C NC vai um do bit 7
N soma/subtração - - operação de subtração
P/V paridade/over-flow PE PO paridade par/over-flow
H half-carry - - vai um do bit 3
Z zero Z NZ resultado zero
S sinal M P resultado negativo
X não usado - - -
Observação:
M = “minus” (menos)
P = “plus” (mais)
23
Os bits de flags estão posicionados do seguinte modo dentro do registrador F:
Posição do bit 7 6 5 4 3 2 1 0
Flags S Z X H X P/V N C
O nível lógico de cada bit do registrador F indica a condição de cada uma das flags e
forma uma palavra binária. Assim, por exemplo, se o byte do registrador F apresentar a
combinação 0100 0001, ocorre a seguinte situação:
7 6 5 4 3 2 1 0
S Z X H X P/V N C
0 1 0 0 0 0 0 1
ou seja:
• bit 0 está em nível 1 informando que houve carry;
• bit 1 está em nível 0 indicando que se trata de uma operação de soma;
• os bits 2 e 4 em zero indicam condição de não-paridade e não-half-carry;
• os bits 3 e 5 não são utilizados (nível 0);
• bit 6 (flag de zero) em nível 1 informa que a operação lógica ou aritmética deu resultado
zero;
• bit 7 (flag de sinal) em nível 0 indica que o resultado da operação é positivo.
24
3.5 – Exercícios
• Acumulador_________________________________________________
___________________________________________________________
• Apontador da pilha___________________________________________
___________________________________________________________
• Contador de programa_________________________________________
___________________________________________________________
• Decodificador de instrução_____________________________________
___________________________________________________________
• Flags______________________________________________________
___________________________________________________________
• Registradores auxiliares_______________________________________
___________________________________________________________
• Registrador de instrução _______________________________________
___________________________________________________________
• Unidade de controle__________________________________________
___________________________________________________________
• Unidade Lógica Aritmética (ULA)_______________________________
___________________________________________________________
25
4 – Para as somas abaixo relacionadas indique quais os Flags setados.
a– + D6 b– + C3 c– + A2 d– + B5
7C 3D 5E 42
26
Anotações:
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
27
CAPÍTULO 4
O Microcontrolador
¾ A arquitetura do Microcontrolador
¾ Ciclos de máquina
¾ Introdução às interrupções
¾ O PIC 16F628
¾ Registradores especiais
28
4 – O MICROCONTROLADOR
30
Analisando a estrutura abaixo podemos definir:
Entrada Saída
CPU
Memória de
Clock Dados
Memória de
Programas
CPU – Vamos agora adicionar mais 3 locais de memória a um bloco específico para que
possamos ter as capacidades de multiplicar, dividir, subtrair e mover o seus conteúdos de um
local de memória para outro. A parte que vamos acrescentar é chamada "central processing unit"
(CPU) ou Unidade Central de Processamento. Os locais de memória nela contidos chamam-se
registros.
Os registros são, portanto, locais de memória cujo papel é ajudar a executar várias
operações matemáticas ou quaisquer outras operações com dados, quaisquer que sejam os locais
em que estes se encontrem.
31
Vamos olhar para a situação atual. Nós temos duas entidades independentes (memória e
CPU) que estão interligadas, deste modo, qualquer troca de dados é retardada bem como a
funcionalidade do sistema é diminuída. Se, por exemplo, nós desejarmos adicionar os conteúdos
de dois locais de memória e tornar a guardar o resultado na memória, nós necessitamos de uma
ligação entre a memória e o CPU. Dito mais simplesmente, nós precisamos de obter um
"caminho" através do qual os dados possam passar de um bloco para outro.
A unidade central de processamento coordena todas as atividades dentro do microcontrolador.
Ela organiza a execução das instruções e realiza as operações lógicas e aritméticas sobre os
dados e envia os resultados para os diversos registros ou portas de entrada e saída.
Portas de entrada e saída – Estas localizações que acabamos de adicionar, chamam-se "portos".
Existem vários tipos de portos: de entrada, de saída e de entrada/saída. Quando trabalhamos com
portos primeiro de tudo é necessário escolher a porta com que queremos trabalhar e, em seguida,
enviar ou receber dados para ou desse porto.
Quando se está a trabalhar com ele, a porta funciona como um local de memória. Qualquer coisa
de que se está a ler ou em que se está a escrever e que é possível identificar facilmente nos pinos
do microcontrolador. São os pontos através dos quais o microcontrolador interage com o
ambiente externo. As portas assumem valores discretos, normalmente referenciados como 0 ou
1, correspondente a 0 v ou 5 v de saída. Alguns microcontroladores possuem uma ou mais portas
de entrada especiais chamadas de “Interrupts”. Estas portas não exigem que a CPU fique
vigiando a ocorrência do evento na porta, porque interrompem o programa sendo executado cada
vez que ocorre um dado evento. Os “Interrupts” são uma das características mais utilizadas nos
projetos em que se necessite de uma rapidez de resposta a eventos assíncronos, que podem
ocorrer a qualquer instante.
32
Os componentes de memória são exatamente a mesma coisa. Para um determinado
endereço, nós obtemos o conteúdo desse endereço. Dois novos conceitos foram apresentados:
endereçamento e memória. A memória é o conjunto de todos os locais de memória (gavetas) e
endereçamento nada mais é que selecionar um deles. Isto significa que precisamos de selecionar
o endereço desejado (gaveta) e esperar que o conteúdo desse endereço nos seja apresentado
(abrir a gaveta). Além de ler de um local da memória (ler o conteúdo da gaveta), também é
possível escrever num endereço da memória (introduzir um conteúdo na gaveta). Isto é feito
utilizando uma linha adicional chamada linha de controle. Nós iremos designar esta linha por
R/W (read/write) - ler/escrever. A linha de controle é usada do seguinte modo: se r/w=1, é
executada uma operação de leitura, caso contrário é executada uma operação de escrita no
endereço de memória. A memória é o primeiro elemento, mas precisamos de mais alguns para
que o nosso microcontrolador possa trabalhar. É normalmente implementada na forma de RAM
em que podemos ler e gravar com facilidade. A capacidade de memória RAM no
microcontrolador é bem pequena, ela possui um barramento de 8bits, pois somente teremos o
transito de dados entre a memória e a CPU. A memória RAM é dividida em duas partes distintas,
uma para abrigar os registradores de funções especiais (SFR) e outra para abrigar os
registradores de propósitos gerais (GPR).
Memória de programa – é onde residem as instruções que devem ser executadas pela CPU. O
programa é gravado apenas uma vez e a partir daí o microcontrolador executa apenas este
programa. A maior parte dos microcontroladores PIC, utiliza a memória EEPROM ou FLASH,
que pode ser apagada por meios elétricos. Existem quatro tecnologias típicas de implementação:
a ROM do tipo mascara, são identificados pelo sufixo “CR”; o OTP, identificado pelo sufixo
“C”; a EPROM identificada pela janela característica e que pode ser do tipo “JW” com
encapsulamento DIP ou “CL” para encapsulamento do tipo PLCC. E a memória FLASH. Uma
característica importante da memória do microcontrolador PIC é que ela pode ser acessada por
software. Também devido a características da arquitetura RISC, a instrução de chamada e de
desvio tem disponíveis somente 11 bits para os endereços usados. Por esse motivo a memória de
programa é dividida em paginas. Usamos o PCLATH para direcionar os endereços.
X X X 4 3 2 1 0 7 6 5 4 3 2 1 0
33
4.2 - Ciclos de Máquina
34
4.3 - Introdução às Interrupções
Como o próprio nome diz, uma interrupção serve para interromper o programa
imediatamente e desta forma realizar uma outra atitude instantaneamente. As interrupções são
ações tratadas diretamente pelo “Hardware”, o que as torna muito rápidas e disponíveis em
qualquer ponto do sistema. Quando uma interrupção acontece, o programa é paralisado e uma
função específica é executada e depois o programa continua a ser executado no mesmo ponto em
que estava. No PIC temos vários tipos de interrupções que podem ser provocadas de modo
diferentes e com diferentes atuações.
Nos modelos mais antigos, não possuíam nem interrupção e nos modelos mais novos da
família PIC, podemos encontrar até 18 tipos diferentes de interrupções, como estamos estudando
o PIC 16F628, somente iremos estudar quatro tipos de interrupções.
Interrupção de TIMER 0 - Essa interrupção acontece sempre que um contador de tempo
interno, denominado TMR0 (Timer 0), estoura, ou seja, como ele é um contador de 8 bits,
sempre que ele passar de 0xFF para 0x00. Utilizado principalmente para contagem de tempo. O
TMR0 pode tanto ser incrementado pelo clock da máquina, como também por um sinal externo,
o que neste caso ele passa a ser um contador de pulsos, com outra finalidade. O flag sinalizador
da interrupção
E chamado de T0IF e o bit de controle é chamado de T0IE. Ambos se encontram no registrador
INTCON.
Interrupção EXTERNA – Essa interrupção é gerada por um sinal externo ligado a uma porta
específica do PIC, no caso a porta RB0, caso ela seja definida como entrada. Deste modo se
podemos identificar e processar imediatamente um sinal externo.
Para que possa ser identificado, é necessário que se defina se a identificação será realizada na
borda de subida ou descida do sinal, é necessário configurar a porta. A flag de sinalização da
interrupção externa é chamada de INTF e o controle de habilitação é chamado de INTE e ambos
se encontram no registrador INTCON.
Interrupção por MUDANÇA DE ESTADO – A interrupção por mudança de estado ocorre se
existe a mudança do sinal sem se importar se foi na borda de subida ou descida. Esta interrupção
esta ligada as porta RB4, RB5, RB6 e RB7 simultaneamente. Por isso se essas portas forem
configuradas como entradas, a mudança de estado em qualquer uma delas irá gerar uma
interrupção. Esse tipo de interrupção pode ser utilizado, por exemplo, para criar um sincronismo
com a rede, para controle de um triac ou outro sistema qualquer. O flag sinalizador desta
interrupção é chamado de RBIF e o sinal de controle é chamado de RBIE. Ambos se encontram
sempre no registrador INTCON.
Interrupção de FIM NA ESCRITA NA EEPROM – Os PICs possuem uma memória
EEPROM interna e essa interrupção serve para detectarmos o final de uma rotina de escrita nessa
memória. A utilização da interrupção não é obrigatória para que a escrita funcione, mas como a
EEPROM é lenta na hora de escrever, em alguns sistemas a sua utilização pode ser necessária
para evitar uma parada durante a escrita na EEPROM. O flag sinalizador da interrupção é o EEIF
e o bit de controle é chamado de EEIE.
Interrupções - Sempre que uma interrupção acontece (qualquer uma), o programa guarda o
endereço da próxima linha a ser executada na pilha, e desvia para um endereço fixo da memória
de programação. Basta então, nesse endereço (0x04), escrever a rotina que irá reconhecer e tratar
a interrupção acontecida, sempre que o microcontrolador desvia para esse endereço, o bit GIE é
desligado, quando se executa uma instrução de retorno de interrupção RETFIE, faz com que o bit
GIE seja habilitado permitindo uma nova ocorrência de interrupção.
35
Quando a rotina de interrupção for terminada, o programa automaticamente voltará ao ponto em
que estava antes de ocorrer à interrupção. O atraso de tempo existente entre a ocorrência de um
evento de interrupção e o efetivo desvio para o vetor de interrupção é chamado de latência de
interrupções. Existem outros modos de interrupção, mas não será analisado.
1 RA2/AN2/Vref RA1/AN1 18
2 RA3/AN3/CMP1 RA0/AN0 17
3 RA4/T0CKI/CMP2 RA7/OSC1/CLKIN 16
4 RA5/MCLR/THV RA6/OSC2/CLKOUT 15
5 Vss Vdd 14
6 RB0/INT RB7/T1OSI 13
7 RB1/RX/DT RB6/T1OSO/T1CKI 12
8 RB2/TX/CK RB5 11
9 RB3/CCP1 RB4/PGM 10
PIC 16F62X
36
Pino Função Tipo Descrição
1 RA2/AN2/Vref Entrada e saída Porta A bit 2 / Entrada do comparador
analógico / Saída da referencia de tensão.
2 RA3/AN3/CMP1 Entrada e saída Porta A bit3 / Entrada comparador analógico
/ Saída comparador 1.
3 RA4/T0CKI/CMP2 Entrada e saída Porta A bit 4 / Entrada clock externo do timer
0 / Saída comparador 2. Saída em dreno
aberto.
4 RA5/MCLR/THV Entrada Porta A bit 5 / Reset CPU / tensão de
programação.
5 Vss Alimentação Terra.
6 RB0/INT Entrada e saída Porta B bit 0 / Entrada de interrupção
externa.
7 RB1/RX/DT Entrada e saída Porta B bit 1 / Recepção USART (modo
assíncrono) / Dados (modo síncrono).
8 RB2/TX/CK Entrada e saída Porta B bit 2 / Transmissão USART (modo
assíncrono) / Clock (modo síncrono)
9 RB3/CCP1 Entrada e saída Porta B bit 3 / Entrada e saída do modulo
CCP.
10 RB4/PGM Entrada e saída Porta B bit 4 / E entrada de programação
LVP.
11 RB5 Entrada e saída Porta B bit 5.
37
4.6 - Considerações iniciais sobre o Hardware
Alimentação – Como vimos na pinagem do 16F628, falamos sobre os pinos Vss e Vdd.
Portanto, se tivermos uma fonte segura de 5 Vcc, ligando o GND ao pino 5 e o +5 V ao pino 14.
É importante que essa fonte não tenha grandes variações de tensão (riplle) e ruídos. O PIC
16F628, apesar de ter sua tensão nominal em 5 Vcc, pode ser alimentado de 2.0 a 6.0 V, mas
essa tensão não deve ficar variando durante sua utilização. Utilizar o capacitor com valor entre
100pF e 100nF em paralelo com os pinos de alimentação.
Osciladores – O oscilador do PIC 16F628 pode ser externo ou interno e sem ele o programa não
é executado e nada funciona. O oscilador interno é capaz de operar em sete modos diferentes e
somente em um modo externo. 1.Como um cristal de baixa potencia (até 200KHz) – 2.Cristal /
Ressonador cerâmico (até 4MHz) – 3.Cristal / Ressonador cerâmico de alta freqüência (até
20MHz) – 4.Resistor externo sem saída de clock – 5.Resistor externo com saída de clock –
6.Oscilador RC interno sem saída de clock – 7.Oscilador RC interno com saída de clock –
8.Clock externo.
Cristal / Ressonador – Quando utilizamos um ressonador ou um cristal de quartzo mais dois
capacitores, é possível implementar um oscilador de clock para o PIC. Devemos configurar o
microcontrolador de acordo com o modo do oscilador em função da freqüência do cristal ou
ressonador utilizado. Onde quando utilizarmos uma freqüência menor que 200KHz (modo LP),
uma freqüência entre 200KHz e 4MHz (modo XT) e uma freqüência maior que 4MHz (modo
HS). Os capacitores entre 10 e 33 pF.
PIC16F628 C1
1 18
2 17
3 16
4 15 XTAL
5 14
6 13 C2
7 12
8 11
9 10
Oscilador / Resistor – É utilizado um resistor conectado ao pino RA7 ao terra para gerar o clock
para a CPU. O oscilador trabalha com uma freqüência desde 10KHz a 8MHz e o resistor deve
estar entre 38K e 1MΩ. Para definirmos esta operação o bit OSCF no registrador PCON, deve
estar em 1.
38
Oscilador Interno – É um oscilador de 4MHz derivado de um clock obtido a partir de um
oscilador RC interno. Esse oscilador possui razoável precisão com um valor típico de 4Mhz, com
mínimo de 3,65 e máximo de 4,28Mhz. Permite uma maior disponibilidade dos pinos do PIC,
pois RA6 e RA7 estão liberados. Para definirmos esta operação o bit OSCF no registrador
PCON, deve estar em 0, se estiver em 1 estaremos com um clock de 37KHz.
É necessário implementar no programa na etapa de configuração do microcontrolador a seguinte
instrução “_INTRC_OSC_NOCLKOUT“ e retira-se a instrução _XT_OSC.
Clock Externo – Quando utilizarmos um clock externo para o PIC é necessário configurar o
modo do oscilador para EC.
Detector baixa tensão – É um detector de baixa tensão, conhecido também como detector de
“Brown – out”, onde caso a tensão de alimentação diminuir abaixo do valor de Vz, um reset do
MCU é implementado fazendo com que a CPU reinicialize o programa. Caso seja utilizada uma
tensão baixa de alimentação é necessário desabilitar o bit BODEN = 0 para que não seja
detectado.
39
4.7 - Registradores especiais
Como vimos o microcontrolador PIC possui uma série de registradores especiais que são
denominados SFR (Special Function Registers) que servem exatamente para guardar a
configuração e o estado de funcionamento atual da máquina. Para efeito de padronização, cada
bit dentro desses registradores receberá um nome, sendo também especificado se esse bit pode
ser lido (R-Read) e/ou escrito (W-Write). Veremos agora para que serve e como é composto
cada um desses registradores.
4.8 - Registradores Gerais
Conhecendo o STATUS – Esse registrador serve para mostrar o estado da ULA, a forma do
último reset e também para configurar a pagina de programação atual, quando necessário.
Z – Indicação de zero.
0 = Indica que o resultado da ultima operação (lógica ou aritmética) não foi zero.
1 = Indica que a ultima operação (lógica ou aritmética) resultou em zero.
40
DC – Digit Carry/borrow.
0 = A ultima operação da ULA não ocasionou um estouro de dígito.
1 = A ultima operação da ULA ocasionou um estouro (carry) entre o bit 3 e 4, isto é o
resultado ultrapassou os 4 bits menos significativos.
C – Carry.
0 = A ultima operação da ULA não ocasionou um estouro (carry)
1 = A ultima operação da ULA ocasionou um estouro (carry) no bit mais significativo.
41
CM2 CM1 CM0 Modo
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7
Modo 1 – Dois comparadores com três entradas Multiplexadas onde temos 2 entradas conectadas
à entrada inversora de C1 e ambos comparadores compartilham a mesma referência externa
conectada à entrada inversora de RA2/AN2/Vref.
Modo 2 – Dois comparadores com quatro entradas multiplexadas onde temos os comparadores
configurados com a entrada não inversora conectada ao módulo de referência de tensão interna
(VREF). As entradas inversoras de cada comparador são multiplexadas.
Modo 3 – Dois comparadores com uma referência externa comum onde temos uma configuração
na qual os dois comparadores possuem uma referência de tensão externa conectado ao pino
RA2/AN2/Vref. Deste modo o pino RA3/AN3/CMP1 pode ser utilizado como I/O digital.
Modos 6 – Neste modo têm os dois comparadores compartilhando a mesma referência externa
comum (RA2/AN2/Vref). As saídas C1OUT e C2OUT encontram-se disponíveis externamente
nos pinos RA3/AN3/CMP1 e RA4/T0CKI/CMP2 respectivamente.
42
Conhecendo o OPTION – Esse registrador serve para configurar uma série de opções para a
operação do microcontrolador. Apesar de este registrador receber o nome OPTION, ele será
referenciado em nossos programas pelo nome OPTION-REG, pois os PICs mais antigos
possuíam uma instrução chamada OPTION.
TOSE – Configuração da borda que incrementará o TMR0 no pino RA4/T0CKI quando TOCS =
1.
0 = Incremento na borda de subida. 1 = Incremento na borda de descida.
43
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128
Conhecendo o PCON – Esse registrador serve para sinalização de dois estados de reset. O reset
por queda de tensão de alimentação (Brown-out) e o reset de inicialização (Power-on reset).
Além disso, o bit 3 desse registrador controla o clock do chip quando nos modos de oscilador
interno ou resistor externo.
44
EEIE – Habilitação da interrupção de final de escrita na EEPROM (chave individual).
0 = A interrupção não será tratada. 1 = A interrupção será tratada.
RBIE – Habilitação da interrupção por mudança de estado nos pinos RB4 a RB7 (chave
individual).
0 = A interrupção não será tratada. 1 = A interrupção será tratada.
RBIF – Identificação da interrupção por mudança de estado nos pinos RB4 a RB7.
0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu.
45
RCIE – Habilitação de interrupção de mudança de estado dos comparadores.
0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu.
O bit 3 do registrador deve ser sempre mantido em “0”. Para habilitar a CPU, utilizando uma das
interrupções devemos setar o bit PEIE e o bit GIE no INTCON.
46
CCPIF – Sinalizador de comparação / captura no módulo CCP.
0 = Não houve comparação válida / captura no módulo CCP.
1 = Houve comparação / captura no módulo CCP.
47
Registrador: TRISA Endereços: 85h
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Ref. RA7 Ref. RA6 Ref. RA5 Ref. RA4 Ref. RA3 Ref. RA2 Ref. RA1 Ref. RA0
As portas PORTA e PORTB – Como vimos o PIC 16F628 possui duas portas PORTA e
PORTB. O estado dessas portas é acessado diretamente em duas posições distintas da memória.
Quando um pino dessas portas é configurado como entrada ao lermos o seu bit relacionado,
encontraremos diretamente o nível lógico aplicado a esse pino. Da mesma maneira, ao
configurarmos um pino como saída, podemos alterar seu estado, escrevendo diretamente no bit
relacionado.
4.8.2 – Contadores
O bloco de temporização que nos interessa bastante porque pode dar-nos informações
acerca da hora, duração, protocolo, etc. A unidade básica do temporizador é um contador que é
na realidade um registro cujo conteúdo aumenta de uma unidade num intervalo de tempo fixo,
assim, anotando o seu valor durante os instantes de tempo T1 e T2 e calculando a sua diferença,
nós ficamos a saber a quantidade de tempo decorrida. Esta é uma parte muito importante do
microcontrolador, cujo domínio vai requerer muita da nossa atenção.
48
Conhecendo o TMR0 – O TMR0 é um contador de 8 bits que pode ser acessado diretamente na
memória, tanto par leitura quanto para a escrita. A diferença entre ele e os demais registradores é
que seu incremento é automático e pode ser feito pelo clock da máquina ou por um sinal externo.
É importante lembrar que o estouro desse contador pode gerar uma interrupção. É acessado por
três registradores, o OPTION_REG, o TMR0 e o INTCON.
Conhecendo o WDT – O watchdog outra coisa que nos vai interessar é a fluência da execução
do programa pelo microcontrolador durante a sua utilização. Suponha que como resultado de
qualquer interferência (que ocorre frequentemente num ambiente industrial), o nosso
microcontrolador pára de executar o programa ou, ainda pior, desata a trabalhar incorretamente.
Claro que, quando isto acontece com um computador, nós simplesmente carregamos no
botão de reset e continuamos a trabalhar. Contudo, no caso do microcontrolador nós não
podemos resolver o nosso problema deste modo, porque não temos botão. Para ultrapassar este
obstáculo, precisamos de introduzir no nosso modelo um novo bloco chamado watchdog (cão de
guarda). Este bloco é de fato outro contador que está continuamente a contar e que o nosso
programa põe a zero sempre que é executado corretamente. No caso de o programa "encravar", o
zero não vai ser escrito e o contador, por si só, encarregar-se-á de fazer o reset do
microcontrolador quando alcançar o seu valor máximo. Isto vai fazer com que o programa corra
de novo e desta vez corretamente. Este é um elemento importante para que qualquer programa se
execute fiavelmente, sem precisar da intervenção do ser humano.
49
O Watchdog Timer (WDT), popularmente conhecido como “cão de guarda”, também é um
contador incrementado automaticamente, só que com um clock independente. O PIC possui um
RC interno só para a operação WDT. Isto significa que seu tempo de incremento é constante,
independentemente do oscilador utilizado para gerar o clock da máquina. O tempo normal de
estouro do WDT é cerca de 18ms, mas pode variar de acordo com a tensão de alimentação e a
temperatura. Uma outra característica desse contador é que ele não é acessível ao programador,
nem para a escrita e nem para a leitura. O programador só pode utilizar um comando (CLRWT)
para zerá-lo, o que é muito importante, pois se o WDT estourar (passar de 0xFF para 0x00), o
sistema será automaticamente resetado, tornando a utilização do WDT muito importante para
evitarmos que o sistema trave em determinadas situações. É importante saber também que o
WDT pode ser desligado, como uma escolha de configuração na hora de gravar o
microcontrolador, porém não permite que seja desligado durante a execução do programa.
Conhecendo o PRESCALER – Acabamos de ver que o TMR0 pode ser incrementado pelo
clock da máquina ou por um sinal externo, assim como o WDT é incrementado automaticamente
e estoura a cada 18 ms. Desta maneira, é fácil efetuarmos cálculos de tempo com esses
contadores. Só que ambos executam ações específicas no caso de estouro (interrupção ou reset).
Como alterar então o tempo de estouro de cada um desses contadores? Para o TMR0 fica mais
fácil, pois alterando o oscilador, alteramos também os seus incrementos. Mas isso é viável? E
para o WDT, como podemos alterar seu tempo? Esta é a função do Prescaler. Trata-se de um
divisor configurável que pode ser aplicado a um dos dois contadores. Temos aqui então a maior
limitação do Prescaler, pois ele só pode ser aplicado a um dos contadores de cada vez (bit PSA
do OPTION). Com esse divisor ativo, o tempo de estouro é multiplicado na ordem inversa. Por
exemplo:
Um sistema este rodando a 4 MHz. Desta forma, temos um ciclo de máquina e
conseqüentemente, uma instrução sendo rodada a cada 1µs. Sem o prescaler, o TMR0 também
seria incrementado a cada 1µs. estourando em 256 µs. Se configurarmos o Prescaler em 1:4, o
TMR0 só será incrementado a cada 4 ciclos de máquina, neste caso correspondem a 4 µs. O
estouro aparecerá então em 1024 µs.
A mesma analogia pode ser aplicada ao WDT. Sem Prescaler, o WDT estoura em
aproximadamente 18 ms. Se configurarmos o Prescaler em 1:4, ele irá estourar aproximadamente
em 72 ms.
Para podermos configurar o Prescaler em 1:1 para o TMR0, é necessário aplicar o
Prescaler ao WDT e desta maneira, o TMR0 ficará sem Prescaler, o que resultará em incremento
de 1:1.
4.8.3 - EEPROM
Conhecendo o EEADR – Trata-se de um registrador em que será especificado o endereço para
escrita ou leitura da EEPROM interna do PIC 16F628, o qual possui uma memória de 128 bytes.
50
Conhecendo o EEDATA – Esse registrador possui duas funções distintas: nas operações de
escrita da EEPROM, ele deve ser preenchido com o dado a ser armazenado, já nas operações de
leitura, ele armazena o dado lido.
Conhecendo o FSR e o INDF – O FSR é um registrador em que pode ser escrito um outro
endereço de memória que será acessado indiretamente, como se ele fosse apenas um ponteiro. Já
o INDF não é um registrador realmente verdadeiro, trata-se somente de um espelho do endereço
apontado pelo FSR.
52
4.9 – Exercícios
53
5 – Dentre os ciclos de máquina, a divisão do clock por quatro, forma as fases Q1,
Q2, Q3, Q4. Explique a função Pipeline, com base nas informações anteriores.
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
54
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
55
14 – Indique qual a função dos registradores abaixo relacionados.
a – STATUS _______________________________________________________
__________________________________________________________________
b – OPTION________________________________________________________
__________________________________________________________________
c – PCON__________________________________________________________
__________________________________________________________________
d – INTCON________________________________________________________
__________________________________________________________________
e – PIE1___________________________________________________________
__________________________________________________________________
f – PIR1___________________________________________________________
__________________________________________________________________
g – PCL___________________________________________________________
__________________________________________________________________
h – PCLATH________________________________________________________
__________________________________________________________________
i – TRIS___________________________________________________________
__________________________________________________________________
j – PORTA e PORTB_________________________________________________
__________________________________________________________________
__________________________________________________________________
56
k – TMR0__________________________________________________________
__________________________________________________________________
l – TMR1__________________________________________________________
__________________________________________________________________
m – TRM2_________________________________________________________
__________________________________________________________________
n – WDT___________________________________________________________
__________________________________________________________________
o – PRESCALER____________________________________________________
__________________________________________________________________
p – EEPROM_______________________________________________________
__________________________________________________________________
q – EEDATA_______________________________________________________
__________________________________________________________________
r – EECONS________________________________________________________
__________________________________________________________________
s – FSR e INDF_____________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
57
Anotações:
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
58
CAPÍTULO 5
59
5 – RESUMOS E CONDICOES DOS BANCOS DE MEMORIA APÓS
RESET
Hex Nome Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Power-on Outros Reset
BANK 0
00 INDF Valor do endereço indireto (não é um registrador verdadeiro) ---- ---- ---- ----
01 TMR0 Contador TMR0 de 8 bits xxxx xxxx uuuu uuuu
02 PCL Parte baixa (8 bits menos significativos) do PC 0000 0000 0000 0000
03 STATUS IRP RP1 RP0 /TO /PD Z DC C 0001 1xxx 000q quuu
04 FSR Ponteiro para o endereçamento indireto à memória xxxx xxxx uuuu uuuu
05 PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 xxxx 0000 xxxx 0000
06 PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
07 Não implementado no PIC 16f628. O valor lido é sempre zero.
15 CCPR1L Registrador de captura / comparação / PWM (LSB) xxx xxxx xxxx xxxx
16 CCPR1H Registrador de captura / comparação / PWM (LSB) xxx xxxx xxxx xxxx
17 CCP1CON - - CCP1X CCP1Y CCP1 CCP1 CCP1 CCP1 --00 0000 --00 0000
M3 M2 M1 M0
18 RCSTA SPEN RX9 SREN CREN ADEN FERR OERR RX9D 0000 –00x 0000 –00x
60
1E Não implementado no PIC 16f628. O valor lido é sempre zero.
1F CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 0000 0000 0000 0000
BANK 1
80 INDF Valor do endereçamento indireto ---- ---- ---- ----
81 OPTION /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
82 PCL Parte baixa (8 bits menos significativos) do PC 0000 0000 0000 0000
83 STATUS IRP RP1 RP0 /TO /PD Z DC C 0001 1xxx 000q quuu
84 FSR Ponteiro para o endereçamento indireto xxxx xxxx uuuu uuuu
85 TRISA RA7 RA6 - RA4 RA3 RA2 RA1 RA0 1111 1111 1111 1111
86 TRISB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 1111 1111 1111 1111
87 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
88 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
89 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
8A PCLATH - - - Parte alta do PC ---0 0000 ---0 0000
8B INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000u
8C PIE1 EEIE CMIE RCIE TXIE - CCP1IE TMR2IE TMR1IE 0000 -000 0000 –000
8D Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
8E PCON - - - - OSCF - /POR /BOD ---- 1-0x ---- 1-uq
8F Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
90 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
91 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
92 PR2 Registrador de período do timer 2 1111 1111 1111 1111
93 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
94 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
95 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
96 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
97 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
98 TXSTA CSRC TX9 TXEN SYNC - BRGH TRMT TX9D 0000 -010 0000 -010
99 SPBRG Registrador do gerador de Baud Rate (BRG) 0000 0000 0000 0000
9A EEDATA Registrador de dados da EEPROM xxxx xxxx xxxx xxxx
9B EEADR - Registrador de endereçamento da EEPROM xxxx xxxx xxxx xxxx
9C EECON1 - - - - WRERR WREN WR RD ---- x000 ---- q000
9D EECON2 Registrador de controle auxiliar da EEPROM ---- ---- ---- ----
9E Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
9F VIRCON VRE VROE VRR - VR3 VR2 VR1 VR0 000- 0000 000- 0000
61
BANK 2
100 INDF Valor do endereçamento indireto ---- ---- ---- ----
101 /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
102 PCL Parte baixa (8 bits menos significativos) do PC 0000 0000 0000 0000
103 STATUS IRP RP1 RP0 /TO /PD Z DC C 0001 1xxx 000q quuu
104 FSR Ponteiro para o endereçamento indireto xxxx xxxx uuuu uuuu
105 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
106 PORT B RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 1111 1111 1111 1111
107 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
108 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
109 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
10A PCLATH - - - Parte alta do PC ---0 0000 ---0 0000
10B INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000u
11F Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
BANK 3
180 INDF Valor do endereçamento indireto ---- ---- ---- ----
181 /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
182 PCL Parte baixa (8 bits menos significativos) do PC 0000 0000 0000 0000
183 STATUS IRP RP1 RP0 /TO /PD Z DC C 0001 1xxx 000q quuu
184 FSR Ponteiro para o endereçamento indireto xxxx xxxx uuuu uuuu
185 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
186 PORT B RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 1111 1111 1111 1111
187 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
188 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
189 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
18A PCLATH - - - Parte alta do PC ---0 0000 ---0 0000
18B INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000u
19F Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----
62
5.1 - Programação e linguagem de máquina
Para que um circuito microprocessado execute as tarefas para as quais foi projetado, é
necessário que o programador informe ao sistema o que deseja que ele faça. Isso é feito com o
auxilio de instruções organizadas numa seqüência lógica e coerente. Essa seqüência de
instruções recebe o nome de programa. Os microcontroladores somente executam programas
cujas instruções estejam codificadas em linguagem binária, também conhecidas como código de
máquina.
Quando se programa um circuito microprocessado, utilizamos uma linguagem que
abrevia os códigos (hexadecimal) em instruções mnemônicas. Os mnemônicos são mais fáceis de
memorizar e facilitam a identificação das instruções. A programação é realizada em linguagem
assembly e deve conter o código de operação, o operando e o comentário da instrução.
5.2 - Noções de fluxograma de programação
Um fluxograma constitui-se de um conjunto de símbolos interligados por setas que
indicam o sentido do fluxo do programa. Cada símbolo do fluxograma tem uma forma própria
que define sua função. Abaixo temos uma tabela que apresenta apenas os símbolos mais
utilizados e suficientes para desenvolver as atividades de programação.
Símbolo Descrição
Processamento
Uma instrução ou grupo de instrução que executam uma função de
processamento de programa
Terminal
O ponto de início, término ou interrupção de um programa.
Decisão
Símbolo utilizado para indicar a possibilidade de desvios para
diversos outros pontos do programa de acordo com situações
variáveis.
Processamento Predefinido
Um grupo de operações não incluídas no diagrama de blocos. Ex:
sub-rotinas.
Conexão de página
Uma conexão utilizada para indicar uma entrada ou saída, ou para
outra página do diagrama.
Direção de Fluxo
A direção do fluxo de dados ou de processamento.
63
Set de instruções, termos mais utilizados – Antes de apresentar o set de instruções é necessário
que alguns termos utilizados na construção dos nomes das instruções sejam apresentados.
WORK – Trata-se de um registrador temporário para operações na ULA. No Assembler do PIC,
ele é conhecido com W ou acumulador.
FILE – Referência a um registrador (posição de memória) propriamente dito. Utilizaremos a
letra F para sua representação nos nomes de instruções e f nos argumentos delas.
LITERAL – Um numero qualquer que pode ser escrito na forma decimal, hexadecimal ou
binária. Utilizaremos a letra L para sua representação nos nomes de instruções e k nos
argumentos delas.
DESTINO – O local onde deve ser armazenado o resultado da operação. Existem somente dois
destinos possíveis: F, que guardará o resultado no próprio registrador passado como argumento,
ou W, que colocará o resultado em Work. Na verdade, a sintaxe das instruções, o destino deve
ser expresso pelos números 0 (W) e 1 (F). No entanto, como veremos mais adiante, as letras F e
W são definidas no “include” para facilitar a programação.
BIT – Bit especifico dentro de um byte, utilizaremos a letra B para sua representação nos nomes
de instruções de bit.
TESTE – Quando queremos testar o estado de um bit, para descobrirmos se ele é zero ou um.
Utilizaremos a letra T para representá-lo nos nomes das instruções.
SKIP – Significa “pulo” e é utilizado para criar desvios, pulando a próxima linha. Utilizaremos a
letra S para representá-lo nos nomes das instruções.
SET – Refere-se ao ato de setar um bit, significa levá-lo ao estado Um. Utilizaremos a letra S
para representá-lo nos nomes das instruções.
CLEAR – Refere-se ao “clear” de um bit, significa levá-lo ao estado Zero. Utilizaremos a letra C
para representá-lo nos nomes das instruções.
ZERO – Algumas instruções podem gerar desvios se o resultado da operação efetuada for zero.
Neste caso, utilizaremos a letra Z para indicar tal condição.
Outros termos utilizados são específicos das ações realizadas pelas instruções e são
praticamente auto-explicativos. Citados abaixo.
ADD – Soma. AND – Lógica “E”.
CLR – Limpar, zerar (Clear) COM - Complemento
DEC – Decremento de uma unidade INC – Incremento de uma unidade
IOR – Lógica “OU” MOV – Mover, transferir para algum lugar.
RL – Rotacionar 1 bit para esquerda (Left) RR – Rotacionar 1 bit para direita (Right)
SUB – Subtração XOR – Lógica “OU exclusivo”.
SWAP – Inversão entre as partes alta e baixa de um registrador.
Para facilitar a compreensão das 35 instruções que compõe o PIC 16F628, vamos organizá-los
em quatro grupos conforme as suas aplicações.
- Operações com registradores. - Operações com literais.
- Operações com bits - Controles.
64
5.3 - O resumo das instruções
A linha de PICs de 14 bits compartilha o mesmo conjunto de instruções. Isto facilita em
muito a migração de um dispositivo para o outro, visto que poderemos reutilizar muito o
software. O que diferencia são os registradores internos dos dispositivos.
Operações com registradores
Instrução Argumentos Descrição
ADDWF f,d Soma W e f guardando o resultado em d.
ANDWF f,d Lógica “E” entre W e f, guardando o resultado em d.
CLRF f Limpa f.
COMF f,d Calcula o complemento de f, guardando o resultado em d.
DECF f,d Decrementa f, guardando o resultado em d.
DECFSZ f,d Decrementa f, guardando o resultado em d e pula a próxima linha se
o resultado for zero.
INCF f,d Incrementa f, guardando o resultado em d.
INCFSZ f,d Incrementa f, guardando o resultado em d e pula a próxima linha se
o resultado for zero.
IORWF f,d Lógica “OU” entre W e f, guardando o resultado em d.
MOVF f,d Move o conteúdo de f para d (cópia).
MOVWF f Move o conteúdo de W para f (cópia).
RLF f,d Rotaciona o conteúdo de f um bit para esquerda.
RRF f,d Rotaciona o conteúdo de f um bit para direita.
SUBWF f,d Subtrai W d f (f - W), guardando o resultado em d.
SWAPF f,d Executa uma inversão entre as partes alta e baixa de f, guardando o
resultado em d.
XORWF f,d Lógica “OU exclusivo” entre W e f, guardando o resultado em d.
Operações com literais
Instrução Argumentos Descrição
ADDLW k Soma k com W, guardando o resultado em W.
ANDLW k Lógica “E” entre K e W, guardando o resultado em W.
IORLW k Lógica “OU” entre K e W, guardando o resultado em W.
MOVLW k Move k para W.
SUBLW k Subtrai W de k (k – W), guardando o resultado em W.
XORLW k Lógica “OU exclusivo” entre K e W, guardando o resultado em W.
Operações com bits
Instrução Argumentos Descrição
BCF f,b Impõe 0 (zero) ao bit b do registrador f.
65
BSF f,b Impõe 1 (um) ao bit b do registrador f.
BTFSC f,b Testa o bit b do registrador f, e pula a próxima linha se ele for 0
(zero).
BTFSS f,b Testa o bit b do registrador f, e pula a próxima linha se ele for 1
(um).
Controle
Instrução Argumentos Descrição
CLRW - Limpa W.
NOP - Gasta um ciclo de máquina sem fazer absolutamente nada.
CALL R Executa a rotina R.
CLRWDT - Limpa o registrador WDT para não acontecer o reset.
GOTO R Desvia para o ponto R, mudando o PC.
RETFIE - Retorna de uma interrupção.
RETLW K Retorna de uma rotina, com k em W.
RETURN - Retorna de uma rotina, sem afetar o W.
SLEEP - Coloca o PIC em modo de sleep (dormindo) para economia de
energia.
66
Anotações:
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
_____________________________________________________________________________
67
CAPÍTULO 6
¾ O programador JDM
¾ O programa ICPROG transferência de dados
¾ As instruções detalhadas do PIC
68
6 – SIMULAÇÕES COM MICROPROCESSADOR PIC16F628
6.1 – Programador JDM – PIC
Para que possamos gravar e ler microcontroladores PIC, se faz necessário à utilização de
um programa com função de programador e leitor de PIC. Sugerimos a utilização do
programador JDM. Abaixo temos o hardware necessário para essa implementação e para a
utilização do programador, temos que instalar o programa ICPROG. Explicado em seguida.
Lista de Material
1 – Conector DB9 fêmea de 90° para circuito impresso.
1 – Soquete de 18 pinos torneados para circuito integrado.
2 – Transistores BC548
1 – Diodo zener 8V2 de ½ W.
1 – Diodo zener 5V1 de ½ W.
1 – Led de Ø3mm (qualquer cor).
4 – Diodos 1N4148
1 - Capacitor radial de 100µf / 40V.
1 – Capacitor radial 22 µf / 16V.
1 – Resistor de 5,6 KΩ.
1 – Resistor de 10 KΩ.
1 – Resistor de 1,5 KΩ.
1 – Cabo de comunicação serial.
J1 R12 R11
D13
6 1 16F628
2
7 3
8 4 Q2
9 RA2 RA1
5 RA3 RA0
RA4 OSC1
MCLR OSC2
VSS VDD
Q1 RB0 RB7
RB1 RB6
RB2 RB5
R10 RB3 RB4
D16
D11 8V2
C2 C3 D18 D17
+
D12
100uF 22uF LED11 5V1
D14
69
6.2 – O programa ICPROG de transferência de dados para PIC
INSTALAÇÃO DO ICPROG
Para instalar o Software, basta criar uma pasta no disco local do seu PC e guardar o
arquivo icprog.exe. Se o seu sistema Operacional for NT ou 2000 será também necessário
guardar o Driver na mesma pasta (icprog.sys). Todos os arquivos deveram ser colocados dentro
da mesma pasta no seu disco local.
Para abrir a aplicação, faça duplo clique no ícone do icprog. Em sistemas baseados em
NT, será necessário instalar o respectivo NT Driver (mais adiante será explicado como o
instalar).
Ao abrir a aplicação pela 1ª vez, será apresentada uma janela de configuração de
Hardware, esta janela pode ser mais tarde alterada conforme as necessidades, de inicio pode
fechar a janela, clique no botão 'OK' para começar a utilizar a aplicação.
70
Em Sistemas Operacionais NT e 2000 é necessário instalar um arquivo de Driver para
que o Software consiga comunicar com as portas de interface do PC (porta série e paralela), pois
o Sistema Operacional (Windows) não permite o acesso direto das aplicações ao Hardware do
PC.
Este Driver é instalado dentro do IC-Prog, bastando para isso abrir a aplicação e acessar o
menu :
Settings :
Options
Misc
Figura 17 - Options
Como citado acima é necessário ter instalado no computador o programa ICPROG. Para
simulação também é importante que você tenha instalado no computador o programa MPLAB.
Desenvolva o programa no editor preferido (Sugestão MPLAB 6.62) em seguida compile
o programa para que possa ser gerado *.HEX. O programa de extensão *.HEX devera ser
carregado através do compilador ICPROG e transferido para o microcontrolador 16f628.
A tela de abertura se encontra na figura 18, onde muitas vezes se faz necessário que seja
alterada a linguagem que esta sendo utilizada para manipulação do ICPROG, nesta
implementação é necessário entrar no item configuração, opções e linguagem. Utilizar
português. Já na tela abaixo vemos como carregar o programa de extensão HEX, onde já foi
compilado utilizando-se o MPLAB ou do MPASM.
71
Figura 18 – Tela de carregamento de arquivo no ICPROG
Após ter carregado o arquivo de extensão HEX deve ser transferido para o
microcontrolador PIC. Com o cabo já conectado clicar no item comando e em programar tudo,
em seguida o programa é transferido e verificado se não houve erro durante transferência.
selecione o tipo de
Programador antes de
utilizar e as definições de
programação.
selecione o IC a
programar
72
selecione o Buffer de
informação
Ajuste a configuração do
IC.
( tipo de oscilador,
fusíveis, etc. )
Transfira a programação
para o hardware ( IC ).
73
A lista abaixo, informa quais os Microcontroladores suportados pelo programador JDM.
IC-Prog
C. I. Tipo Fabricante ver: ver: ver: ver: Observações
1.05A 1.05 1.04C 1.04A
75
Vejamos os pinos do LCD na tabela abaixo:
76
6.4 – O Conjunto de instruções do microcontrolador PIC
77
ANDWF Operação lógica <E entre o registro W com o
registro f.
Sintaxe [label] ANDWF f,d
Operação (W) .AND. (f) – (destino)
Status Z
Codificação 0000 0101 dfff ffff
Descrição Realiza a operação de lógica <E (AND) entre
o conteúdo do registrador W e do registrador
f. Se <d é igual a zero o resultado é colocado
no registrador W. Se <d é igual a 1 o
resultado é armazenado no registro f.
Ciclos 1
78
BTFSC Teste bit f e pula se for zero
Sintaxe [label] BTFSC f, d
Operação Desvia se f<b for igual à zero.
Status Nenhum
Codificação 0001 10bb bfff ffff
Descrição Se o bit <b no registro <f for igual à zero,
pula a próxima instrução.
Ciclos 1 se não houver o desvio, 2 se ocorrer o
desvio.
79
CLRF Limpa o registro f
Sintaxe [label] CLRF f
Operação 0 – (f)
1–Z
Status Z
Codificação 0001 0001 1fff ffff
Descrição O conteúdo do registro <f é feito igual a zero
e o bit Z é feito igual a um.
Ciclos 1
80
COMF Complementa o registro f
Sintaxe [label] COMF f,d
Operação (naof) – destino
Status Z
Codificação 0001 1001 dfff ffff
Descrição O conteúdo do registro <f é complementado.
Se <d for igual a zero o resultado é colocado
no registro W. Se <d for igual a 1 o resultado
é colocado no registro <f.
Ciclos 1
DECF Decrementa f
Sintaxe [label] DECF f,d
Operação (f) – 1 – (destino)
Status Z
Codificação 0000 0011 dfff ffff
Descrição Decrementa o registro <f. Se <d for igual a
zero o resultado será colocado no registro W.
Se <d for igual a 1 o resultado será colocado
no registro <f.
Ciclos 1
81
GOTO Desvia para o endereço especificado
Sintaxe [label] GOTO k
Operação k – (PC) < 100
PCLATH <4 3 – (PC <12 11)
Status Nenhum
Codificação 0010 1kkk kkkk kkkk
Descrição Desvia o programa pra o endereço k. Os onze
bits k são carregados para o registro do PC
<100. Os bits superiores do PC são
carregados a partir do registro PCLATH.
Ciclos 2
INCF Incrementa f
Sintaxe [label] INCF f,d
Operação (f) + 1 – (destino)
Status Z
Codificação 0000 1010 dfff ffff
Descrição Incrementa o conteúdo do registro <f. Se <d
for igual a zero o resultado será colocado no
registro W. Se <d for igual a 1 o resultado
será colocado no registro <f.
Ciclos 1
83
MOVF Movimenta f
Sintaxe [label] MOVF f,d
Operação (f) – destino
Status Z
Codificação 0000 1000 dfff fffff
Descrição O conteúdo do registro f é colocado no
destino. Se d for igual a 0 o destino será o
registrador W. Se d for igual a 1 o destino
será o próprio registrador. Esta instrução pode
ser utilizada para verificarmos se o conteúdo
de um registrador é zero, pois o flag Z é
alterado.
Ciclos 1
84
RETFIE Retorno de uma interrupção.
Sintaxe [label] RETFIE
Operação TOS - (PC)
1 – GIE
Status Nenhum
Codificação 0000 0000 0000 1001
Descrição O topo do stack (TOS) é carregado no PC. Os
interrupts são habilitados de uma forma
global pelo flag GIOE. O apontador do stack
pointer é diminuído de um (POP).
Ciclos 2
85
RLF Desloca f para esquerda usando o carry.
Sintaxe [label] RLF f,d
Operação Veja a descrição
Status C
Codificação 0000 1101 dfff ffff
Descrição O conteúdo do registro <f é deslocado de um
bit para a esquerda, sendo que o bit 7 é
enviado para carry. O conteúdo do carry é
enviado para o bit 0. Se <d for igual a zero o
resultado é colocado no registrador W, se for
igual a 1 o resultado é colocado no registro
<f.
Ciclos 1
86
SLEEP Vai para o modo de repouso (stand by)
Sintaxe [label] SLEEP
Operação 00 – WDT
0 – pré-escalador do WDT
1 – TO barra
0 – PD barra
Status TO, PD barra
Codificação 0000 0000 0110 0011
Descrição O bit de power down, (PD) é feito igual a
zero. O bit de estouro de tempo (time-out) é
feito igual a 1. Os temporizadores do watch
dog timer e seu pré-escalador são zerados. O
processador assume o modo SLEEP, com o
oscilador parado. Para sair deste modo
somente com reset ou interrupção.
Ciclos 1
87
SUBWF Subtrai o registro <f do conteúdo do registro
W
Sintaxe [label] SUBWF f,d
Operação (f) – (W) –(dest)
Status C, DC, Z
Codificação 0000 0010 dfff ffff
Descrição Subtrai do registrador f o conteúdo do
registrador W. Se <d é igual a zero o
resultado é colocado no registro W. Se <d é
igual a 1 o resultado é armazenado no registro
f.
Ciclos 1
88
XORWF Ou exclusivo entre o registro W e f
Sintaxe [label] XORWF f,d
Operação (W) . XOR. (f) – (destino)
Status Z
Codificação 0011 0100 dfff ffff
Descrição Realiza a operação lógica OU EXCLUSIVO
entre o registro f e o registro W. Se ,d for
igual a 0 o resultado é colocado no registro
W. Se <d for igual a 1 o resultado é colocado
no registro f.
Ciclos 1
89
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * *
;* NOME DO PROJETO *
;* CLIENTE *
; TRAB00 DATA: 10/10/XX *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
; *-----------------------------------------------------------------------------------------------------------*
;* MODELO PARA PIC 16F628 OU 16F627 *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DEFINIÇÃO DE COMANDOS PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS
; PELO SISTEMA
90
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ENTRADAS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA
; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DOS ESTADOS (0 E 1)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* SAÍDAS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA
; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DOS ESTADOS (0 E 1)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VETOR DE RESET *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INÍCIO DA INTERRUPÇÃO *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ENDEREÇO DE DESVIO DAS INTERRUPÇÕES. A PRIMEIRA TAREFA É SALVAR
;OS VALORES DE "W" E "STATUS" PARA RECUPERAÇÃO FUTURA
91
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE INTERRUPÇÃO *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; AQUI SERÁ ESCRITA AS ROTINAS DE RECONHECIMENTO E TRATAMENTO DAS
; INTERRUPÇÕES
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE SAÍDA DA INTERRUPÇÃO *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; OS VALORES DE "W" E "STATUS" DEVEM SER RECUPERADOS ANTES DE
; RETORNAR DA INTERRUPÇÃO
SAI_INT
SWAPF STATUS_TEMP,W
MOVWF STATUS ;MOVE STATUS_TEMP PARA STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W ;MOVE W_TEMP PARA W
RETFIE
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINAS E SUBROTINAS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; CADA ROTINA OU SUBROTINA DEVE POSSUIR A DESCRIÇÃO DE ;FUNCIONAMENTO E
UM NOME COERENTE ÀS SUAS FUNÇÕES.
SUBROTINA1
;CORPO DA ROTINA
RETURN
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111' ;DEFINE O MODO DE OPERAÇÃO
MOVWF CMCON ;DO COMPARADOR ANALÓGICO
92
MOVWF TRISA ;DEFINE ENTRADAS E SAÍDAS DO PORTA
MOVLW B'00000000'
MOVWF TRISB ;DEFINE ENTRADAS E SAÍDAS DO PORTB
MOVLW B'10000100'
MOVWF OPTION_REG ;DEFINE OPÇÕES DE OPERAÇÃO
MOVLW B'00000000'
MOVWF INTCON ;DEFINE OPÇÕES DE INTERRUPÇÕES
BANK0 ;RETORNA PARA O BANCO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
;CORPO DA ROTINA PRINCIPAL
GOTO MAIN
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END
93
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * *
;* NOME DO PROJETO *
;* CLIENTE *
; TRAB01 DATA: 10/10/XX *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
; *-----------------------------------------------------------------------------------------------------------*
;* SISTEMA MUITO SIMPLES PARA REPRESENTAR UM LED ACESO *
;* *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF &
_MCLRE_ON & _XT_OSC
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS
; PELO SISTEMA
CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE
;USUÁRIO
W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA
STATUS_TEMP ;INTERRUPÇÕES
TEMPO01 ;ESTAS VARIÁVEIS CONTAM O TEMPO DE PISCAGEM
TEMPO02 ;DOS LEDS
ENDC ;FIM DO BLOCO DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ****
94
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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 *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
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
95
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ROTINA DE DELAY *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
DELAY
MOVLW .1000
MOVWF TEMPO02
DL1
MOVLW .200
MOVWF TEMPO01
DL2
NOP
NOP
DECFSZ TEMPO01,F
GOTO DL2
DECFSZ TEMPO02,F
GOTO DL1
RETURN
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK0 ;ALTERA PARA O BANCO 0
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
BCF LED
BCF LED1
CALL DELAY
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END ;OBRIGATÓRIO
97
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* BOTÃO E LED - EX1 *
;* KIT PIC 16F628 *
;* TRAB02 DATA: 10/10/01 *
;* * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
;*-------------------------------- ------------------------------------------------------------------------*
;* SISTEMA MUITO SIMPLES PARA REPRESENTAR O ESTADO DE *
;* UM BOTÃO ATRAVÉS DE UM LED. *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS
; PELO SISTEMA
98
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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 LED PORTB,0 ;PORTA DO LED
; 0 -> APAGADO
; 1 -> ACESO
#DEFINE LED1 PORTB,1 ;PORTA DO LED1
; 0 -> APAGADO
; 1 -> ACESO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VETOR DE RESET *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO
GOTO INICIO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INÍCIO DA INTERRUPÇÃO *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
99
; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR
; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111' ;DEFINE O MODO DE OPERAÇÃO
MOVWF CMCON ;DO COMPARADOR ANALÓGICO
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA
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
BANK0 ;RETORNA PARA O BANCO 0
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ****
100
MAIN
BTFSC BOTAO ;O BOTÃO ESTÁ PRESSIONADO?
GOTO BOTAO_LIB ;NÃO, ENTÃO TRATA BOTÃO LIBERADO
GOTO BOTAO_PRES ;SIM, ENTÃO TRATA BOTÃO PRESSIONADO
BOTAO_LIB
BCF LED ;APAGA O LED
BCF LED1
GOTO MAIN ;RETORNA AO LOOP PRINCIPAL
BOTAO_PRES
BSF LED ;ACENDE O LED
BSF LED1
GOTO MAIN ;RETORNA AO LOOP PRINCIPAL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END ;OBRIGATÓRIO
101
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONTADOR SIMPLIFICADO - EX2 *
;* KIT PIC 16F628 *
;* TRAB03 DATA: 30/10/01 *
;* * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
;*---------------- -------------------------------------------------------------------------*
;* SISTEMA MUITO SIMPLES PARA INCREMENTAR ATÉ UM DETERMINADO *
;* VALOR (MAX) DE DEPOIS DECREMENTAR ATÉ OUTRO (MIN). *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF &
_MCLRE_ON & _XT_OSC
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS
; PELO SISTEMA
102
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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 *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO
GOTO INICIO
103
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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
BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000100'
MOVWF TRISA ;DEFINE RA2 COMO ENTRADA E DEMAIS COMO
SAÍDAS
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA
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
BANK0 ;RETORNA PARA O BANCO 0
MOVLW B'00000111' ;DEFINE O MODO DE OPERAÇÃO
MOVWF CMCON ;DO COMPARADOR ANALÓGICO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CLRF PORTA ;LIMPA O PORTA
CLRF PORTB ;LIMPA O PORTB
MOVLW MIN
MOVWF CONTADOR ;INICIA CONTADOR = V_INICIAL
104
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
MOVLW T_FILTRO
MOVWF FILTRO ;INICIALIZA FILTRO = T_FILTRO
CHECA_BT
BTFSC BOTAO ;O BOTÃO ESTÁ PRESSIONADO?
GOTO MAIN ;NÃO, ENTÃO CONTINUA ESPERANDO SIM
DECFSZ FILTRO,F ;DECREMENTA O FILTRO DO BOTÃO
GOTO CHECA_BT ;NÃO, CONTINUA ESPERANDO SIM
TRATA_BT
BTFSS SENTIDO ;DEVE SOMAR (SENTIDO=0)?
GOTO SOMA ;SIM , ;NÃO
SUBTRAI
DECF CONTADOR,F ;DECREMENTA O CONTADOR
MOVLW MIN ;MOVE O VALOR MÍNIMO PARA W
SUBWF CONTADOR,W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR
BTFSC STATUS,C ;TESTA CARRY. RESULTADO NEGATIVO?
GOTO ATUALIZA ;NÃO, ENTÃO CONTA >= MIN
;SIM, ENTÃO CONTA < MIN
INCF CONTADOR,F ;INCREMENTA CONTADOR NOVAMENTE
;POIS PASSOU DO LIMITE
BCF SENTIDO ;MUDA SENTIDO PARA SOMA
GOTO MAIN ;VOLTA AO LOOP PRINCIPAL
SOMA
INCF CONTADOR,F ;INCREMENTA O CONTADOR
105
ATUALIZA
MOVF CONTADOR,W ;COLOCA CONTADOR EM W
MOVWF PORTB ;ATUALIZA O PORTB PARA
;VISUALIZARMOS O VALOR DE CONTADOR
BTFSS BOTAO ;O BOTÃO CONTINUA PRESSIONADO?
GOTO $-1 ;SIM, ENTÃO ESPERA LIBERAÇÃO PARA
;QUE O CONTADOR NÃO DISPARE
GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END ;OBRIGATÓRIO
106
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PISCA-PISCA - EX3 *
;* KIT PIC 16F628 *
;* TRAB04 DATA: 30/10/XX *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
;*--------------------------- -----------------------------------------------------*
;* PISCA-PISCA VARIÁVEL PARA DEMONSTRAR A IMPLEMENTAÇÃO DE *
;* DELAYS E A INVERSÃO DE PORTAS. *
;* * * * * * * * * * * * * * * * ** * * * * * ** * * * ** * * * * * ** * * * ** * * * * * ** ** * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS
; PELO SISTEMA
107
CONTADOR ;BASE DE TEMPO PARA A PISCADA
FILTRO ;FILTRAGEM PARA O BOTÃO
TEMPO1 ;REGISTRADORES AUXILIARES DE TEMPO
TEMPO2
TEMPO3
ENDC ;FIM DO BLOCO DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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)
108
#DEFINE BT2 PORTA,2 ;BOTÃO 2 - DECREMENTA
; 0 -> PRESSIONADO
; 1 -> LIBERADO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE DELAY *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA AGUARDA TANTOS MILISEGUNDOS QUANTO O VALOR PASSADO
; POR W. POR EXEMPLO, SE W = .200, ELA AGUARDARÁ 200 MILISEGUNDOS.
; O DELAY PRINCIPAL DURA 1ms, POIS POSSUI 5 INSTRUÇÕES (5us) E É
; RODADO 200 VEZES (TEMPO1). PORTANTO 200 * 5us = 1ms.
; O DELAY PRINCIPAL É RODADO TANTAS VEZES QUANTO FOR O VALOR DE
; TEMPO2, O QUAL É INICIADO COM O VALOR PASSADO EM W.
109
DELAY
MOVWF TEMPO2 ;INICIA TEMPO 2 COM VALOR EM W
DL1
MOVLW .200
MOVWF TEMPO1
DL2 ;ESTE DELAY DURA 1ms (5*200)
NOP
NOP
DECFSZ TEMPO1,F ;DECREMENTA TEMPO1. ACABOU?
GOTO DL2 ;NÃO, CONTINUA AGUARDANDO SIM
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111'
MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO
;COMPARADOR ANALÓGICO
BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000110'
MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS
SAÍDAS
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA
MOVLW B'10000000'
MOVWF OPTION_REG ;PRESCALER 1:2 TMR0
;PULL-UPS DESABILITADOS
;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW B'00000000'
MOVWF INTCON ;TODAS AS INTERRUPÇÕES DESLIGADAS
BANK0 ;RETORNA PARA O BANCO 0
110
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
MOVLW MULTIPLO
MOVWF TEMPO3 ;INICIA COMTADOR DE MULTIPLICAÇÃO,
;POIS OS TEMPOS GERADOS POR DELAY
;SÃO MUITO PEQUENOS, GERANDO FREQ.
;MUITO ALTAS PARA A VISUALIZAÇÃO.
MAIN1
MOVF CONTADOR,W ;COLOCA CONTADOR EM W
;PARA CHAMAR A ROTINA DE DELAY
CALL DELAY ;CHAMA ROTINA DE DELAY
BTFSS BT1 ;BOTÃO 1 PRESSIONADO?
GOTO INCREMENTA ;SIM, DEVE INCREMENTAR NÃO
BTFSS BT2 ;BOTÃO 2 PRESSIONADO?
GOTO DECREMENTA ;SIM, DEVE DECREMENTAR NÃO
111
DECREMENTA
MOVLW STEP
SUBWF CONTADOR,F ;DECREMENTA O CONTADOR EM STEP
MOVLW MIN ;MOVE O VALOR MÍNIMO PARA W
SUBWF CONTADOR,W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR
BTFSC STATUS,C ;TESTA CARRY. RESULTADO NEGATIVO?
GOTO MAIN ;NÃO, ENTÃO CONTA >= MIN
;SIM, ENTÃO CONTA < MIN
MOVLW MIN
MOVWF CONTADOR ;ACERTA CONTADOR NO MÍNIMO, POIS
;PASSOU DO VALOR
BTFSS BT2 ;BOTÃO 2 CONTINUA PRESSIONADO?
GOTO $-1 ;SIM, AGUARDA LIBERAÇÃO SE NÃO
GOTO MAIN ;VOLTA AO LOOP PRINCIPAL
INCREMENTA
MOVLW STEP
ADDWF CONTADOR,F ;INCREMENTA O CONTADOR EM STEP
MOVLW MAX ;MOVE O VALOR MÁXIMO PARA W
SUBWF CONTADOR,W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR
BTFSS STATUS,C ;TESTA CARRY. RESULTADO NEGATIVO?
GOTO MAIN ;SIM, ENTÃO CONTA < MAX
;NÃO, ENTÃO CONTA >= MAX
MOVLW MAX
MOVWF CONTADOR ;ACERTA CONTADOR NO MÁXIMO, POIS
;PASSOU DO VALOR
BTFSS BT1 ;BOTÃO 1 CONTINUA PRESSIONADO?
GOTO $-1 ;SIM, AGUARDA LIBERAÇÃO SE NÃO
GOTO MAIN ;VOLTA AO LOOP PRINCIPAL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END ;OBRIGATÓRIO
112
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONTADOR MELHORADO - EX4 *
;* KIT PIC 16F628 *
;* TRAB05 DATA: 30/10/XX *
;* * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
;*-------------- -------------------------------------------------------------------*
;* CONTADOR QUE UTILIZA DOIS BOTÕES PARA INCREMENTAR E DECRE- *
;* MENTAR O VALOR CONTROLADO PELA VARIÁVEL "CONTADOR". ESTA *
;* VARIÁVEL ESTÁ LIMITADA PELAS CONSTANTES "MIN" E "MAX". *
;* O VALOR DO CONTADOR É MOSTRADO NO DISPLAY. *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS
; PELO SISTEMA
113
FLAGS ;ARMAZENA OS FLAGS DE CONTROLE
FILTRO1 ;FILTRAGEM PARA O BOTÃO 1
FILTRO2 ;FILTRAGEM PARA O BOTÃO 2
ENDC ;FIM DO BLOCO DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* SAÍDAS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
114
; 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
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE CONVERSÃO BINÁRIO -> DISPLAY *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA IRÁ RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER
; MOSTRADO NO DISPLAY PARA CADA VALOR DE CONTADOR. O RETORNO JÁ ESTÁ
; FORMATADO PARA AS CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTB.
CONVERTE
MOVF CONTADOR,W ;COLOCA CONTADOR EM W
ANDLW B'00001111' ;MASCARA VALOR DE CONTADOR
;CONSIDERAR SOMENTE ATÉ 15
ADDWF PCL,F
; B'GFABCDE.' ; POSIÇÃO CORRETA DOS SEGUIMENTOS
RETLW B'01111110' ; 00 - RETORNA SÍMBOLO CORRETO 0
RETLW B'00011000' ; 01 - RETORNA SÍMBOLO CORRETO 1
RETLW B'10110110' ; 02 - RETORNA SÍMBOLO CORRETO 2
RETLW B'10111100' ; 03 - RETORNA SÍMBOLO CORRETO 3
RETLW B'11011000' ; 04 - RETORNA SÍMBOLO CORRETO 4
RETLW B'11101100' ; 05 - RETORNA SÍMBOLO CORRETO 5
115
RETLW B'11101110' ;06 - RETORNA SÍMBOLO CORRETO 6
RETLW B'00111000' ; 07 - RETORNA SÍMBOLO CORRETO 7
RETLW B'11111110' ; 08 - RETORNA SÍMBOLO CORRETO 8
RETLW B'11111100' ; 09 - RETORNA SÍMBOLO CORRETO 9
RETLW B'11111010' ; 10 - RETORNA SÍMBOLO CORRETO A
RETLW B'11001110' ; 11 - RETORNA SÍMBOLO CORRETO b
RETLW B'01100110' ; 12 - RETORNA SÍMBOLO CORRETO C
RETLW B'10011110' ; 13 - RETORNA SÍMBOLO CORRETO d
RETLW B'11100110' ; 14 - RETORNA SÍMBOLO CORRETO E
RETLW B'11100010' ; 15 - RETORNA SÍMBOLO CORRETO F
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111'
MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO
;COMPARADOR ANALÓGICO
BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000110'
MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA
;E DEMAIS COMO SAÍDAS
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA
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 INTERRUPÇÕES DESLIGADAS
BANK0 ;RETORNA PARA O BANCO 0
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ****
116
CLRF PORTA ;LIMPA O PORTA
CLRF PORTB ;LIMPA O PORTB
CLRF FLAGS ;LIMPA TODOS OS FLAGS
MOVLW MIN
MOVWF CONTADOR ;INICIA CONTADOR = MIN
GOTO ATUALIZA ;ATUALIZA O DISPLAY INICIALMENTE
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
MOVLW T_FILTRO
MOVWF FILTRO1 ;INICIALIZA FILTRO1 = T_FILTRO
MOVWF FILTRO2 ;INICIALIZA FILTRO2 = T_FILTRO
CHECA_BT1
BTFSC BOTAO1 ;O BOTÃO 1 ESTÁ PRESSIONADO?
GOTO BT1_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO SE SIM
DECFSZ FILTRO1,F ;DECREMENTA FILTRO DO BOTÃO TERMINOU?
GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO SE SIM
BTFSS ST_BT1 ;BOTÃO JÁ ESTAVA PRESSIONADO?
GOTO DEC ;NÃO, EXECUTA AÇÃO DO BOTÃO
GOTO CHECA_BT2 ;SIM, CHECA BOTÃO 2
BT1_LIB
BCF ST_BT1 ;MARCA BOTÃO 1 COMO LIBERADO
CHECA_BT2
BTFSC BOTAO2 ;O BOTÃO 2 ESTÁ PRESSIONADO?
GOTO BT2_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO SE SIM
DECFSZ FILTRO2,F ;DECREMENTA O FILTRO BOTÃO TERMINOU?
ATUALIZA
CALL CONVERTE ;CONVERTE CONTADOR NO NÚMERO
MOVWF PORTB ;ATUALIZA O PORTB PARA
GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END ;OBRIGATÓRIO
118
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* TIMER DE SEGUNDOS - EX5 *
;* KIT PIC 16F628 *
;* TRAB06 DATA: 30/10/XX *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
;*------------------------------------------- --------------------------------------*
;* TIMER DECRESCENTE EM SEGUNDOS. O VALOR INICIAL É DETERMINADO *
;* PELA CONSTANTE V_INICIO E PODE ESTAR ENTRE 1 E 9 SEGUNDOS.
;* O BOTÃO 1 DISPARA O TIMER, MOSTRANDO O TEMPO RESTANTE NO *
;* DISPLAY. O BOTÃO 2 PARALIZA O TIMER. O LED É UTILIZADO PARA *
;* INDICAR O ESTADO ATUAL DO TIMER: ACESO=RODANDO E ;APAGADO=PARADO *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS
; PELO SISTEMA
119
TEMPO ;ARMAZENA O VALOR DO TEMPO
FLAGS ;ARMAZENA OS FLAGS DE CONTROLE
TEMP1 ;REGISTRADORES AUXILIARES
TEMP2
FILTRO1 ;FILTROS DOS BOTÕES
FILTRO2
ENDC ;FIM DO BLOCO DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
#DEFINE F_FIM FLAGS,0 ;FLAG DE FIM DE TEMPO
#DEFINE ST_BT1 FLAGS,1 ;STATUS DO BOTÃO 1
#DEFINE ST_BT2 FLAGS,2 ;STATUS DO BOTÃO 2
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
V_INICIO EQU .15 ;VALOR INICIAL DO TIMER (1 A 15 SEG.)
T_FILTRO EQU .255 ;VALOR DO FILTRO DOS BOTÕES
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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)
120
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INÍCIO DA INTERRUPÇÃO *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; UTILIZAREMOS SOMENTE A INTERRUÇÃO DE TMR0, MAS EFETUAREMOS O TESTE
; PARA TERMOS CERTEZA DE QUE NENHUM PROBLEMA ACONTECEU. É NECESSÁRIO
; SALVAR E RECUPERAR OS VALOR DE W E STATUS.
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* TRATAMENTO DA INTERRUPÇÃO DE TMR0 *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA IRÁ CONTAR O TEMPO, E QUANDO PASSAR 1 SEGUNDO, A VARI-
; ÁVEL "TEMPO" SERÁ DECREMENTADA.
; 1 SEGUNDO = 64us (PRESCALER) X 125 (TMR0) X 125 (TEMP1)
121
BCF INTCON,T0IF ;LIMPA FLAG DA INT.
MOVLW .256-.125
MOVWF TMR0 ;REINICIA TMR0
DECFSZ TEMP1,F ;DECREM. CONTADOR AUXILIAR SE FIM?
GOTO SAI_INT ;NÃO, SAI SEM AÇÃO SE SIM
MOVLW .125
MOVWF TEMP1 ;REINICIALIZA TEMPO AUXILIAR
BTFSC F_FIM ;JÁ CHEGOU AO FIM?
GOTO SAI_INT ;SIM, ENTÃO NÃO DECREMENTA O TEMPO
;NÃO
DECFSZ TEMPO,F ;DECREMENTA TEMPO. ACABOU?
GOTO SAI_INT ;NÃO, SAI DA INTERRUPÇãO SE SIM
BSF F_FIM ;MARCA FIM DO TEMPO
GOTO SAI_INT ;SAI DA INTERRUPÇÃO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DA INTERRUPÇÃO *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SAI_INT
SWAPF STATUS_TEMP,W
MOVWF STATUS ;RECUPERA STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W ;RECUPERA W
RETFIE ;RETORNA DA INTERRUPÇÃO
;* * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * *
;* ROTINA DE CONVERSÃO BINÁRIO -> DISPLAY *
;* * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA IRÁ RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER
; MOSTRADO NO DISPLAY PARA CADA VALOR DE CONTADOR. O RETORNO JÁ ESTÁ
; FORMATADO PARA AS CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTB.
CONVERTE
MOVF TEMPO,W ;COLOCA CONTADOR EM W
ANDLW B'00001111' ;MASCARA VALOR DE CONTADOR
;CONSIDERAR SOMENTE ATÉ 15
ADDWF PCL,F
122
; B'GFABCDE.' ; POSIÇÃO CORRETA DOS SEGUIMENTOS
RETLW B'01111110' ; 00 - RETORNA SÍMBOLO CORRETO 0
RETLW B'00011000' ; 01 - RETORNA SÍMBOLO CORRETO 1
RETLW B'10110110' ; 02 - RETORNA SÍMBOLO CORRETO 2
RETLW B'10111100' ; 03 - RETORNA SÍMBOLO CORRETO 3
RETLW B'11011000' ; 04 - RETORNA SÍMBOLO CORRETO 4
RETLW B'11101100' ; 05 - RETORNA SÍMBOLO CORRETO 5
RETLW B'11101110' ; 06 - RETORNA SÍMBOLO CORRETO 6
RETLW B'00111000' ; 07 - RETORNA SÍMBOLO CORRETO 7
RETLW B'11111110' ; 08 - RETORNA SÍMBOLO CORRETO 8
RETLW B'11111100' ; 09 - RETORNA SÍMBOLO CORRETO 9
RETLW B'11111010' ; 10 - RETORNA SÍMBOLO CORRETO A
RETLW B'11001110' ; 11 - RETORNA SÍMBOLO CORRETO b
RETLW B'01100110' ; 12 - RETORNA SÍMBOLO CORRETO C
RETLW B'10011110' ; 13 - RETORNA SÍMBOLO CORRETO d
RETLW B'11100110' ; 14 - RETORNA SÍMBOLO CORRETO E
RETLW B'11100010' ; 15 - RETORNA SÍMBOLO CORRETO F
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE ATUALIZAÇÃO DO DISPLAY *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA CONVERTE O VALOR DE TEMPO ATRAVÉS DA ROTINA CONVERTE
; E ATUALIZA O PORTB PARA ACENDER O DISPLAY CORRETAMENTE
ATUALIZA
CALL CONVERTE ;CONVERTE CONTADOR NO NÚMERO DO
;DISPLAY
MOVWF PORTB ;ATUALIZA O PORTB PARA
;VISUALIZARMOS O VALOR DE CONTADOR
;NO DISPLAY
RETURN ;NÃO, RETORNA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE DESLIGAR O TIMER *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; EXECUTA AS AÇÕES NECESSÁRIAS PARA DESLIGAR O TIMER
DESL_TIMER
123
BCF INTCON,GIE ;DESLIGA CHAVE GERAL DE INT.
BCF LED ;APAGA O LED
RETURN ;RETORNA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE LIGAR O TIMER *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA EXECUTA AS AÇÕES NECESSÁRIAS PARA LIGAR O TIMER
LIGA_TIMER
BTFSC INTCON,GIE ;TIMER JÁ ESTA LIGADO?
RETURN ;SIM, RETORNA DIRETO SE NÃO
BCF INTCON,T0IF ;LIMPA FLAG DE INT. DE TMR0
MOVLW .256-.125
MOVWF TMR0 ;INICIA TMR0 CORRETAMENTE
MOVLW .125
MOVWF TEMP1 ;INICIA TEMP1 CORRETAMENTE
BSF INTCON,GIE ;LIGA CHAVE GERAL DE INTERRUPÇÕES
BSF LED ;ACENDE O LED
RETURN ;RETORNA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111'
MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO
;DO COMPARADOR ANALÓGICO
BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000110'
MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS
;COMO SAÍDAS
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA
MOVLW B'10000101'
124
MOVWF OPTION_REG ;PRESCALER 1:64 NO TMR0
;PULL-UPS DESABILITADOS
;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW B'00100000'
MOVWF INTCON ;HABILITADA SOMENTE INTERRUPÇÃO TMR0
;CHAVE GERAL INTERRUÇÕES DESLIGADAS
BANK0 ;RETORNA PARA O BANCO 0
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
BTFSC F_FIM ;CHEGOU AO FIM?
CALL DESL_TIMER ;SIM, ENTÃO DESLIGA O TIMER SE NÃO
CALL ATUALIZA ;ATUALIZA O DISPLAY
MOVLW T_FILTRO
MOVWF FILTRO1 ;INICIALIZA FILTRO1 = T_FILTRO
MOVWF FILTRO2 ;INICIALIZA FILTRO2 = T_FILTRO
CHECA_BT1
BTFSC BOTAO1 ;O BOTÃO 1 ESTÁ PRESSIONADO?
GOTO BT1_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO
;SIM
BT1_LIB
BCF ST_BT1 ;MARCA BOTÃO 1 COMO LIBERADO
CHECA_BT2
BTFSC BOTAO2 ;O BOTÃO 2 ESTÁ PRESSIONADO?
GOTO BT2_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO SIM
DECFSZ FILTRO2,F ;DECREMENTA O FILTRO DO BOTÃO
;TERMINOU?
GOTO CHECA_BT2 ;NÃO, CONTINUA ESPERANDO SE SIM
BTFSS ST_BT2 ;BOTÃO JÁ ESTAVA PRESSIONADO?
GOTO ACAO_BT2 ;NÃO, EXECUTA AÇÃO DO BOTÃO
GOTO MAIN ;SIM, VOLTA AO LOOPING
BT2_LIB
BCF ST_BT2 ;MARCA BOTÃO 2 COMO LIBERADO
GOTO MAIN ;RETORNA AO LOOPING
ACAO_BT1 ;AÇÃO PARA O BOTÃO 1
BSF ST_BT1 ;MARCA BOTÃO 1 COMO JÁ PRESSIONADO
CALL LIGA_TIMER ;LIGA O TIMER
GOTO MAIN
ACAO_BT2 ;AÇÃO PARA O BOTÃO 2
BSF ST_BT2 ;MARCA BOTÃO 2 COMO JÁ PRESSIONADO
CALL DESL_TIMER ;DESLIGA O TIMER
GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END ;OBRIGATÓRIO
126
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONTADOR FINAL - EX6 *
;* KIT PIC 16F628 *
;* TRAB07 30/10/01 *
;* * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
;*-----------------------------------------------------------------*
;* CONTADOR QUE UTILIZA DOIS BOTÕES PARA INCREMENTAR E DECRE- *
;* MENTAR O VALOR CONTROLADO PELA VARIÁVEL "CONTADOR". ESTA *
;* VARIÁVEL ESTÁ LIMITADA PELAS CONSTANTES "MIN" E "MAX". *
;* O VALOR DO CONTADOR É MOSTRADO NO DISPLAY E ARMAZENADO NA *
;* EEPROM PARA NÃO SER PERDIDO MESMO NO CASO DE RESET. *
;* * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS
; PELO SISTEMA
127
CONTADOR ;ARMAZENA O VALOR DA CONTAGEM
FLAGS ;ARMAZENA OS FLAGS DE CONTROLE
FILTRO1 ;FILTRAGEM PARA O BOTÃO 1
FILTRO2 ;FILTRAGEM PARA O BOTÃO 2
ENDC ;FIM DO BLOCO DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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 BOTAO1 PORTA,1 ;PORTA DO BOTÃO
; 0 -> PRESSIONADO
; 1 -> LIBERADO
128
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DA EEPROM *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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
ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO
RETFIE ;RETORNA DA INTERRUPÇÃO
;* * * * * * * * * * * ** * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE CONVERSÃO BINÁRIO -> DISPLAY *
;* * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA IRÁ RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER
; MOSTRADO NO DISPLAY PARA CADA VALOR DE CONTADOR. O RETORNO JÁ ESTÁ
; FORMATADO PARA AS CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTB.
129
CONVERTE
MOVF CONTADOR,W ;COLOCA CONTADOR EM W
ANDLW B'00001111' ;MASCARA VALOR DE CONTADOR
;CONSIDERAR SOMENTE ATÉ 15
ADDWF PCL,F
; B'GFABCDE.' ; POSIÇÃO CORRETA DOS SEGUIMENTOS
RETLW B'01111110' ; 00 - RETORNA SÍMBOLO CORRETO 0
RETLW B'00011000' ; 01 - RETORNA SÍMBOLO CORRETO 1
RETLW B'10110110' ; 02 - RETORNA SÍMBOLO CORRETO 2
RETLW B'10111100' ; 03 - RETORNA SÍMBOLO CORRETO 3
RETLW B'11011000' ; 04 - RETORNA SÍMBOLO CORRETO 4
RETLW B'11101100' ; 05 - RETORNA SÍMBOLO CORRETO 5
RETLW B'11101110' ; 06 - RETORNA SÍMBOLO CORRETO 6
RETLW B'00111000' ; 07 - RETORNA SÍMBOLO CORRETO 7
RETLW B'11111110' ; 08 - RETORNA SÍMBOLO CORRETO 8
RETLW B'11111100' ; 09 - RETORNA SÍMBOLO CORRETO 9
RETLW B'11111010' ; 10 - RETORNA SÍMBOLO CORRETO A
RETLW B'11001110' ; 11 - RETORNA SÍMBOLO CORRETO b
RETLW B'01100110' ; 12 - RETORNA SÍMBOLO CORRETO C
RETLW B'10011110' ; 13 - RETORNA SÍMBOLO CORRETO d
RETLW B'11100110' ; 14 - RETORNA SÍMBOLO CORRETO E
RETLW B'11100010' ; 15 - RETORNA SÍMBOLO CORRETO F
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE LEITURA NA E2PROM *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA LÊ O BYTE DO ENDEREÇO ACERTADO POR EEADR E COLOCA
; O VALOR EM W.
LE_E2PROM
BANK1 ;BANCO 1
BSF EECON1,RD ;PREPARA LEITURA
MOVF EEDATA,W ;COLOCA DADO EM W
BANK0
RETURN ;RETORNA
130
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE ESCRITA NA E2PROM *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA ESCREVE O DADO PASSSADO EM W NO ENDEREÇO ACERTADO
; ANTERIORMENTE EM EEADR
ESCR_E2PROM
BANK1 ;BANCO 1
MOVWF EEDATA ;ACERTA DADO PASSADO EM W
BCF INTCON,GIE ;DESABILITA INTERRUPÇÕES
BSF EECON1,WREN ;HABILITA ESCRITA
MOVLW 0X55 ;INICIALIZAÇÃO DA ESCRITA
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR ;INICIA ESCRITA
BCF EECON1,WREN
BTFSC EECON1,WR ;ACABOU ESCRITA?
GOTO $-1 ;NÃO, AGUARDA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE LEITURA DO VALOR DO CONTADOR *
;* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA LÊ O VALOR DA MEMÓRIA E COLOCA O RESULTADO NA
; VARIÁVEL "CONTADOR".
LE_CONTA
MOVLW POS_MEM
BANK1
MOVWF EEADR ;ACERTA O ENDEREÇO PARA LEITURA
CALL LE_E2PROM ;EFETUA A LEITURA DA EEPROM
MOVWF CONTADOR ;ATUALIZA O CONTADOR
RETURN ;RETORNA
131
;* * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE ESCRITA DO VALOR DO CONTADOR *
;* * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA ESCREVE O VALOR ATUAL DE CONTADOR NA MEMÓRIA EEPROM
ESCR_CONTA
MOVLW POS_MEM
BANK1
MOVWF EEADR ;ACERTA O ENDEREÇO PARA LEITURA
BANK0
MOVF CONTADOR,W ;COLOCA CONTADOR EM W
CALL ESCR_E2PROM ;EFETUA A ESCRITA EEPROM
RETURN ;RETORNA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000110'
MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS
;COMO SAÍDAS
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA
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
BANK0 ;RETORNA PARA O BANCO 0
MOVLW B'00000111'
MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO
;DO COMPARADOR ANALÓGICO
132
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
MOVLW T_FILTRO
CHECA_BT1
BTFSC BOTAO1 ;O BOTÃO 1 ESTÁ PRESSIONADO?
GOTO BT1_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO
;SIM
DECFSZ FILTRO1,F ;DECREMENTA O FILTRO DO BOTÃO
;TERMINOU?
GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO
;SIM
BTFSS ST_BT1 ;BOTÃO JÁ ESTAVA PRESSIONADO?
GOTO DEC ;NÃO, EXECUTA AÇÃO DO BOTÃO
GOTO CHECA_BT2 ;SIM, CHECA BOTÃO 2
BT1_LIB
BCF ST_BT1 ;MARCA BOTÃO 1 COMO LIBERADO
CHECA_BT2
BTFSC BOTAO2 ;O BOTÃO 2 ESTÁ PRESSIONADO?
GOTO BT2_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO
;SIM
133
DECFSZ FILTRO2,F ;DECREMENTA O FILTRO DO BOTÃO
;TERMINOU?
GOTO CHECA_BT2 ;NÃO, CONTINUA ESPERANDO
;SIM
BTFSS ST_BT2 ;BOTÃO JÁ ESTAVA PRESSIONADO?
GOTO INC ;NÃO, EXECUTA AÇÃO DO BOTÃO
GOTO MAIN ;SIM, VOLTA AO LOOPING
BT2_LIB
BCF ST_BT2 ;MARCA BOTÃO 2 COMO LIBERADO
GOTO MAIN ;RETORNA AO LOOPING
DEC ;AÇÃO DE DECREMENTAR
BSF ST_BT1 ;MARCA BOTÃO 1 COMO JÁ PRESSIONADO
MOVF CONTADOR,W ;COLOCA CONTADOR EM W
XORLW MIN ;APLICA XOR ENTRE CONTADOR E MIN
;PARA TESTAR IGUALDADE. SE FOREM
;IGUAIS, O RESULTADO SERÁ ZERO
BTFSC STATUS,Z ;RESULTOU EM ZERO?
GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT.
;NÃO
DECF CONTADOR,F ;DECREMENTA O CONTADOR
CALL ESCR_CONTA ;ATUALIZA O VALOR DE CONTADOR NA
;EEPROM
GOTO ATUALIZA ;ATUALIZA O DISPLAY
INC ;AÇÃO DE INCREMENTAR
BSF ST_BT2 ;MARCA BOTÃO 2 COMO JÁ PRESSIONADO
MOVF CONTADOR,W ;COLOCA CONTADOR EM W
XORLW MAX ;APLICA XOR ENTRE CONTADOR E MAX
;PARA TESTAR IGUALDADE. SE FOREM
;IGUAIS, O RESULTADO SERÁ ZERO
BTFSC STATUS,Z ;RESULTOU EM ZERO?
GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT.
;NÃO
INCF CONTADOR,F ;INCREMENTA O CONTADOR
CALL ESCR_CONTA ;ATUALIZA O VALOR DE CONTADOR NA
;EEPROM
134
ATUALIZA ;ATUALIZAÇÃO DO DISPLAY
CALL CONVERTE ;CONVERTE CONTADOR NO NÚMERO DO
;DISPLAY
MOVWF PORTB ;ATUALIZA O PORTB PARA
;VISUALIZARMOS O VALOR DE CONTADOR
;NO DISPLAY
GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END ;OBRIGATÓRIO
135
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* DIMMER *
;* KIT PIC 16F628 *
;* DATA: 11/06/XX *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
;*-----------------------------------------------------------------*
;* CONTADOR QUE UTILIZA DOIS BOTÕES PARA INCREMENTAR E DECRE- *
;* MENTAR O VALOR CONTROLADO PELA VARIÁVEL "CONTADOR". ESTA *
;* VARIÁVEL ESTÁ LIMITADA PELAS CONSTANTES "MIN" E "MAX". *
;* O VALOR DO CONTADOR É MOSTRADO NO DISPLAY. *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS
; PELO SISTEMA
136
INTENSIDADE ;ARMAZENA O VALOR DA CONTAGEM
FLAGS ;ARMAZENA OS FLAGS DE CONTROLE
FILTRO11 ;FILTRAGEM 1 PARA O BOTÃO 1
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
#DEFINE ST_BT1 FLAGS,0 ;STATUS DO BOTÃO 1
#DEFINE ST_BT2 FLAGS,1 ;STATUS DO BOTÃO 2
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
MIN EQU .0 ;VALOR MÍNIMO PARA O INTENSIDADE
MAX EQU .15 ;VALOR MÁXIMO PARA O INTENSIDADE
T_FILTRO EQU .20 ;FILTRO PARA BOTÃO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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 BOTAO1 PORTA,1 ;PORTA DO BOTÃO
; 0 -> PRESSIONADO
; 1 -> LIBERADO
#DEFINE BOTAO2 PORTA,2 ;PORTA DO BOTÃO
; 0 -> PRESSIONADO
; 1 -> LIBERADO
137
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* TRATAMENTO DA INTERRUPÇÃO DE TMR0 *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA IRÁ CONTAR O TEMPO, E QUANDO PASSAR 1 SEGUNDO, A VARI-
; ÁVEL "TEMPO" SERÁ DECREMENTADA.
; 1 SEGUNDO = 64us (PRESCALER) X 125 (TMR0) X 125 (TEMP1)
138
BCF INTCON,T0IF ;LIMPA FLAG DA INT.
MOVLW .256-.250 ;SETA TIMER P250MS
MOVWF TMR0 ;REINICIA TMR0
INCF TEMPO,F ;INCREMENTA TEMPO
MOVLW .16 ;COLOCA 16 EM WORK
XORWF TEMPO,W ;COMPARA TEMPO COM 16
BTFSC STATUS,Z ;TESTA BIT Z DO REG. STATUS
CLRF TEMPO ;ZERA TEMPO
MOVLW .15 ;COLOCA 15 EM W
XORWF INTENSIDADE,W ;COMPARA INTENSIDADE COM 15
BTFSC STATUS,Z ;TESTA BIT Z DO REG. STATUS
GOTO LIGA_LAMPADA
MOVF INTENSIDADE,W ;MOVE INTENSIDADE PARA W
SUBWF TEMPO,W ;SUBTRAI TEMPO DE INTENSIDADE
BTFSS STATUS,C ;TESTA BIC C DO REG. STATUS
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DA INTERRUPÇÃO *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SAI_INT
SWAPF STATUS_TEMP,W
MOVWF STATUS ;RECUPERA STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W ;RECUPERA W
RETFIE ;RETORNA DA INTERRUPÇÃO
139
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA DE CONVERSÃO BINÁRIO -> DISPLAY *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA IRÁ RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER
; MOSTRADO NO DISPLAY PARA CADA VALOR DE INTENSIDADE. O RETORNO JÁ ESTÁ
; FORMATADO PARA AS CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTB.
CONVERTE
MOVF INTENSIDADE,W ;COLOCA INTENSIDADE EM W
ANDLW B'00001111' ;MASCARA VALOR DE INTENSIDADE
;CONSIDERAR SOMENTE ATÉ 15
ADDWF PCL,F
; B'GFABCDE.' ; POSIÇÃO CORRETA DOS SEGUIMENTOS
RETLW B'01111110' ; 00 - RETORNA SÍMBOLO CORRETO 0
RETLW B'00011000' ; 01 - RETORNA SÍMBOLO CORRETO 1
RETLW B'10110110' ; 02 - RETORNA SÍMBOLO CORRETO 2
RETLW B'10111100' ; 03 - RETORNA SÍMBOLO CORRETO 3
RETLW B'11011000' ; 04 - RETORNA SÍMBOLO CORRETO 4
RETLW B'11101100' ; 05 - RETORNA SÍMBOLO CORRETO 5
RETLW B'11101110' ; 06 - RETORNA SÍMBOLO CORRETO 6
RETLW B'00111000' ; 07 - RETORNA SÍMBOLO CORRETO 7
RETLW B'11111110' ; 08 - RETORNA SÍMBOLO CORRETO 8
RETLW B'11111100' ; 09 - RETORNA SÍMBOLO CORRETO 9
RETLW B'11111010' ; 10 - RETORNA SÍMBOLO CORRETO A
RETLW B'11001110' ; 11 - RETORNA SÍMBOLO CORRETO b
RETLW B'01100110' ; 12 - RETORNA SÍMBOLO CORRETO C
RETLW B'10011110' ; 13 - RETORNA SÍMBOLO CORRETO d
RETLW B'11100110' ; 14 - RETORNA SÍMBOLO CORRETO E
RETLW B'11100010' ; 15 - RETORNA SÍMBOLO CORRETO F
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111'
MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO
;COMPARADOR ANALÓGICO
140
BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000110'
MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS
;COMO SAÍDAS
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA
MOVLW B'10000001'
MOVWF OPTION_REG ;PRESCALER 1:4 NO TMR0
;PULL-UPS DESABILITADOS
;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW B'10100000'
MOVWF INTCON ;CHAVE GERAL E TMR0 ATIVADAS
BANK0 ;RETORNA PARA O BANCO 0
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CLRF PORTA ;LIMPA O PORTA
CLRF PORTB ;LIMPA O PORTB
CLRF FLAGS ;LIMPA TODOS OS FLAGS
MOVLW MIN
MOVWF INTENSIDADE ;INICIA INTENSIDADE = MIN
MOVLW .256-.250 ;SETA TIMER P250MS
MOVWF TMR0 ;REINICIA TMR0
GOTO ATUALIZA ;ATUALIZA O DISPLAY INICIALMENTE
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
CLRF FILTRO11
CLRF FILTRO21
MOVLW T_FILTRO
MOVWF FILTRO12 ;INICIALIZA FILTRO1 = T_FILTRO
MOVWF FILTRO22 ;INICIALIZA FILTRO2 = T_FILTRO
141
CHECA_BT1
BTFSC BOTAO1 ;O BOTÃO 1 ESTÁ PRESSIONADO?
GOTO BT1_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO
;SIM
DECFSZ FILTRO11,F ;DECREMENTA O FILTRO DO BOTÃO
;TERMINOU?
GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO
;SIM
DECFSZ FILTRO12,F ;DECREMENTA O FILTRO DO BOTÃO
;TERMINOU?
GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO
;SIM
BTFSS ST_BT1 ;BOTÃO JÁ ESTAVA PRESSIONADO?
GOTO DEC ;NÃO, EXECUTA AÇÃO DO BOTÃO
GOTO CHECA_BT2 ;SIM, CHECA BOTÃO 2
BT1_LIB
BCF ST_BT1 ;MARCA BOTÃO 1 COMO LIBERADO
CHECA_BT2
BTFSC BOTAO2 ;O BOTÃO 2 ESTÁ PRESSIONADO?
GOTO BT2_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO
;SIM
DECFSZ FILTRO21,F ;DECREMENTA O FILTRO DO BOTÃO
;TERMINOU?
GOTO CHECA_BT2 ;NÃO, CONTINUA ESPERANDO
;SIM
DECFSZ FILTRO22,F ;DECREMENTA O FILTRO DO BOTÃO
;TERMINOU?
GOTO CHECA_BT2 ;NÃO, CONTINUA ESPERANDO
;SIM
BTFSS ST_BT2 ;BOTÃO JÁ ESTAVA PRESSIONADO?
GOTO INC ;NÃO, EXECUTA AÇÃO DO BOTÃO
GOTO MAIN ;SIM, VOLTA AO LOOPING
BT2_LIB
BCF ST_BT2 ;MARCA BOTÃO 2 COMO
LIBERADO
GOTO MAIN ;RETORNA AO LOOPING
142
DEC ;AÇÃO DE DECREMENTAR
BSF ST_BT1 ;MARCA BOTÃO 1 COMO JÁ PRESSIONADO
MOVF INTENSIDADE,W ;COLOCA INTENSIDADE EM W
XORLW MIN ;APLICA XOR ENTRE INTENSIDADE E MIN
;PARA TESTAR IGUALDADE. SE FOREM
;IGUAIS, O RESULTADO SERÁ ZERO
BTFSC STATUS,Z ;RESULTOU EM ZERO?
GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT.
;NÃO
DECF INTENSIDADE,F ;DECREMENTA O INTENSIDADE
GOTO ATUALIZA ;ATUALIZA O DISPLAY
INC ;AÇÃO DE INCREMENTAR
BSF ST_BT2 ;MARCA BOTÃO 2 COMO JÁ PRESSIONADO
MOVF INTENSIDADE,W ;COLOCA INTENSIDADE EM W
XORLW MAX ;APLICA XOR ENTRE INTENSIDADE E MAX
;PARA TESTAR IGUALDADE. SE FOREM
;IGUAIS, O RESULTADO SERÁ ZERO
BTFSC STATUS,Z ;RESULTOU EM ZERO?
GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT.
;NÃO
INCF INTENSIDADE,F ;INCREMENTA O INTENSIDADE
GOTO ATUALIZA ;ATUALIZA O DISPLAY
ATUALIZA
CALL CONVERTE ;CONVERTE INTENSIDADE NO NÚMERO DO
;DISPLAY
MOVWF PORTB ;ATUALIZA O PORTB PARA
;VISUALIZARMOS O VALOR DE INTENSIDADE
;NO DISPLAY
GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END ;OBRIGATÓRIO
143
Esquema elétrico
15V
+V
J1 R11
Q2 Q5 Q6 Q3 Q4
1 J5 R28
6 2 R12
7 3
8 4
9 5 L1 Gnd Gnd Gnd Gnd
D12 D17 DISP2
DISP4 DISP3 DISP1
D14 5V1
abcdefg. abcdefg. abcdefg. abcdefg.
D11
D16
Q1 8V2 R10 Q7
D15
D13 C3 D18 LED10
+
C2 R16 R15
100uF 22uF LED11
LED12
D21
LED13 R26
D19 LED14 R27
J3 R13
D20 2K2
R30 R31
S4 S3 S2 S1
R8 LED8 R14
R29
S5 U7 R7 LED7
R18 RA0 RB7 R6
RA1 RB6
RA2 RB5 R5 LED6
R19 RA3 RB4 16F628
R20 RA4 RB3 R4
RB2 LED5
R21 RB1 R3 RA2 RA1
RB0 R2 RA3 RA0
R17 R22 R23 R24 XTAL LED4 RA4 OSC1
R25 RA5 R1 MCLR OSC2
RA6 VDD VSS VDD
RA7 VCC LED3 RB0 RB7
RB1 RB6
LigDesl 15V RB2 RB5
+V LED2 RB3 RB4
U6
LED1
D9 IN OUT
Con. VE
R9 5V J4
+
COM J2
C1 +V
LigDesl
D10 LED9
VE
Lista básica de materiais necessários à montagem do Kit de microcontrolador PIC
– Modelo WM002
1 – Microcontrolador PIC16F628
1 – Conector DB9 fêmea 90° para circuito impresso (necessário)
4 – Displays de sete segmentos catodo comum (400 X 600 Mils)
1 – Soquetes de 18 pinos torneados para CI
1 – Barra com 80 pinos torneados para CI
5 – Teclas para circuito impresso (tipo TACT) (confirmar tamanho) Média
1 – Diodo Zener 8V2 ½ W – D4
1 – Diodo Zener 5V1 ½ W – D3
4 – Diodo 1N4148 – D1, D2, D5, D6
7 – Transistor BC548 – Q1, Q2, Q3, Q5, Q7
2 – Transistores PNP uso geral BC557 – Q4, Q6
9 – Resistores de 470 ohms, 1/8 W ou mais. – R1, até R8, R27
10 – resistores de 2K2 ohms – R13, R14, R15, R16, R26, R29, R30, R31,R32,R33
8 – resistores de 330 ohms – R18, R19, R20, R21, R22, R23, R24, R25
2 – Resistores de 10 K ohms – R17 e R2 WM003
1 – Resistor de 10 ohms – R28
1 – Resistor de 1K ohms – R9
1 – Resistor de 1K5 ohms – R1 WM003
1 – Regulador de tensão LM 7805 (5V 1A)
1 – Cabo de comunicação serial
1 – Ressonador cerâmico de 4MHz
1 – Capacitor de 1000 µF 25V, eletrolítico radial. – C1
1 – Capacitor de 100 µF 25V, eletrolítico radial. – C2 WM003
1 – Capacitor de 22 µF 25V, eletrolítico radial. – C1 WM003
1 – Ponte retificadora de 0,5 A 30 V redonda.
1 – Chave 1 pólo 2 posições para circuito impresso (ver amostra)
14 – Leds Ø 3 mm (5 – verde, 2 – amarelo, 2 – verde e 5- outra cor)
2 – Conectores fêmea RJ11 com 6 vias para placa de circuito impresso
2 – Conectores RJ11 com 6 vias
0,5m – Cabo para RJ11 com 6 vias
6 – Jumper fêmea de 2,54 mm
1 – Conector para ligar a alimentação
1 – Fonte de 9,0 VCC 0,3A ou somente o trafo com cabo de ligação
Barra de pinos com espaçamento de 2,54 mm (30 pinos)
1 – Soquete tipo rosca para lâmpada de 12vcc
1 – Lâmpada de 12V com rosca