Transcript
CAPÍTULO 1
Blocos funcionais do microcomputador
¾ Introdução ¾ O microcomputador ¾ Blocos Funcionais
1 - OS BLOCOS FUNCIONAIS DO MICROCOMPUTADOR 1.1 - Introdução Os avanços tecnológicos conseguidos na fabricação de semicondutores permitiram o surgimento dos microprocessadores. Com isso, foi possível que os computadores se tornassem cada vez mais compactos e seus custos mais acessíveis, permitindo uma ampliação nas possibilidades de suas utilizações. Onde não se imaginava utilizar sistemas computadorizados há poucos anos atrás, hoje já se faz um amplo uso do computador. Como a indústria tem como principal objetivo, um aumento na qualidade de seus produtos e aumentar a quantidade de produtos fabricados no mesmo tempo, é indispensável que os profissionais do ramo eletrônico tenham um bom conhecimento sobre seu funcionamento.
1.2 - O microcomputador É um equipamento cuja função é executar automaticamente uma seqüência de operações para as quais foi anteriormente programado. Os microcomputadores são equipamentos capazes de executarem diferentes tarefas para atender às várias necessidades do usuário, os quais podem ter finalidades gerais. Quando utilizamos em aplicações gerais como os microcomputadores comercializados, definimos como sendo os de finalidades gerais. Para poderem atender uma aplicação determinada, são projetados os de finalidades específicas. Os dados nos computadores são armazenados e expressos em linguagem binária que utiliza os dígitos 0 e 1. Essas condições são obtidas por meio de flip-flop, que são dispositivos de armazenamento nos sistemas de computadores. O bit pode ser definido como uma unidade básica de representação de dados em qualquer sistema de computador. Os computadores processam dados com extensão de 8 bits ou um de seus múltiplos, 16, 32, 64. Determinados números de bits são denominados de palavra “Word”, o qual pode conter, 1, 2, 4, 8, 16, 32 e 64 bits. A palavra de 4 bits é chamada de “nibble” e a palavra de 8 bits de “byte”. Uma palavra pode representar um dado ou uma diretriz chamada de instrução. O que torna imprescindível citarmos as definições de: Hardware: Consiste de circuitos eletrônicos responsáveis pela execução direta de instruções em linguagem de máquina: C. Is, placas de circuitos impressos, cabos, fontes de alimentação etc. Software: O grupo ou conjunto de instruções apresentadas ao computador chama-se programa, o qual consiste de algoritmos, que é o processo pelo qual as operações lógicas são executadas pela máquina. Firmware: Consiste de um software embutido em circuitos eletrônicos. É comum dizer que qualquer operação feita por software pode também ser construída por hardware e qualquer instrução executada pelo hardware pode também ser simulada por software.
2
1.3 - Blocos funcionais Qualquer sistema de microcomputador é formado basicamente pelos seguintes blocos funcionais: - unidade de memória - unidade central de processamento (UCP) - unidade de entrada / saída - dispositivo de interface - DMA Abaixo um diagrama da estrutura geral de um microcomputador.
CPU
INTERFACE
MEMÓRIA
DMA
DISPOSITIVO DE I/0
Figura 1 – Sistema de Microcomputador típico e suas interfaces Os blocos funcionais representados no diagrama acima são construídos com circuitos integrados (C. Is). Os circuitos integrados são componentes que possuem um elevado nível de integração de componentes em uma única pastilha, esse processo é denominado de LSI “Large Scale Integration”, ou seja “Integração em larga escala”. O conjunto de C.Is. que forma os blocos funcionais de um computador é também conhecido como “hardware”. Microprocessador O microprocessador ou Unidade Central de Processamento (CPU) é um dispositivo digital baseado numa única pastilha (CHIP). Esta pastilha, por si só, tem a capacidade de controlar e manipular dispositivos externos como: memórias, portas de I/O (entrada/saída) e outros circuitos. Os microprocessadores utilizam sistemas seqüenciais síncronos, ou seja, utilizando um CLOCK. A cada pulso de clock ou grupo de pulsos (pode ser de 3 em 3, por exemplo) executamse uma função específica. Hoje temos microprocessadores rodando com clock de 400 MHz da INTEL, que pode executar centenas de milhões de instruções por segundo. 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 ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 2 – Qual a função do microcomputador e qual sua finalidade ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 3 – Defina: a – Hardware __________________________________________________________________ __________________________________________________________________ b – Software __________________________________________________________________ __________________________________________________________________ c – firmware __________________________________________________________________ __________________________________________________________________ 4 – Quais os blocos básicos que compõe o microcomputador ? Defina-os. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
5
Anotações: __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 6
CAPÍTULO 2
Memória
¾ RAM ¾ ROM
7
2 – MEMÓRIA Memória é à parte do sistema onde são armazenados os programas e dados necessários à realização das operações efetuadas pelo computador. A memória é equivalente a milhares de registradores, cada um armazenando uma palavra binária. Os microcomputadores de 8 bits utilizam memórias de semicondutores com até 65536 posições, cada uma capaz de armazenar um byte de informação. Além das memórias de semicondutores, outros dispositivos mais comuns também podem ser citados: Cartão de papel perfurado, fita magnética, disco magnético, tambor magnético, núcleo magnético, memória de bolha. Memórias que possuem a característica de podermos acessar qualquer registrador da memória de modo aleatório sem antes percorrermos toda a estrutura da memória através de endereço dos registradores desejados, são conhecidas como memórias de acesso randômico. Diferente das memórias de acesso seqüenciais onde é muito mais rápido acessarmos a memória seqüencialmente já que para acessarmos dados em diferentes posições da memória há a necessidade de se percorrer a estrutura ate chegarmos no ponto desejado, implicando num tempo maior de leitura. Dentre os vários tipos de memória, as mais comuns são as memórias RAM e as memórias ROM.
2.1 – Memórias RAM 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 de dados
RAM Controle
Figura 2 – Ilustração de memória RAM As RAMs podem ser do tipo dinâmicas ou estáticas. RAM dinâmica: (DRAM “Dynamic Random Access Memory”). É a memória que perde a informação armazenada mesmo quando a alimentação é constante. Isso acontece porque cada célula da DRAM apresenta um transistor MOSFET e um capacitor que armazena um dado (1 – bit). O transistor fica em série com o capacitor de armazenamento e cumpre a função de uma chave que permite a entrada ou saída da carga do capacitor quando o pino WE é ativado. Devido às fugas de carga do capacitor, há necessidade de reposição dessas cargas através de um pulso de “REFRESH”, vindo do microprocessador. Esse processo requer que todas as células de armazenamento sejam endereçadas pelo menos uma vez a cada 2 milissegundos. Um circuito contador externo a memória é geralmente incorporado ao sistema para ativar o barramento de endereço, quando o microprocessador não está acessando a memória. 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ê.
2.2 - Memórias RAM com dispositivos de três estados Dispositivos três estados (ou “tri-state”) são dispositivos lógicos nos quais existem três estados de saída possíveis: O estado lógico 0, o estado lógico 1 e um estado lógico de alta impedância, no qual a saída não tem efeito, pois está desconectada do resto do circuito e não tem influência sobre ele. A condição de três estados pode ser mais bem compreendida analisando-se uma saída “totem-pole tri-state” no circuito abaixo.
Saida em tri state
Saída
D
Figura 3 – Circuito tri-state com transistores
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.
2.3 - Tempos de acesso 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
Figura 5 – Pinagem da memória RAM 6116 ou 2128 A correspondência entre pinos e sinais de entrada / saída é comentada na tabela a seguir. Pino
Sinal
Função
1
A7
Bit 7 de endereço
2
A6
Bit 6 de endereço
3
A5
Bit 5 de endereço
4
A4
Bit 4 de endereço
5
A3
Bit 3 de endereço
6
A2
Bit 2 de endereço
7
A1
Bit 1 de endereço
8
A0
Bit 0 de endereço
9
D0
Bit 0 de dado
10
D1
Bit 1 de dado
11
D2
Bit 2 de dado
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
Habilita barramento de dado quando em nível zero (tri-state). 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
A tabela abaixo mostra os níveis necessários para ativar os pinos CE / OE e WE. Seleção
Leitura / Escrita
Saída
CE / OE
WE
D0 a D7
H
L
Tri-state
H
H
Tri-state
L
L
Escrita (entrada de dados)
L
H
Leitura (saída de dados)
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 ROM
S
Saída de leitura de dados
Controle
Figura 6 – Esquema de uma memória ROM As entradas A0 até An formam as linhas de endereço, e a saída de leitura S corresponde ao dado gravado na posição selecionada pelo endereço. A ROM (“Read Only Memory”) é uma memória só de leitura, ou seja, uma vez gravada a informação não pode mais ser apagada. Para gravação, o processo é realizado no fabricante, que confecciona uma mascara que permite a produção das memórias. Os CD-ROM’s também possuem seu conteúdo fixo, logo são memórias ROM. 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.
Figura 7 – Estrutura de uma memória PROM por 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 EPROMMOS, 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
Figura 7 – Pinagem da memória ROM 27C32. A correspondência entre pinos e sinais de entrada / saída é comentada na tabela a seguir. Pino
Sinal
Função
1
A7
Bit 7 de endereço
2
A6
Bit 6 de endereço
3
A5
Bit 5 de endereço
4
A4
Bit 4 de endereço
5
A3
Bit 3 de endereço
6
A2
Bit 2 de endereço
7
A1
Bit 1 de endereço
8
A0
Bit 0 de endereço
9
D0
Bit 0 de dado
10
D1
Bit 1 de dado
11
D2
Bit 2 de dado 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. Pinos
Função
leitura
Saída nãohabilitada
Baixo consumo
Programação (escrita)
Inibição
18
CE / PGM
VIL
Irrelevante
VIH
VIL
VIH
20
OE / Vpp
VIL
VIH
Irrelevante
21 v
21 v
24
Vcc
5v
5v
5v
5v
5v
9 a 11
Saída de dados
Saída Q
HI - Z
HI - Z
Entrada de dados
HI –Z
13 a 17
2.7 – Memória virtual O Windows, para poder acelerar o desempenho do microcomputador, cria uma área de memória virtual no espaço disponível do disco rígido. Assim, quando a memória RAM esta totalmente ocupada e o processador necessita de mais espaço para trabalhar, ele seleciona parte dos programas que não deve ser usado naquele momento e transfere para a área de memória virtual. Esse processo, apesar de ajudar no desempenho, é mais lento do que se o micro tivesse memória RAM suficiente para executar todas as instruções. O tempo de acesso ao disco rígido é bem maior que o tempo de acesso à memória RAM. Toda informação da memória virtual é apagada quando o micro é desligado. 15
2.8 – Exercícios 1 – O que é memória e qual a sua função? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 2 – Defina memória RAM. Comente sobre suas principais características. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 3 – Qual a diferença entre uma memória RAM dinâmica e uma RAM estática ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 4 – Qual a aplicação em que devemos utilizar uma memória RAM estática ? E a dinâmica ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 5 – Comente sobre o dispositivo “tri-state”. Em quais componentes já temos esta implementação ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 6 – Determine a capacidade de acesso das memórias abaixo relacionadas. a – Memória com pinos de endereçamento de A0 até A11 e 8 bits de dados. __________________________________________________________________ b – Memória com pinos de endereçamento de A0 até A13 e 8 bits de dados. __________________________________________________________________ 16
c – Memória com pinos de endereçamento de A0 até A15 e 8 bits de dados.
7 – Defina memória ROM. Comente sobre suas principais características. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 8 – Quais os tipos de memória ROM ? Comente sobre cada um dos tipos. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 9 – Antes de efetuarmos a programação em uma programação em uma memória EPROM, o que é necessário verificar. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 10 – Defina memória virtual e indique suas principais características. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
17
Anotações: __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 18
CAPÍTULO 3
Conceito básico de microprocessador
¾ Microprocessador ¾ Dispositivo de entrada e saída ¾ Sistema de barramento ¾ Flags condição
19
3 – CONCEITOS BASICO MICROPROCESSADORES Antes de iniciarmos, é relevante citarmos a história dos microprocessadores, onde abaixo temos um breve resumo com destaques para algumas datas consideradas importantes. Na década de 40 o surgimento da válvula e o transistor (1948), na década de 50 a comercialização do transistor, na década de 60 os circuitos integrados do tipo SSI (“Small Scale Integrated” ou pequena escala de integração), na década de 70 os circuitos integrados do tipo MSI (“Medium Scale Integrated” ou media escala de integração). Em 1971 surgem os circuitos integrados do tipo LSI (“Large Scale de Integrated” ou com grande escala de integração), com o primeiro microprocessador de 4 bits o INTEL 4004, em 1972 a INTEL lança o 8008 uma CPU de 8 bits. Já em 1974 a INTEL começa a ter concorrentes, com o microprocessador 8080, dez vezes mais rápido que o anterior, a MOTOROLA lança o 6800 que durante muito tempo esteve presente nos primeiros microcomputadores. A partir daí tivemos em 1976 a TEXAS com o primeiro CPU de 16 bits, em 1977 a MOSTEK com o 6502 (Apple I, II e II plus) e a ZILOG com o Z80 (TRS80), um dos mais utilizados até hoje, em 1978 os circuitos integrados VLSI permitiram o surgimento de novos microprocessadores como o MOTOROLA 6809 a INTEL com o 8088 / 8086 e os microprocessadores BIT-SLICE (de 2 a 64 bits). Década de 80: 1980 – MOTOROLA 68.000 em 1981 – MOTOROLA 68.010 1982 – INTEL 80186 / 80188 e o 80286 (com 130.000 transistores integrados) 1984 – MOTOROLA 68.020 1985 – INTEL 80386 ( 80386DX, ou i386) 1986 – MOTOROLA 68.030 1988 – INTEL 80386SX e em 1989 o i486 (1.200.000 transistores) Década de 90: 1991 – INTEL i386SL, i486SX (os primeiros com tecnologia RISC) 1992 – INTEL i486 DX2/50 e o i486 DX2/66 1993 – INTEL Pentium 1995 – INTEL Pentium Pro 1997 – INTEL Pentium II 1998 – INTEL Pentium II 300, 266 MHz 1999 – INTEL Pentium III 600, 700 MHz 2000 – INTEL Pentium III 1000 MHz 2001 / 2002 – INTEL Pentium IV de até 2,7 GHz (Aproximadamente) 2003 / 2004 – INTEL Pentium IV de ate 3,6 GHz e o Athlon 64 da AMD
3.1 – Microprocessador O microprocessador ou Unidade Central de Processamento (CPU) é um dispositivo digital baseado numa única pastilha (CHIP). Esta pastilha, por si só, tem a capacidade de controlar e manipular dispositivos externos como: memórias, portas de I/O (entrada/saída) e outros circuitos. 20
Os microprocessadores utilizam sistemas seqüenciais síncronos, ou seja, utilizando um CLOCK. A cada pulso de clock ou grupo de pulsos (pode ser de 3 em 3, por exemplo) executamse uma função específica. Hoje temos microprocessadores rodando com clock de 3GHz da INTEL, que pode executar centenas de milhões de instruções por segundo. 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 utilizadas 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 todos os blocos funcionais do computador em uma seqüência lógica e sincronizada. A UCP chama as instruções da memória, decodifica-as e executa-as, além de alimentar as portas de entrada / saída a fim de operacionalizar as instruções recebidas, ou seja, ela recebe as instruções vindas do programa armazenado na memória de programa já decodificadas pelo decodificador de instruções e emite os sinais de sincronização e controle para as diversas partes do computador.
3.2 - Dispositivos de entrada / saída É o meio pelo qual o usuário se comunica com o computador. É através desses dispositivos que o operador fornece informações ao sistema e recebe da máquina os resultados das operações executadas pelo computador. Existem componentes que viabilizam a interface com o usuário, tais como: portas seriais, portas paralelas, conversores análogo-digitais etc. Esses componentes estão interligados através de um sistema de barramento.
3.3 - Sistema de barramento 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 Instruções
Controle da CPU
Sinais de Controle Registrador de Instruções
Controle do Barramento de Dados
ALU (Aritmetic Logic Unit)
Registrador da CPU
Controle de Endereços Barramento de Endereços de 16 bits
Barramento de Dados de 8 bits
Figura 8 – Arquitetura padrão de um microprocessador Podemos destacar os seguintes blocos da arquitetura apresentada. Registrador da CPU ou acumulador – Registrador principal, que contem o dado a ser processado. É o responsável por armazenar os resultados de adições, subtrações e outras operações executadas pelo sistema. Controle da CPU também responsável pelo Apontador de Pilha – (“Stack Pointer – SP”) – Registrador que aponta para o endereço de retorno de sub-rotina, sendo este ultimo armazenado em uma pilha de memória. É necessário na inicialização carregar no apontador o endereço inicial da pilha. Controle de endereços ou Contador de Programa – (“Program Counter – PC”) – Registrador que armazena o endereço de memória da próxima instrução a ser executada. O conteúdo do contador de programa é incrementado após a execução da instrução ou trocado por outro valor se a instrução em curso for de desvio de seqüência. Decodificador de instrução – Circuito combinacional utilizado para determinar qual a próxima instrução a ser executada. Isto é feito a partir do código de operação armazenado previamente no registrador de instrução. Registrador da CPU também responsável pelas Flags – Conjunto de flip-flops destinados a guardar as condições resultantes da execução de instruções. Tais flags são fundamentais no sentido em que se constituem no único mecanismo que o programador Assembly dispõe para desvios de processamento e implementação de algoritmos. 22
Registradores auxiliares – Conjunto de registradores de rascunho que podem ser usados em conjunto ou separadamente para operações intermediarias, sem que seja necessário o acesso sistemático a memória. Registrador de instrução (RI) – Registrador que armazena a instrução que esta sendo executada. Controle da CPU ou Unidade de Controle – Circuito seqüencial interno ao microprocessador que é utilizado para gerar os sinais de controle, necessários à execução das instruções previamente decodificadas. Unidade Lógica Aritmética (ULA) – Circuito combinacional utilizado para operações lógicas e aritméticas envolvendo dois operando. É importante salientar alguns aspectos referentes às condições dos Flags, que são células de 1 bit e que contem informações sobre os resultados das operações e indicam também a ocorrência de condições específicas dessas operações. As Flags são acionadas (setadas) pela ULA e a ela estão associadas. Cada microprocessador tem seus próprios bits de Flag. Abaixo temos mencionado as Flags mais comuns a serem encontradas na maioria dos microprocessadores.
3.4 - Flags condição Um Flag é considerado “setado” quando se força o valor do bit para 1 e é “resetado”, forçandose 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. Flags C N P/V H Z S X
Função Bit de carry soma/subtração paridade/over-flow half-carry zero sinal não usado
Condição setado C PE Z M -
ressetado NC PO NZ P -
Observação: M = “minus” (menos) P = “plus” (mais) 23
setado se: vai um do bit 7 operação de subtração paridade par/over-flow vai um do bit 3 resultado zero resultado negativo -
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 S 0
6 Z 1
5 X 0
4 H 0
3 X 0
2 P/V 0
1 N 0
0 C 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. Nesse caso, a palavra armazenada no registrador F é 41H porque 0100 = 4 e 0001 = 1. Sempre que o conteúdo do registrador F for verificado, o resultado mostrado no display de dados aparecerá em código hexadecimal. A tradução desse resultado para a linguagem binária fornece a condição das flags naquele momento.
24
3.5 – Exercícios 1 – Qual a função dos dispositivos de entrada e saída (I/O)? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 2 – O microprocessador é composto de três barramentos independentes. Quais são? Comente sobre eles. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 3 – Com base na arquitetura padrão de um microprocessador, explique a função de cada bloco: • 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 7C
b–
+ C3
c–
3D
+ A2 5E
26
d–
+ B5 42
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 O microcontrolador é um dispositivo que tem a função de controlar algum processo ou aspecto do ambiente. Componente de aplicação específica e uma vez implementado permite poucos recursos para alteração do processo em que foi utilizado. Como exemplo podemos citar o Televisor, Forno microondas, videocassete, celulares, brinquedos etc. Os microcontroladores estão revolucionando o projeto de equipamento eletrônico, não somente os sistemas convencionais estão se tornando mais sofisticados e baratos, como novas funcionalidades estão sendo possíveis de serem implementadas com um custo compatível com o mercado. Os microprocessadores destinados ao mercado de computadores pessoais podiam e podem ser empregados como controladores, porém seu custo continua elevado para o tipo de tarefa que se deseja executar no controle dedicado. Por exemplo, utilizarmos um Pentium 4 no controle do número de lâmpadas acessas simultaneamente em uma residência. Em virtude deste mercado, os fabricantes de circuitos lançaram então os microcontroladores, dispositivos que possuem integrados em uma única pastilha a CPU, RAM, EPROM ou EEPROM, E/S e controladores de interrupção, PWM’s etc. O surgimento destes dispositivos a um baixo custo provocou uma revolução nos métodos de projetos de sistemas de controle para o uso doméstico ou industrial. Os sistemas puramente mecânicos estão sendo alterados por circuitos eletrônicos mais confiáveis e baratos. O microcontrolador é programável, pois toda a lógica de operação é estruturada na forma de um programa e gravada dentro do componente. Após isso, toda vez em que alimentarmos o microcontrolador o programa interno será executado.
4.1 - A arquitetura de um microcontrolador Para podermos entender mais facilmente a estrutura do microcontrolador, podemos imaginar como um dispositivo composto de seis partes: Clock, CPU, Porta de entrada, Porta de saída, Memória de dados, Memória de programa. Os dados dentro de um microcontrolador são manipulados em unidades chamadas palavras. Os microcontroladores PIC’s apresentam estrutura de máquina interna do tipo “Havard”, enquanto grande parte dos microcontroladores tradicionais apresenta uma arquitetura do tipo “Von-Newman”. A diferença está na forma como os dados e os programas são processados pelo microcontrolador, onde na arquitetura “Von-Newman” existe apenas um barramento interno, geralmente de 8 bits, por onde passam as instruções e os dados. Já na arquitetura do tipo “Havard” existem dois barramentos internos, sendo um de dados e outro de instruções. No caso do PIC, o barramento de dados é sempre de 8 bits e o de instruções de 12, 14 ou 16 bits. O PIC 16F628, que será por nos estudado, possui palavras de dados de oito bits de tamanho, e palavras de instrução de 14 bits. Esse tipo de arquitetura permite que enquanto uma instrução é executada outra seja “buscada” da memória, o que torna o processamento mais rápido. Além disso, como o barramento de instrução é maior que 8 bits, o OPCODE da instrução já inclui o dado e o local onde ela vai operar (quando necessário), o que significa que apenas uma posição de memória é utilizada por instrução, economizando assim muita memória de programa. A largura de memória de programa de 24 bits, além de implementar diversas facilidades os coloca como dispositivos intermediários aos DSP, de fato são chamados de DSC (“Digital Signal Controller” – Controlador Digital de Sinais). Os PIC’s utilizam uma tecnologia chamada RISC (“Reduced Instruction Set Computer” Computador com Set de Instruções Reduzidas). Desta forma, os PIC’s possuem cerca de 35 instruções, muito menos que os microcontroladores convencionais CISC que chegam a possuir mais de 100 instruções. 29
As linhas mais finas que partem do centro em direção à periferia do microcontrolador correspondem aos fios que interligam os blocos interiores aos pinos do invólucro do microcontrolador. O gráfico que se segue representa a parte principal de um microcontrolador.
Abaixo temos uma tabela com alguns exemplos da família PIC: 12 Bits
14 Bits
16 Bits
16C56
16F62x
18F242
16C57
16C7x
18F252
16C58
16F7x
18F258
16C505
16F8x
18F442
16HV540
16F87x
18F458
30
Analisando a estrutura abaixo podemos definir:
Entrada
Saída
CPU Memória de Dados
Clock
Memória de Programas Figura 9 – O Microcontrolador Básico Clock – é o responsável pelo sincronismo entre todas as operações de um microcontrolador. Todos eventos que ocorrem dentro de um microcontrolador obedecem a uma lógica preestabelecida pelo fabricante e são processados em tempos determinados pela freqüência do clock. Normalmente, quanto maior a freqüência de clock de um microcontrolador, mais rápida é a execução das instruções. No caso dos microcontroladores, o clock é também utilizado como referência de tempo para execução de tarefas que devem ser repetidas a determinado intervalo de tempo, como por exemplo, a leitura de interfaces RS232C. 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. Memória de dados – A memória é a parte do microcontrolador cuja função é guardar dados. A maneira mais fácil de explicar é descrevê-la como uma grande prateleira cheia de gavetas. Se supusermos que marcamos as gavetas de modo a elas não se confundirem umas com as outras, então o seu conteúdo será facilmente acessível. Basta saber a designação da gaveta e o seu conteúdo será conhecido.
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
“PC - Program Counter”
33
5
4
3
2
1
0
4.2 - Ciclos de Máquina Nos microcontroladores PIC, o sinal do clock é internamente dividido por quatro, portanto para um clock externo de 4 MHz, temos um clock interno de 1 MHz e conseqüentemente, cada ciclo de máquina dura 1µs. A divisão do clock por quatro, forma as fases Q1, Q2, Q3 e Q4. O PC (program counter) é incrementado automaticamente na fase Q1 do ciclo de máquina e a instrução seguinte é buscada da memória de programa e armazenada no registrador de instruções no ciclo Q4. Ela é decodificada e executada no próximo ciclo, no intervalo de Q1 até Q4. Esta característica de buscar informações num ciclo de máquina e executá-la no próximo é conhecida como PIPELINE. Ela permite que quase todas as instruções sejam executadas em apenas um ciclo, gastando assim 1 µs (para um clock de 4 Mhz) e tornando o sistema muito mais rápido. As únicas exceções referem-se às instruções que geram “saltos” no PC, como chamadas de rotinas e retorno. Ao executar essas instruções, o PIPELINE deve ser primeiramente limpo para depois poder ser carregado novamente com o endereço correto, consumindo para isso 2 ciclos de máquina. Esse PIPELINE é facilmente implementado devido à arquitetura de “Havard”. Vetor de reset – Trata-se do primeiro endereço da memória de programa que será executado quando o PIC começar a rodar, quando alimentado ou por “reset”. Na maioria dos modelos, o “reset” aponta para o endereço 0x00, mas em alguns modelos mais antigos ele pode apontar para o último endereço disponível. Vetor de interrupção –As rotinas de interrupção serão armazenadas na área de programação , juntamente com todo o resto do programa. No entanto, existe um endereço que é reservado para o início do tratamento de todas as interrupções, nos modelos de PIC que possuem este recurso, esse endereço de vetor de interrupção é a posição 0x04. Pilha – A pilha é o local, totalmente separado da memória de programação, em que serão armazenados os endereços de retorno quando utilizarmos instruções de chamadas de rotinas. Quando o programa é desviado para o começo de uma rotina por meio da instrução correta, o endereço seguinte ao ponto que estava sendo rodado é armazenado na pilha para que, ao fim da rotina, o programa possa retornar. O tamanho da pilha também varia de acordo com o modelo de PIC, e esse tamanho determina a quantidade de rotinas que podem ser chamadas ao mesmo tempo. Caso se tente chamar um número de rotinas maior que o tamanho da pilha, o endereço de retorno mais antigo será perdido. A estrutura para implementação da pilha é chamada de memória LIFO (Last In First Out). Quando a CPU armazena uma nova informação na pilha o comando é PUSH (empurrar), o desempilhamento é feito através da instrução POP (Pull Operation – Operação de puxar). Registradores especiais – Nessa região da memória encontram-se todos os registradores especiais, denominados SFRs (special function register), utilizados pelo microcontrolador para execução do programa e processamento da ULA. Esses registradores ocupam espaço na RAM e podem ser acessados da mesma maneira que as variáveis do sistema, com mudança somente do endereço de acesso. A quantidade de SFRs depende do modelo de PIC, mas eles sempre são armazenados na parte baixa da memória (início dos endereços) e às vezes podem estar espalhadas em mais de um banco de memória. Registradores de uso geral – Trata-se de uma área destinada ao armazenamento de variáveis definidas pelo usuário para serem escritas e lidas pelo programa. O tamanho dessa memória varia de acordo com o modelo de PIC e também pode ocupar mais de um banco. EEPROM – A maior parte dos modelos de PIC, possuem esta memória interna.
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.
4.4 – O PIC 16F628 O microcontrolador PIC 16F628 é versátil, compacto e possui como principais características: •
Microcontrolador de 18 pinos o que facilita a compatibilidade com outros em nível de hardware e software (como o 16F84).
•
Baixo custo
•
15 pinos de I/O (Entrada ou Saída).
•
Memória de programação FLASH de 2048 x 14 bits.
•
Memória SRAM de 224 x 8 bits disponíveis.
•
Memória EEPROM interna de 128 x 8 bits.
•
1 canal PWM com captura e amostragem (CCP).
•
Facilidade de programação com 35 instruções.
•
Capacidade de corrente de 25 mA por pino de I/O
•
Oscilador 4 MHz.
•
Tensão de operação entre 3.0 a 5.5 V (2.0 a 5.5 para versão LF).
4.5 - Descrição dos pinos 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
Figura 10 – Pinagem do 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
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.
12
RB6/T1OSO/T1CKI
Entrada e saída
Porta B bit 6 / Saída oscilador TMR1 / Entrada de clock TMR1.
13
RB7/T1OSI
Entrada e saída
Porta B bit 7 / Entrada do oscilador de TMR1.
14
Vdd
Alimentação
15
RA6/OSC2/CLKOUT
Entrada e saída
Porta A bit 6 / Entrada para cristal oscilador / Saída de clock.
16
RA7/OSC1/CLKIN
Entrada e saída
Porta A bit 7 / Entrada para cristal oscilador / Entrada de clock externo.
17
RA0/AN0
Entrada e saída
Porta A bit 0 / Entrada comparador analógico.
18
RA1/AN1
Entrada e saída
Porta A bit 1 / Entrada comparador analógico.
37
Terra.
Alimentação Positiva.
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 1
2 3 4 5 6 7 8 9
C1
18 17 16 15 14 13 12 11 10
XTAL C2
Figura 11 – Oscilador a cristal 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. RA7 / OSC1 / CLKIN R
RA6 / OSC2 / CLKOUT
Figura 12 – Oscilador resistor
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.
RA7 / OSC1 / CLKIN RA6 / OSC2 / CLKOUT Figura 13 – Clock externo 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.
Figura 14 – Detector baixa tensão Temporizador de Power-Up – O temporizador de power-up (PWRT) pode ser utilizado para fazer com que o chip permaneça em reset por aproximadamente 72ms após o chip ter sido ligado. Deve ser utilizado sempre que possível devido ao fato do tempo de demora de estabilização da fonte de alimentação para todos os componentes envolvidos no circuito. Esse temporizador pode ser habilitado ou desabilitado somente durante a programação do chip. Módulo Comparador Analógico – O modula comparador analógico consiste em um conjunto de dois comparadores analógicos internos, que podem realizar comparações entre si ou de tensões analógicas externas. O modulo possui apenas o um registrador CMCON, responsável pela configuração e controle dos comparadores internos. 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. Registrador: STATUS
Endereços: 03h, 83h, 103h e 183h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
R/W
R/W
R/W
R
R
R/W
R/W
R/W
IRP
RP1
RP0
/TO
/PD
Z
DC
C
IRP – Seletor de banco de memória usado para endereçamento indireto. 0 = Banco 0 e 1 (00h – FFh).
1 = Banco 2 e 3 (100h – 1FFh)
* Manter sempre em 0 no 16F628 RP1 e RP0 – Seletor de banco de memória usado para endereçamento indireto. 00 = Banco 0 (00h – 7Fh).
01 = Banco 1 (80h – FFh).
10 = Banco 2 (100h – 17Fh).
11 = Banco 3 (180h – 1FFh).
* Cada banco possui 128 bits. O PIC 16F628 só possui os bancos 0 e 1. RP1 deve ser 0. /TO – Indicação de Time-out. 0 = Indica que ocorreu um estouro de WatchDog (WDT). 1 = Indica que ocorreu um power-up ou foi executada a instrução CLRWDT ou SLEEP. /PD – Indicação de Power-down. 0 = Indica que a instrução SLEEP foi executada. 1 = Indica que ocorreu um Power-up ou foi executada a instrução CLRWDT. 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. Conhecendo o CMCON – O modulo comparador permite implementar diversos circuitos através dos comparadores analógicos, inclusive conversores A/D, como o de rampa ou conversores. Cada implementação é realizada através do registrador CMCON. Este registrador é implementado no PIC 16F628. Registrador: CMCON
Endereços: 1Fh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
R
R
R/W
R/W
R/W
R/W
R/W
R/W
C2OUT
C1OUT
C2INV
C1INV
CIS
CM2
CM1
CM0
C2OUT – Bit indicativo do estado da saída do comparador 2. 0 = em “C2INV” 0 – entrada Vin+ < Vin -, 1 – entrada Vin+ > Vin -. 1 = em “C2INV” 0 – entrada Vin+ > Vin -, 1 – entrada Vin+ < Vin -. C1OUT – Bit indicativo do estado da saída do comparador 1. 0 = em “C1INV” 0 – entrada Vin+ < Vin -, 1 – entrada Vin+ > Vin -. 1 = em “C1INV” 0 – entrada Vin+ > Vin -, 1 – entrada Vin+ < Vin -. C2INV – Seleção de inversão do sinal de saída do comparador 2. 0 – Saída não invertida
1 – Saída invertida.
C1INV – Seleção de inversão do sinal de saída do comparador 1. 0 – Saída não invertida
1 – Saída invertida.
CIS – Seleção de entrada dos comparadores nos modos 1 e 2. CM2, CM1 e CM0 – Seleção do modo de operação dos comparadores:
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 0 – Neste modo os comparadores se encontram em reset, é o modo inicial de configuração dos comparadores. Neste modo, as saídas estão desligadas, mas os pinos RA0, RA1, RA2 e RA3 estão conectados às entradas dos comparadores, ou seja, como entradas analógicas. 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. Modo 4 – Neste modo temos os dois comparadores independentes. Modo 5 – Apenas o comparador C2 está em funcionamento e o comparador C1 permanece desligado, liberando os pinos RA0/AN0 e RA3/AN3/CMP1 para utilização 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. Modo 7 – Neste modo os comparadores se encontram desligados e os pinos de RA0 a RA3 podem ser utilizados para I/O digital.
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. Bit 7
Registrador: OPTION Bit 6 Bit 5
Bit 4
Bit 3
Endereços: 81h e 181h Bit 2 Bit 1
Bit 0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
/RBPU
INTEDG
TOCS
TOSE
PSA
PS2
PS1
PS0
/RBPU – Habilitação dos pull-ups internos para o PORTB. 0 = Pull-ups habilitado para todo pino do PORTB configurado como entrada. 1 = Pull-ups desabilitado. INTEDG – Configuração da borda que gerará a interrupção externa no RB0. 0 = A interrupção irá ocorrer na borda de descida. 1 = A interrupção irá ocorrer na borda de subida. TOCS – Configuração do incremento para o TMR0. 0 = TMR0 será incrementado internamente pelo clock da máquina. 1 = TMR0 será incrementado externamente pela mudança no pino RA4/T0CKI. 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.
PSA – Configuração de aplicação do prescaler. 0 = O prescaler será aplicado ao TMR0.
1 = O prescaler será aplicado ao WDT.
* Para o TMR0 ser incrementado a cada ciclo de máquina é necessário que PSA = 1 PS2, PS1 e PS0 – Configuração do valor de prescaler. Bits 2, 1, 0
TMR0
WDT
000
1:2
1:1
001
1:4
1:2
010
1:8
1:4
011
1:16
1:8
100
1:32
1:16 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. Registrador: PCON
Endereço: 8Eh
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
-
-
-
-
R/W
-
R/W
R/W
-
-
-
-
OSCF
-
/POR
/BOD
OSCF – Bit de controle do modo de operação do oscilador de clock interno. 0 = Clock de 37 KHz – somente nos modos de clock interno ou resistor externo. 1 = Clock de 4 MHz interno ou conforme resistor externo. /POR – Sinalizador de reset de inicialização. 0 = Houve um reset do tipo POR – reset de inicialização. 1 = Não ocorreu o reset de inicialização. /BOD – Sinalizador de reset por queda de tensão de alimentação (Brown-out). 0 = Houve reset por queda da tensão alimentação. 1 = Não houve reset por queda de tensão de alimentação. Conhecendo o INTCON – Esse registrador serve para configurar e identificar as interrupções. Registrador: INTCON
Endereços: 0Bh e 8Bh
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
GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
GIE – Habilitação geral das interrupções (chave geral). 0 = Nenhuma interrupção será tratada. 1 = As interrupções habilitadas serão tratadas individualmente.
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.
T0IE – Habilitação da interrupção de estouro de TMR0 (chave individual). 0 = A interrupção não será tratada.
1 = A interrupção será tratada.
INTE – Habilitação da interrupção externa no pino RB0 (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.
T0IF – Identificação da interrupção de estouro de TMR0. 0 = Esta interrupção não ocorreu.
1 = Esta interrupção ocorreu.
INTF – Identificação da interrupção externa no pino RB0. 0 = Esta interrupção não ocorreu.
1 = Esta interrupção ocorreu.
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.
Conhecendo o PIE1 – Possui a função de habilitação / desabilitação das chamadas interrupções periféricas. Registrador: PIE1
Endereços: 8Ch
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
EEIE
CMIE
RCIE
TXIE
-
CCP1IE
TMR2IE
TMR1IE
EEIE – Habilitação de interrupção por término de escrita na EEPROM interna. 0 = Esta interrupção não ocorreu.
1 = Esta interrupção ocorreu.
CMIE – Habilitação de interrupção de mudança de estados dos comparadores analógicos. 0 = Esta interrupção não ocorreu.
45
1 = Esta interrupção ocorreu.
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.
TXIE – Habilitação de interrupção de transmissão USART. 0 = Esta interrupção não ocorreu.
1 = Esta interrupção ocorreu.
CCP1IE – Habilitação de interrupção do modulo CCP. 0 = Esta interrupção não ocorreu.
1 = Esta interrupção ocorreu.
TMR2IE – Habilitação de interrupção de transbordo do timer 2. 0 = Esta interrupção não ocorreu.
1 = Esta interrupção ocorreu.
TMR1IE – Habilitação de interrupção de transbordo do timer 1. 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. Conhecendo o PIR1 – Localizado no banco “0” e abriga os flags sinalizadores de interrupções periféricas. Registrador: PIR1
Endereços: 0Ch
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
EEIE
CMIF
RCIF
TXIF
-
CCP1IF
TMR2IF
TMR1IF
EEIF – Sinalizador de término de escrita na EEPROM. 0 = A escrita ainda não terminou ou não foi iniciada. 1 = A escrita terminou. CMIF – Sinalizador de mudança de estado na saída dos comparadores analógicos. 0 = Não houve mudança de estado nos comparadores. 1 = Houve mudança na saída dos comparadores. RCIF – Sinalizador de recepção de caractere na USART. 0 = Não houve recepção de novos caracteres. 1 = Um novo caractere foi recebido. TXIF – Sinalizador de transmissão na USART. 0 = Não houve transmissão na USART ou o TSR esta ocupado. 1 = O caractere armazenado no TXREG foi repassado para o TSR.
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. TMR2IF – Sinalizador de transbordo no timer 2. 0 – Não houve transbordo de contagem no TMR2. 1 – Houve transbordo de contagem no TMR2. TMR1IF - Sinalizador de transbordo no timer 1. 0 – Não houve transbordo de contagem no TMR1. 1 – Houve transbordo de contagem no TMR1. Conhecendo o PCL – O PCL é um registrador que armazena os 8 bits menos significativos do PC (program counter), o qual indica a próxima linha do programa que será executado no momento. A cada ciclo de máquina o PC é automaticamente alterado, para que o programa possa ser executado. Esse registrador também pode ser alterado pelo programa, mas isto deve ser feito com extremo cuidado para que o sistema não se perca e/ou trave. Registrador: PCL
Endereços: 02h e 82h
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
Parte baixa do PC Conhecendo o PCLATH – Como a área de memória de programação do PIC 16F628 é maior que 256 bytes, não é possível acessá-la completamente com somente os 8 bits do PCL. Por isso, o PCLATH possui os 5 bits mais altos do PC. No PIC 16F628, esse registrador é controlado diretamente pelo hardware e não precisa ser acessado pelo programa. Registrador: PCLATH
Endereços: 0Ah e 8Ah
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
Parte Alta do PC
4.8.1 - Registradores Portas Conhecendo os TRIS – Esses registradores servem para configurar os pinos das portas como entrada ou saída. Quando é colocado “1” em um bit do TRIS, o pino relacionado a ele é configurado como entrada. Para configurar o pino como saída, deve-se colocar “0” no bit relacionado. Basta relacionar “1” a palavra “Imput” (entrada) e “0” a palavra “Output” (saída). Para configurar o PORTA, deve ser utilizado o TRISA e para configurar o PORTB, deve ser utilizado o TRISB.
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
Registrador: TRISB
Endereços: 86h e 186h
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. RB7
Ref. RB6
Ref. RB5
Ref. RB4
Ref. RB3
Ref. RB2
Ref. RB1
Ref. RB0
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. Registrador: PORTA
Endereços: 05h
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
RA7
RA6
RA5
RA4
RA3
RA2
RA1
RA0
Registrador: PORTB
Endereços: 06h e 106h
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
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0
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. Registrador: TMR0
Endereços: 01h
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
Contador automático de 8 bits Conhecendo o TMR1 – O TMR1 é um módulo de 16 bits capaz de operar em três modos básicos, como temporizador síncrono, contador síncrono e assíncrono, com funções de prescaler interno, possibilidade de conexão de cristal externo e de reset gerado pelo módulo CCP. Possui uma filosofia similar ao do timer “0”, porém se destaca a presença de um registrador de controle destinado especificamente ao timer “1”, o T1CON e os registradores específicos para o armazenamento de contagem, (TMR1L e TMR1H). Relacionado aos registradores INTCON, PIR, PIE e T1CON, além dos já citados. Conhecendo o TMR2 – O TMR2 é um temporizador de 8 bits com princípio de funcionamento similar ao do timer “0” e com características de pré-divisor, pós-divisor, capacidade de ligar ou desligar a contagem do módulo e o registrador de período (PR2). Tem o propósito básico de fornecer a base de tempo para o módulo CCP1. Relacionado aos registradores INTCON, PIR, PIE, TMR2, T2CON e PR2. 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. Registrador: EEADR
Endereços: 9Bh
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
Endereço de acesso a EEPROM
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. Registrador: EEDATA
Endereços: 9Ah
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
Dado para escrita / leitura da EEPROM Conhecendo os EECONS – Existem dois registradores de configuração da EEPROM: EECON1 e EECON2. Vejamos primeiramente o EECON1 que é responsável pelas operações de escrita e leitura da EEPROM. Bit 7
Registrador: EECON1 Bit 6 Bit 5
Bit 4
Bit 3
Endereços: 9Ch Bit 2 Bit 1
Bit 0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
-
-
-
EEIF
WRERR
WREN
WR
RD
EEIF – Identificação da interrupção de final da escrita na EEPROM. 0 = Esta interrupção não ocorreu 1 = Esta interrupção ocorreu * Esse bit se encontra neste registrador por não haver mais espaço no registrador INTCOM. WRERR – Identificação de erro durante a escrita na EEPROM. 0 = Não ocorreu erro, a escrita foi completada 1 = Um erro ocorreu por uma escrita não terminada (um reset pode ter ocorrido). WREN – Habilitação de escrita na EEPROM (bit de segurança). 0 = Não disponibiliza escrita na EEPROM. 1 = Disponibiliza escrita na EEPROM. WR – Ciclo de escrita na EEPROM. 0 = Este bit só pode ser zerado pelo hardware, quando o ciclo de escrita termina. 1 = Inicia o ciclo de escrita. RD – Ciclo de leitura na EEPROM. 0 = Este bit só pode ser zerado pelo hardware, quando o ciclo de leitura termina. 1 = Inicia o ciclo de leitura. 51
Em relação ao EECON2, devemos comentar que não se trata de um registrador verdadeiramente implementado na memória. Ele só é utilizado durante a inicialização do ciclo de escrita na EEPROM por uma questão de segurança, evitando assim que a memória seja alterada acidentalmente. Registrador: EECON2
Endereços: 9Dh
Utilizado para inicializar corretamente a escrita na EEPROM
4.8.4 - Endereçamento indireto 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. Registrador: FSR
Endereços: 04h e 84h
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
Ponteiro para endereçamento indireto Registrador: INDF
Endereços: 00h e 80h
Valor do endereçamento indireto
52
4.9 – Exercícios 1 – Qual a função do microcontrolador ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 2 – Compare o microcontrolador com o microprocessador e indique suas principais diferenças. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 3 – Imaginando o microcontrolador como um dispositivo de seis partes, indique quais são e como defini-las. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 4 – Sabendo que o microcontrolador PIC utiliza uma tecnologia RISC, defina-a e indiquem quais as suas vantagens. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
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. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 6 – Qual a função do vetor de reset, vetor de interrupção e a pilha ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 7 – Qual a diferença entre os registradores especiais e os registradores de uso geral ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 8 – Para que serve a interrupção nos microcontroladores PIC ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 9 – Dentre os tipos de interrupção para os microcontroladores PIC, selecionamos somente quatro. Quais são e explique-as. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 54
__________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 10 – Explique o procedimento executado pelo microcontrolador, sempre que uma interrupção acontece. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 11 – Cite as principais características do microcontrolador 16F628. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 12 – Comente sobre os circuitos osciladores para o microcntrolador PIC. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 13 - Explique o comportamento do detector de baixa tensão para o microcontrolador PIC. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
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
Resumo e condições dos bancos de memória após o reset
¾ Programação e linguagem de máquina ¾ Noções de fluxograma de programação ¾ O resumo das instruções
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
04
FSR
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
IRP
RP1
RP0
/TO
/PD
Z
DC
C
0001 1xxx 000q quuu xxxx xxxx uuuu uuuu
Ponteiro para o endereçamento indireto à memória
07
Não implementado no PIC 16f628. O valor lido é sempre zero.
08
Não implementado no PIC 16f628. O valor lido é sempre zero.
09
Não implementado no PIC 16f628. O valor lido é sempre zero.
0A
PCLATH
-
-
-
---0 0000
0B
INTCON
GIE
EEIE
TOIE
INTE
RBIE
TOIF
INTF
0C
PIR1
EEIE
CMIF
RCIF
TXIF
-
CCP1IF
TMR2IF TMR1IF
Parte alta do PC
---0 0000
RBIF 0000 000x 0000 000u
0000 -000 0000 –000
Não implementado no PIC 16f628. O valor lido é sempre zero.
0D 0E
TMR1L
Registrador de acesso ao “LSB” do timer 1
xxxx xxxx xxxx xxxx
0F
TMR1H
Registrador de acesso ao “MSB” do timer 1
xxxx xxxx xxxx xxxx
10
T1CON
11
TMR2
12
T2CON
-
-
T1CKPS
TICKPS
T10SCE
T1SYN
TMR1C
TMR10
--uu uuuu
0000 0000 0000 0000
Registrador de acesso ao conteúdo do timer 2 -
--00 0000
TOU
TOU
TOU
TOU
TMR
T2CK
T2CK
TPS3
TPS2
TPS1
TPS0
20N
PS0
PS0
13
Não implementado no PIC 16f628. O valor lido é sempre zero.
14
Não implementado no PIC 16f628. O valor lido é sempre zero.
-000 0000 -uuu uuuu
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
-
-
SPEN
RX9
CCP1X
SREN
CCP1Y
CCP1
CCP1
CCP1
CCP1
M3
M2
M1
M0
CREN ADEN
FERR
--00 0000
--00 0000
OERR RX9D 0000 –00x 0000 –00x
18
RCSTA
19
TXREG
Registrador de transmissão de dados USART
0000 0000 0000 0000
1A
RCREG
Registrador de recepção de dados USART
0000 0000 0000 0000
1B
Não implementado no PIC 16f628. O valor lido é sempre zero.
1C
Não implementado no PIC 16f628. O valor lido é sempre zero.
1D
Não implementado no PIC 16f628. O valor lido é sempre zero.
60
Não implementado no PIC 16f628. O valor lido é sempre zero.
1E 1F
CMCON
C2OUT C1OUT C2INV C1INV
CIS
CM2
CM1
CM0
0000 0000 0000 0000
BANK 1 80
INDF
---- ----
81
OPTION
82
PCL
83
STATUS
84
FSR
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
Valor do endereçamento indireto /RBPU INTEDG T0CS
T0SE
PSA
PS2
PS1
PS0
RP1
RP0
/TO
/PD
Z
1111 1111 1111 1111 0000 0000 0000 0000
Parte baixa (8 bits menos significativos) do PC IRP
---- ----
DC
C
0001 1xxx 000q quuu xxxx xxxx uuuu uuuu
Ponteiro para o endereçamento indireto
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.
---- ----
---- ----
---0 0000
---0 0000
8A
PCLATH
-
-
-
8B
INTCON
GIE
EEIE
TOIE
INTE
RBIE
TOIF
INTF
8C
PIE1
EEIE
CMIE
RCIE
TXIE
-
CCP1IE
TMR2IE TMR1IE
RBIF 0000 000x 0000 000u
Não implementado no PIC 16f628. O valor lido é sempre zero.
8D 8E
Parte alta do PC
PCON
-
-
-
-
OSCF
-
/POR /BOD
0000 -000 0000 –000 ---- ----
---- ----
---- 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
1111 1111 1111 1111
Registrador de período do timer 2
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.
---- ----
---- ----
BRGH TRMT TX9D
98
TXSTA
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
-
9D
EECON2
9E 9F
VIRCON
CSRC
TX9
TXEN SYNC
-
WRERR
WREN
WR
RD
0000 -010 0000 -010
---- x000
---- q000
Registrador de controle auxiliar da EEPROM
---- ----
---- ----
Não implementado no PIC 16f628. O valor lido é sempre zero.
---- ----
---- ----
-
VRE
VROE
-
VRR
-
-
VR3
61
VR2
VR1
VR0
000- 0000 000- 0000
BANK 2 100
INDF
/RBPU INTEDG T0CS
101 102
PCL
103
STATUS
104
FSR
T0SE
PSA
PS2
PS1
PS0
IRP
RP1
RP0
/TO
/PD
Z
DC
C
RB7
RB6
RB5
RB4
RB3
RB2
1111 1111 1111 1111 0001 1xxx 000q quuu xxxx xxxx uuuu uuuu
Ponteiro para o endereçamento indireto Não implementado no PIC 16f628. O valor lido é sempre zero.
PORT B
---- ----
0000 0000 0000 0000
Parte baixa (8 bits menos significativos) do PC
105 106
---- ----
Valor do endereçamento indireto
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.
---- ----
---- ----
---0 0000
---0 0000
10A PCLATH
-
-
-
10B INTCON
GIE
EEIE
TOIE
Parte alta do PC INTE
RBIE
TOIF
INTF
RBIF 0000 000x 0000 000u
Não implementado no PIC 16f628. O valor lido é sempre zero.
11F
---- ----
---- ----
---- ----
---- ----
BANK 3 180
INDF
Valor do endereçamento indireto /RBPU INTEDG T0CS
181 182
PCL
183
STATUS
184
FSR
PSA
PS2
PS1
PS0
IRP
RP1
RP0
/TO
/PD
Z
DC
C
RB7
RB6
RB5
RB4
RB3
RB2
RB1
0001 1xxx 000q quuu xxxx xxxx uuuu uuuu
Ponteiro para o endereçamento indireto Não implementado no PIC 16f628. O valor lido é sempre zero.
PORT B
1111 1111 1111 1111 0000 0000 0000 0000
Parte baixa (8 bits menos significativos) do PC
185 186
T0SE
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.
---- ----
---- ----
---0 0000
---0 0000
18A PCLATH
-
-
-
18B INTCON
GIE
EEIE
TOIE
19F
Parte alta do PC INTE
RBIE
TOIF
INTF
RBIF 0000 000x 0000 000u
Não implementado no PIC 16f628. O valor lido é sempre zero.
---- ----
---- ----
* u – inalterado, x – desconhecido, q – depende de condição. Os endereços entre 10Ch até 11Fh no banco 2 e os endereços 18Ah até 19Fh não são implementados.
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
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.
Limpa f.
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
BCF
f,b
Descrição 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
Simulações com microprocessador PIC16F628
¾ 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
D13 16F628
1 2 3 4 5
6 7 8 9
R11
Q2
RA2 RA1 RA3 RA0 RA4 OSC1 MCLR OSC2 VSS VDD RB0 RB7 RB1 RB6 RB2 RB5 RB3 RB4
Q1 R10
100uF
+
C2
C3 22uF
+
D16 8V2
D11
D18
D17
LED11
5V1
Figura 15 – Esquema elétrico 69
D12 D14
6.2 – O programa ICPROG de transferência de dados para PIC O gravador baseado no JDM (Jens Dyekjaer Madson) utiliza também as instruções da Microchip. Suporta a maioria dos microcontroladores PIC de 8, 18, 28 e 40 pinos com encapsulamento DIP que possuam o recurso de programação (gravação) serial. A gravação é simples e rápida, ele é conectado diretamente ao PC via interface serial RS-232 (conector DB-9) e não utiliza fonte de alimentação externa. Permite a gravação "ICSP" (in-circuit serial programming) ou seja, pode-se gravar o PIC já montado na placa de aplicação, reduzindo o tempo de desenvolvimento e permitindo a gravação de dispositivos com qualquer encapsulamento inclusive SMD. É fornecido montado e testado com cabo para conexão ao PC. Os requisitos mínimos são: Hardware - 8Mb de memória RAM e um processador 386 Software - Sistema Operacional Windows 95, 89, ME, NT, 2000 ou XP. 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.
Figura 16 – Hardware settings 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
Abra o arquivo de que contem a programação e o arquivo de dados (caso exista).
Ajuste a configuração do IC. ( tipo de oscilador, fusíveis, etc. )
Transfira a programação para o hardware ( IC ).
Se não forem detectados erros o IC ficou corretamente programado
73
A lista abaixo, informa quais os Microcontroladores suportados pelo programador JDM.
C. I.
Tipo
IC-Prog Fabricante ver: ver: ver: ver: 1.05A 1.05 1.04C 1.04A
PIC12C508/A
Microcontrolador
Microchip
•
•
•
•
PIC12C509/A
Microcontrolador
Microchip
•
•
•
•
PIC 12CE518
Microcontrolador
Microchip
•
•
•
•
PIC12CE519
Microcontrolador
Microchip
•
•
•
•
PIC 12C671
Microcontrolador
Microchip
•
•
•
•
PIC12C672
Microcontrolador
Microchip
•
•
•
•
PIC12CE673
Microcontrolador
Microchip
•
•
•
•
PIC12CE674
Microcontrolador
Microchip
•
•
•
•
PIC12F629
Microcontrolador
Microchip
•
PIC12F675
Microcontrolador
Microchip
•
PIC16C433
Microcontrolador
Microchip
•
•
•
•
PIC16C54
Microcontrolador
Microchip
•
•
•
•
PIC16C56
Microcontrolador
Microchip
•
•
•
•
PIC16C 58
Microcontrolador
Microchip
•
•
•
•
PIC16C61
Microcontrolador
Microchip
•
•
•
•
PIC16C62A/B
Microcontrolador
Microchip
•
•
•
•
PIC16C63/A
Microcontrolador
Microchip
•
•
•
•
16C64A
Microcontrolador
Microchip
•
•
•
•
16C65A/B
Microcontrolador
Microchip
•
•
•
•
PIC16C66
Microcontrolador
Microchip
•
•
•
•
PIC16C67
Microcontrolador
Microchip
•
•
•
•
PIC16C71
Microcontrolador
Microchip
•
•
•
•
PIC16C72/A
Microcontrolador
Microchip
•
•
•
•
PIC16C/F73A/B
Microcontrolador
Microchip
•
•
•
•
PIC16C/F74A/B
Microcontrolador
Microchip
•
•
•
•
PIC16C/F76
Microcontrolador
Microchip
•
•
•
•
PIC16C/F77
Microcontrolador
Microchip
•
•
•
•
PIC16F83
Microcontrolador
Microchip
•
•
•
•
PIC16C/F84/A
Microcontrolador
Microchip
•
•
•
•
PIC16C505
Microcontrolador
Microchip
•
•
•
•
PIC16C605
Microcontrolador
Microchip
•
•
PIC16C620
Microcontrolador
Microchip
•
•
•
•
PIC16C621
Microcontrolador
Microchip
•
•
•
•
PIC16C622 /A
Microcontrolador
Microchip
•
•
•
•
PIC16CE625
Microcontrolador
Microchip
•
•
•
•
PIC16F627
Microcontrolador
Microchip
•
•
•
•
PIC16F628
Microcontrolador
Microchip
•
•
•
•
74
Observações
PIC16C711
Microcontrolador
Microchip
•
•
•
•
PIC16C712
Microcontrolador
Microchip
•
PIC16C715
Microcontrolador
Microchip
•
•
•
•
PIC16C765
Microcontrolador
Microchip
•
•
•
•
PIC16F870
Microcontrolador
Microchip
•
•
•
•
PIC16F871
Microcontrolador
Microchip
•
•
•
•
PIC16F872
Microcontrolador
Microchip
•
•
•
•
PIC16F873
Microcontrolador
Microchip
•
•
•
•
PIC16F873 A
Microcontrolador
Microchip
•
PIC16F874
Microcontrolador
Microchip
•
•
•
•
PIC16F874A
Microcontrolador
Microchip
•
PIC 16F876
Microcontrolador
Microchip
•
•
•
•
PIC16F876
Microcontrolador
Microchip
•
PIC16F877
Microcontrolador
Microchip
•
•
•
•
PIC16F877A
Microcontrolador
Microchip
•
PIC16C923
Microcontrolador
Microchip
•
•
•
•
PIC16C924
Microcontrolador
Microchip
•
•
•
•
PIC18F242
Microcontrolador
Microchip
•
•
PIC18F248
Microcontrolador
Microchip
•
•
PIC18F252
Microcontrolador
Microchip
•
•
PIC18F258
Microcontrolador
Microchip
•
•
PIC18F442
Microcontrolador
Microchip
•
•
PIC18F448
Microcontrolador
Microchip
•
•
PIC18F452
Microcontrolador
Microchip
•
•
PIC18F458
Microcontrolador
Microchip
•
•
•
6 . 3 – Display de Cristal Liquido Display de Cristal Liquido Uma outra aplicação muito utilizada com microcontrolador é o display de LCD, onde podemos escrever caracteres alfanuméricos segundo código ASCII, esses dispositivos já possuem internamente um microcontrolador dedicado, por isso chamamos de LCD inteligente, e já possui armazenado o código ASCII, bastando via software enviar comandos de inicialização, de escrita ou até mesmo de leitura. Existe uma gama muito grande de LCD no mercado, mas a maioria tem o hardware compatível. Nosso exemplo de aplicação vai utilizar o modo que utiliza o menor número de pinos possível, usaremos 4 bits para enviar os comandos e os dados. Apesar dos dados serem de 8 bits, esse modo permite que você divida os 8 bits em duas palavras de 4 bits, e o LCD inteligente monta os 8 bits automaticamente.
75
Vejamos os pinos do LCD na tabela abaixo:
76
6.4 – O Conjunto de instruções do microcontrolador PIC
ADDLW Sintaxe Operação Status Codificação Descrição Ciclos
ADDWF Sintaxe Operação Status Codificação Descrição
Ciclos
ANDLW Sintaxe Operação Status Codificação Descrição Ciclos
Efetua a soma de um literal no registrador W [label] ADDLW k (W) + k – (W) C, DC, Z 0011 111x kkkk kkkk O conteúdo do registrador W é somado com literal k e o resultado colocado no registrador W 1
Efetua a soma do registrador W ao registro f [label] ADDWF f,d (W) + (f) – (destino) C, DC, Z 0011 0111 dfff ffff Soma o conteúdo do registro W ao registro f. Se
;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 PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA #DEFINE
BANK0
BCF STATUS,RP0
;SETA BANK 0 DE MEMÓRIA
#DEFINE
BANK1
BSF STATUS,RP0
;SETA BANK 1 DE MAMÓ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
ENDC
W_TEMP
;REGISTRADORES TEMPORÁRIOS PARA USO
STATUS_TEMP
;JUNTO ÀS INTERRUPÇÕES NOVAS VARIÁVEIS ;FIM DO BLOCO DE MEMÓRIA
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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG 0x00
;ENDEREÇO INICIAL DE PROCESSAMENTO
GOTO INICIO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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 ORG 0x04
;ENDEREÇO INICIAL DA INTERRUPÇÃO
MOVWF
W_TEMP
SWAPF
STATUS,W
MOVWF
STATUS_TEMP
;COPIA W PARA W_TEMP ;COPIA STATUS PARA STATUS_TEMP
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
SWAPF
W_TEMP,F
SWAPF
W_TEMP,W ;MOVE W_TEMP PARA W
;MOVE STATUS_TEMP PARA STATUS
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'
MOVWF
CMCON
;DEFINE O MODO DE OPERAÇÃO ;DO COMPARADOR ANALÓGICO
BANK1 MOVLW
;ALTERA PARA O BANCO 1 B'00000000'
92
MOVWF
TRISA
MOVLW
B'00000000'
MOVWF
TRISB
MOVLW
B'10000100'
MOVWF
OPTION_REG
MOVLW
B'00000000'
MOVWF
INTCON
;DEFINE ENTRADAS E SAÍDAS DO PORTA ;DEFINE ENTRADAS E SAÍDAS DO PORTB ;DEFINE OPÇÕES DE OPERAÇÃO ;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
;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 #DEFINE
BANK0
BCF STATUS,RP0
;SETA BANK 0 DE MEMÓRIA
#DEFINE
BANK1
BSF STATUS,RP0
;SETA BANK 1 DE MAMÓ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
ENDC
W_TEMP
;REGISTRADORES TEMPORÁRIOS PARA
STATUS_TEMP
;INTERRUPÇÕES
TEMPO01
;ESTAS VARIÁVEIS CONTAM O TEMPO DE PISCAGEM
TEMPO02
;DOS LEDS ;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) #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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; 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 RETFIE
;ENDEREÇO INICIAL DA INTERRUPÇÃO
95
;RETORNA DA INTERRUPÇÃO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;
ROTINA DE DELAY
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DELAY MOVLW
.1000
MOVWF
TEMPO02
MOVLW
.200
MOVWF
TEMPO01
DL1
DL2 NOP NOP DECFSZ
TEMPO01,F
GOTO DL2 DECFSZ
TEMPO02,F
GOTO DL1 RETURN ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
INICIO DO PROGRAMA
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INICIO BANK0
;ALTERA PARA O BANCO 0
CLRF PORTA
;LIMPA O PORTA
CLRF PORTB
;LIMPA O PORTB
BANK1
;ALTERA PARA O BANCO 1
MOVLW
B'00000000'
MOVWF
TRISA
MOVLW
B'00000000'
MOVWF
TRISB
MOVLW
B'10000000'
MOVWF
OPTION_REG
;DEFINE TODO O PORTA COMO SAÍDA ;DEFINE TODO O PORTB COMO SAÍDA
;PULL-UPS
;PRESCALER 1:2 NO TMR0
96
DESABILITADOS
;AS DEMAIS CONFG. SÃO IRRELEVANTES MOVLW
B'00000000'
MOVWF
INTCON
BANK0
;TODAS AS INTERRUPÇÕES DESLIGADAS ;RETORNA PARA O BANCO 0
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
INICIALIZAÇÃO DAS VARIÁVEIS
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
ROTINA PRINCIPAL
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MAIN BSF
LED
;ACENDE O LED0
BSF
LED1
;ACENDE O LED1
CALL DELAY BCF
LED
BCF
LED1
CALL DELAY GOTO
MAIN
;RETORNA AO LOOP PRINCIPAL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE
;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 #DEFINE
BANK0
BCF STATUS,RP0
;SETA BANK 0 DE MEMÓRIA
#DEFINE
BANK1
BSF STATUS,RP0
;SETA BANK 1 DE MAMÓ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 ;ESTAS VARIÁVEIS NEM SERÃO UTILIZADAS
ENDC
;FIM DO BLOCO DE MEMÓRIA
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) #DEFINE
BOTAO
PORTA,2
;PORTA DO BOTÃO
; 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) #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
; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS ORG 0x04
;ENDEREÇO INICIAL DA INTERRUPÇÃO
RETFIE
;RETORNA DA INTERRUPÇÃO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
INICIO DO PROGRAMA
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INICIO BANK0
;ALTERA PARA O BANCO 0
MOVLW
B'00000111'
;DEFINE O MODO DE OPERAÇÃO
MOVWF
CMCON
;DO COMPARADOR ANALÓGICO
CLRF PORTA CLRF PORTB
;LIMPA O PORTA ;LIMPA O PORTB
BANK1
;ALTERA PARA O BANCO 1
MOVLW
B'00000100'
;DEFINE RA2 COMO ENTRADA E DEMAIS
MOVWF
TRISA
;COMO SAÍDAS
MOVLW
B'00000000'
MOVWF
TRISB
MOVLW
B'10000000'
MOVWF
OPTION_REG
;DEFINE TODO O PORTB COMO SAÍDA ;PRESCALER 1:2 NO TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW
B'00000000'
MOVWF
INTCON
BANK0
;TODAS AS INTERRUPÇÕES DESLIGADAS ;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
BCF
LED1
GOTO
;APAGA O LED MAIN
;RETORNA AO LOOP PRINCIPAL
BOTAO_PRES BSF
LED
BSF
LED1
GOTO
;ACENDE O LED 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
;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 #DEFINE
BANK0
BCF STATUS,RP0
;SETA BANK 0 DE MEMÓRIA
#DEFINE
BANK1
BSF STATUS,RP0
;SETA BANK 1 DE MAMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
VARIÁVEIS
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS ; PELO SISTEMA CBLOCK
0x20
W_TEMP
;REGISTRADORES TEMPORÁRIOS PARA
STATUS_TEMP
;INTERRUPÇÕES VARIÁVEIS NEM SERÃO UTILIZADAS
CONTADOR
;ARMAZENA O VALOR DA CONTAGEM
FLAGS FILTRO ENDC
;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO
;ARMAZENA OS FLAGS DE CONTROLE ;FILTRAGEM PARA O BOTÃO ;FIM DO BLOCO DE MEMÓRIA
102
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
FLAGS INTERNOS
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA #DEFINE
SENTIDO
FLAGS,0
;FLAG DE SENTIDO ; 0 -> SOMANDO ; 1 -> SUBTRAINDO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
CONSTANTES
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA MIN
EQU
.10
;VALOR MÍNIMO PARA O CONTADOR
MAX
EQU
.30
;VALOR MÁXIMO PARA O CONTADOR
T_FILTRO
EQU
.230
;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
BOTAO
PORTA,2
;PORTA DO BOTÃO
; 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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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 ORG 0x04
;ENDEREÇO INICIAL DA INTERRUPÇÃO
RETFIE
;RETORNA DA INTERRUPÇÃO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
INICIO DO PROGRAMA
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INICIO BANK1 MOVLW MOVWF SAÍDAS
;ALTERA PARA O BANCO 1 B'00000100' TRISA
MOVLW
B'00000000'
MOVWF
TRISB
MOVLW
B'10000000'
MOVWF
OPTION_REG
;DEFINE RA2 COMO ENTRADA E DEMAIS COMO
;DEFINE TODO O PORTB COMO SAÍDA ;PRESCALER 1:2 NO TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW
B'00000000'
MOVWF
INTCON
BANK0
;TODAS AS INTERRUPÇÕES DESLIGADAS ;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
BOTAO
;O BOTÃO ESTÁ PRESSIONADO?
CHECA_BT BTFSC GOTO MAIN DECFSZ
;NÃO, ENTÃO CONTINUA ESPERANDO SIM FILTRO,F
GOTO CHECA_BT
;DECREMENTA O FILTRO DO BOTÃO ;NÃO, CONTINUA ESPERANDO SIM
TRATA_BT BTFSS
SENTIDO
GOTO SOMA
;DEVE SOMAR (SENTIDO=0)? ;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
INCF CONTADOR,F
;INCREMENTA O CONTADOR
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?
SOMA
GOTO ATUALIZA
;SIM, ENTÃO CONTA < MAX ;NÃO, ENTÃO CONTA >= MAX
BSF
SENTIDO
GOTO MAIN
;MUDA SENTIDO PARA SUBTRAÇÃO ;VOLTA AO LOOP PRINCIPAL
105
ATUALIZA MOVF CONTADOR,W
;COLOCA CONTADOR EM W
MOVWF
;ATUALIZA O PORTB PARA
PORTB
;VISUALIZARMOS O VALOR DE CONTADOR BTFSS
BOTAO
GOTO $-1
;O BOTÃO CONTINUA PRESSIONADO? ;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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE
;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 #DEFINE
BANK0
BCF STATUS,RP0
;SETA BANK 0 DE MEMÓRIA
#DEFINE
BANK1
BSF STATUS,RP0
;SETA BANK 1 DE MAMÓ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 ESTAS VARIÁVEIS NEM
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 MIN
EQU
.10
MAX
EQU
.240
STEP
EQU
.5
MULTIPLO
EQU
.5
;A CONSTANTE DISPLAY REPRESENTA O SÍMBOLO QUE APARECERÁ PISCANDO NO ;DISPLAY. 1=LED LIGADO E 0=LED DESLIGADO. A RELAÇÃO ENTRE BITS E ;SEGMENTOS É A SEGUINTE: 'EDC.BAFG' DISPLAY
EQU
B''11011010'
;(LETRA H)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
BT1
PORTA,1
;BOTÃO 1 - INCREMENTA ; 0 -> PRESSIONADO ; 1 -> LIBERADO
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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
MOVLW
.200
MOVWF
TEMPO1
;INICIA TEMPO 2 COM VALOR EM W
DL1
DL2
;ESTE DELAY DURA 1ms (5*200) NOP NOP DECFSZ
TEMPO1,F
GOTO DL2 DECFSZ
;DECREMENTA TEMPO1. ACABOU? ;NÃO, CONTINUA AGUARDANDO SIM
TEMPO2,F
GOTO DL1
;DECREMENTA TEMPO2. ACABOU? ;NÃO, CONTINUA AGUARDANDO SIM
RETURN ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
INICIO DO PROGRAMA
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INICIO BANK0
;ALTERA PARA O BANCO 0
MOVLW
B'00000111'
MOVWF
CMCON
BANK1 MOVLW MOVWF SAÍDAS
;DEFINE O MODO DE OPERAÇÃO DO ;COMPARADOR ANALÓGICO ;ALTERA PARA O BANCO 1
B'00000110' TRISA
MOVLW
B'00000000'
MOVWF
TRISB
MOVLW
B'10000000'
MOVWF
OPTION_REG
;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS
;DEFINE TODO O PORTB COMO SAÍDA ;PRESCALER 1:2 TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW
B'00000000'
MOVWF
INTCON
BANK0
;TODAS AS INTERRUPÇÕES DESLIGADAS ;RETORNA PARA O BANCO 0
110
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
INICIALIZAÇÃO DAS VARIÁVEIS
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CLRF PORTA MOVLW
DISPLAY
MOVWF
PORTB
MOVLW
MIN
MOVWF
CONTADOR
;LIMPA O PORTA ;ACENDE O VALOR CERTO NO DISPLAY ;INICIA CONTADOR COM VALOR MIN.
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
;BOTÃO 1 PRESSIONADO?
BT1
GOTO INCREMENTA
;SIM, DEVE INCREMENTAR NÃO
BTFSS
;BOTÃO 2 PRESSIONADO?
BT2
GOTO DECREMENTA
;SIM, DEVE DECREMENTAR NÃO
DECFSZ
;DECREMENTA CONTADOR MULT. ACABOU?
TEMPO3,F
GOTO MAIN1 MOVLW
;NÃO, CONTINUA AGUARDANDO SIM DISPLAY
;APÓS TRANSCORRIDO O TEMPO, IRÁ ;INVERTER OS LEDS CORRETOS ATRAVÉS ;DA MÁSCARA "DISPLAY" E DA OPERAÇÃO XOR
XORWF GOTO MAIN
PORTB,F
;INVERTE LEDS -> PISCA ;COMEÇA NOVAMENTE
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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE
;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 #DEFINE
BANK0
BCF STATUS,RP0
;SETA BANK 0 DE MEMÓRIA
#DEFINE
BANK1
BSF STATUS,RP0
;SETA BANK 1 DE MAMÓ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 VARIÁVEIS NAO UTILIZADAS
CONTADOR
;ARMAZENA O VALOR DA CONTAGEM
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 #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 CONTADOR
MAX
EQU
.15
;VALOR MÁXIMO PARA O CONTADOR
T_FILTRO
EQU
.255
;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
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG
0x00
GOTO
INICIO
;ENDEREÇO INICIAL DE PROCESSAMENTO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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. 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'
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
; 09 - RETORNA SÍMBOLO CORRETO 9
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
MOVLW
B'10000000'
MOVWF
OPTION_REG
;DEFINE TODO O PORTB COMO SAÍDA ;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
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
ST_BT1
;MARCA BOTÃO 1 COMO LIBERADO
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?
GOTO
CHECA_BT2
;NÃO, CONTINUA ESPERANDO SE SIM
BTFSS
ST_BT2
;BOTÃO JÁ ESTAVA PRESSIONADO?
GOTO
INC
;NÃO, EXECUTA AÇÃO DO BOTÃO
GOTO
MAIN
CHECA_BT1
BT1_LIB BCF CHECA_BT2
117
;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
BTFSC
STATUS,Z
;RESULTOU EM ZERO?
GOTO
MAIN
;SIM, RETORNA SEM AFETAR CONT. SE NÃO
DECF
CONTADOR,F
;DECREMENTA O CONTADOR
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
BTFSC
STATUS,Z
;RESULTOU EM ZERO?
GOTO
MAIN
;SIM, RETORNA SEM AFETAR CONT. SE NÃO
INCF
CONTADOR,F
;INCREMENTA O CONTADOR
GOTO
ATUALIZA
;ATUALIZA O DISPLAY
CALL
CONVERTE
;CONVERTE CONTADOR NO NÚMERO
MOVWF
PORTB
;ATUALIZA O PORTB PARA
GOTO
MAIN
;NÃO, VOLTA AO LOOP PRINCIPAL
ATUALIZA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE
;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 #DEFINE
BANK0
BCF STATUS,RP0
;SETA BANK 0 DE MEMÓRIA
#DEFINE
BANK1
BSF STATUS,RP0
;SETA BANK 1 DE MAMÓ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
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) #DEFINE
BOTAO1
PORTA,1
;PORTA DO BOTÃO ; 0 -> PRESSIONADO ; 1 -> LIBERADO
#DEFINE
BOTAO2
PORTA,2
;PORTA DO BOTÃO ; 0 -> PRESSIONADO ; 1 -> LIBERADO
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) #DEFINE
LED
PORTA,3
;LED ;0 -> DESLIGADO ;1 -> LIGADO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
VETOR DE RESET
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG
0x00
GOTO
INICIO
;ENDEREÇO INICIAL DE PROCESSAMENTO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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. ORG
0x04
;ENDEREÇO INICIAL DA INTERRUPÇÃO
MOVWF
W_TEMP
;SALVA W EM W_TEMP
SWAPF
STATUS,W
MOVWF
STATUS_TEMP
;SALVA STATUS EM STATUS_TEMP
BTFSS
INTCON,T0IF
;É INTERRUPÇÃO DE TMR0?
GOTO
SAI_INT
;NÃO, SAI SE AÇÃO SE SIM
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
SWAPF
W_TEMP,F
SWAPF
W_TEMP,W
;RECUPERA STATUS ;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
RETURN
;TIMER JÁ ESTA LIGADO? ;SIM, RETORNA DIRETO SE NÃO
BCF
INTCON,T0IF
MOVLW
.256-.125
MOVWF
TMR0
MOVLW
.125
MOVWF
TEMP1
;INICIA TEMP1 CORRETAMENTE
BSF
INTCON,GIE
;LIGA CHAVE GERAL DE INTERRUPÇÕES
BSF
LED
;ACENDE O LED
RETURN
;LIMPA FLAG DE INT. DE TMR0 ;INICIA TMR0 CORRETAMENTE
;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
MOVLW
B'10000101'
;DEFINE TODO O PORTB COMO SAÍDA
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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CLRF
PORTA
;LIMPA O PORTA
CLRF
PORTB
;LIMPA O PORTB
CLRF
FLAGS
;LIMPA TODOS OS FLAGS
MOVLW
V_INICIO
MOVWF
TEMPO
;INICIA TEMPO = V_INICIO
CALL
ATUALIZA
;ATUALIZA O DISPLAY INICIALMENTE
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
BTFSC
BOTAO1
;O BOTÃO 1 ESTÁ PRESSIONADO?
GOTO
BT1_LIB
;NÃO, ENTÃO TRATA COMO LIBERADO
CHECA_BT1
;SIM
DECFSZ
FILTRO1,F
;DECREMENTA O FILTRO DO BOTÃO
125
;TERMINOU?
GOTO
CHECA_BT1
;NÃO, CONTINUA ESPERANDO SE SIM
BTFSS
ST_BT1
;BOTÃO JÁ ESTAVA PRESSIONADO?
GOTO
ACAO_BT1
;NÃO, EXECUTA AÇÃO DO BOTÃO
GOTO
CHECA_BT2
;SIM, CHECA BOTÃO 2
ST_BT1
;MARCA BOTÃO 1 COMO LIBERADO
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
BT1_LIB BCF CHECA_BT2
;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
BCF
ST_BT2
;MARCA BOTÃO 2 COMO LIBERADO
GOTO
MAIN
;RETORNA AO LOOPING
BT2_LIB
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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE
;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 #DEFINE
BANK0
BCF STATUS,RP0
;SETA BANK 0 DE MEMÓRIA
#DEFINE
BANK1
BSF STATUS,RP0
;SETA BANK 1 DE MAMÓ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 VARIÁVEIS NÃO UTILIZADAS
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 #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 MINIMO PARA O CONTADOR
MAX
EQU
.15
;VALOR MÁXIMO PARA O CONTADOR
T_FILTRO
EQU
.255
;FILTRO PARA BOTÃO
POS_MEM
EQU
.0
;ENDEREÇO DA EEPROM ONDE SERÁ ;ARMAZENADO O VALOR DO CONTADOR
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG H'2100'+POS_MEM
;INÍCIO DA EEPROM
DE
;VALOR INICIAL PARA CONTADOR = 5
.5
;VIDE DIRETRIZ "DE" NO APÊNDICE B ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
RETFIE
;ENDEREÇO INICIAL DA INTERRUPÇÃO ;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'
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
; 09 - RETORNA SÍMBOLO CORRETO 9
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
BCF
EECON1,WREN
BTFSC
EECON1,WR
;INICIA ESCRITA ;ACABOU ESCRITA?
GOTO $-1
;NÃO, AGUARDA
BANK0
;SIM, BANCO 0
BSF
INTCON,GIE
;HABILITA INTERRUPÇÕES
RETURN
;RETORNA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
MOVF
CONTADOR,W
;COLOCA CONTADOR EM W
CALL
ESCR_E2PROM
;EFETUA A ESCRITA EEPROM
BANK0
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
MOVLW
B'10000000'
MOVWF
OPTION_REG
;DEFINE TODO O PORTB COMO SAÍDA ;PRESCALER 1:2 NO TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW
B'00000000'
MOVWF
INTCON
BANK0
;TODAS AS INTERRUPÇÕES DESLIGADAS ;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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CLRF
PORTA
;LIMPA O PORTA
CLRF
PORTB
;LIMPA O PORTB
CLRF
FLAGS
;LIMPA TODOS OS FLAGS
CALL
LE_CONTA
;INICIALIZA CONTADOR COM VALOR ;DA EEPROM
GOTO
ATUALIZA
;ATUALIZA O DISPLAY INICIALMENTE
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
ROTINA PRINCIPAL
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MAIN MOVLW
T_FILTRO
MOVWF
FILTRO1
;INICIALIZA FILTRO1 = T_FILTRO
MOVWF
FILTRO2
;INICIALIZA FILTRO2 = T_FILTRO
BTFSC
BOTAO1
;O BOTÃO 1 ESTÁ PRESSIONADO?
GOTO
BT1_LIB
;NÃO, ENTÃO TRATA COMO LIBERADO
CHECA_BT1
;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
ST_BT1
;MARCA BOTÃO 1 COMO LIBERADO
BTFSC
BOTAO2
;O BOTÃO 2 ESTÁ PRESSIONADO?
GOTO
BT2_LIB
;NÃO, ENTÃO TRATA COMO LIBERADO
BT1_LIB BCF CHECA_BT2
;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
BCF
ST_BT2
;MARCA BOTÃO 2 COMO LIBERADO
GOTO
MAIN
;RETORNA AO LOOPING
BT2_LIB
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
INC
;ATUALIZA O DISPLAY ;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 CALL
;ATUALIZAÇÃO DO DISPLAY 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
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE
;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 #DEFINE
BANK0
BCF STATUS,RP0
;SETA BANK 0 DE MEMÓRIA
#DEFINE
BANK1
BSF STATUS,RP0
;SETA BANK 1 DE MAMÓ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
136
INTENSIDADE
;ARMAZENA O VALOR DA CONTAGEM
FLAGS
;ARMAZENA OS FLAGS DE CONTROLE
FILTRO11
;FILTRAGEM 1 PARA O BOTÃO 1
FILTRO12
;FILTRAGEM 2 PARA O BOTÃO 1
FILTRO21
;FILTRAGEM 1 PARA O BOTÃO 2
FILTRO22
;FILTRAGEM 2 PARA O BOTÃO 2
TEMPO
;INTERVALOS DE 1 MS
ENDC
;FIM DO BLOCO DE MEMÓRIA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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) #DEFINE
LAMPADA
PORTA,0
;DEFINE LAMPADA NO PINO17 ;0 LAMP. APAGADA ;1 LAMP. ACESA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
VETOR DE RESET
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG
0x00
GOTO
INICIO
;ENDEREÇO INICIAL DE PROCESSAMENTO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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
MOVWF
W_TEMP
;SALVA W EM W_TEMP
SWAPF
STATUS,W
MOVWF
STATUS_TEMP
;SALVA STATUS EM STATUS_TEMP
BTFSS
INTCON,T0IF
;É INTERRUPÇÃO DE TMR0?
GOTO
SAI_INT
;NÃO, SAI SE AÇÃO SE SIM
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
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 ;VERIFICA TEMPO MENOR QUE INTENSIDADE
GOTO
LIGA_LAMPADA
BCF
LAMPADA
GOTO
SAI_INT
;DESLIGA LAMPADA
LIGA_LAMPADA BSF
LAMPADA
;LIGA LAMPADA
GOTO
SAI_INT
;SAI DA INTERRUPÇÃO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*
FIM DA INTERRUPÇÃO
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SAI_INT SWAPF
STATUS_TEMP,W
MOVWF
STATUS
SWAPF
W_TEMP,F
SWAPF
W_TEMP,W
;RECUPERA STATUS ;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
MOVLW
B'10000001'
MOVWF
OPTION_REG
;DEFINE TODO O PORTB COMO SAÍDA ;PRESCALER 1:4 NO TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW
B'10100000'
MOVWF
INTCON
BANK0
;CHAVE GERAL E TMR0 ATIVADAS ;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
ST_BT1
;MARCA BOTÃO 1 COMO LIBERADO
BTFSC
BOTAO2
;O BOTÃO 2 ESTÁ PRESSIONADO?
GOTO
BT2_LIB
;NÃO, ENTÃO TRATA COMO LIBERADO
BT1_LIB BCF CHECA_BT2
;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
ST_BT2
;MARCA BOTÃO 2 COMO
MAIN
;RETORNA AO LOOPING
BT2_LIB BCF LIBERADO GOTO
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
CONVERTE
;CONVERTE INTENSIDADE NO NÚMERO DO
ATUALIZA CALL
;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 J1
15V +V
R11 1 2 3 4 5
6 7 8 9
Q2 J5
R12
Q5
R28 L1 D12
Q6
Gnd
DISP4
5V1
abcdefg.
Q4
Gnd
Gnd
D17 D14
Q3
DISP2
DISP3 abcdefg.
Gnd
abcdefg.
DISP1 abcdefg.
D11 D16 8V2 +
D13
C3
C2 100uF
R10
LED10 R16
LED11
22uF
D21
LED13
D19 D20
S4
S3
R26
R27
J3 R8
R29
S5
RA0 RA1 RA2 RA3 RA4
R19
R20 R21 R22
R23
LigDesl
R24
R25
R7
U7
R18
R17
R13
R31
R30
S1
R15
LED12
LED14 2K2 S2
Q7
D15
D18
+
Q1
XTAL
RA5 RA6 RA7
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 VDD VCC
D9 + C1
LigDesl VE
LED7
R5
LED6 R4
R3 R2 R1
LED5 LED4 LED3
15V +V
LED2 IN
R9 D10
16F628 RA2 RA1 RA3 RA0 RA4 OSC1 MCLR OSC2 VSS VDD RB0 RB7 RB1 RB6 RB2 RB5 RB3 RB4
LED1
OUT COM
R14
R6
U6 Con. VE
LED8
5V +V
LED9
J4
J2
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